单片机流水灯设计方法.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
单片机流水灯设计方法 元件清单: 名称 型号 数量 电阻 470欧 8 发光二极管(普通白发红) 8 电阻 10K 1 电容 10UF 1 晶振 12MHZ 1 电容 30PF 2 导线 单片机(配底座) AT89S51 1 独立孔万用板 排针 (也可选用两针排线(配底座)) 流水灯原理图 流水灯程序 从原理图可以看出,如果我们想让接在P1.0口的LED1亮起来,那么我们只要把P1.0口 的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电 平变为高电平就可以;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭方法方法同 LED1。因此,要实现流水灯功能,我们只要将LED2~LED8依次点亮、熄灭,依始类推, 8只LED变会一亮一暗的做流水灯了。 实现8个LED流水灯程序用中文表示为:(P1.0低)、(延时)、(P1.0高、P1.1低 )、(延时)、(P1.1高、P1.2低)、(延时)、(P1.2高、P1.3低)、(延时)、( P1.3高、P1.4低)、(延时)、(P1.4高、P1.5低)、(延时)、(P1.5高、P1.6低) 、(延时)、(P1.6高、P1.7低)、(延时)、(P1.7高)、(返回到开始)、(程序 结束)。 我们在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后 让这个数据向高位移动不就实现"流水"效果啦?的确如此!8051指令中没有让P1数据移 动的指令,但有对累加器ACC中数据左移或右移的指令,ACC在指令中常写为A,累加器A 数据左移指令为"RL A",累加器数据右移指令为"RR A",累加器在数据传输和数据处 理过程中作用十分重要,累加器ACC为8位。他可与片内所有单字节寄存器交换数据,实 际上P1和其他端口在单片机中也是一个寄存器。这样我们可以将需移动的数据先放到AC C中,让其移动,然后将ACC移动后的数据再转送到P1口,这样同样可以实现"流水"效果 。 ORG 00H START: MOV ACC,#0FEH ;将数11111110赋给累加器ACC,H代表十六进制 MOV P1,ACC ;将ACC上的11111110给P1此时.P1.0等亮,其他灯暗 MOV R0,#8 ;将数8赋给寄存器R0 LOOP: RL A ;将ACC中的数据左移一位(移动一次时11111110 -->11111101) MOV P1,A ;把ACC移动过的数据送p1口显示 ACALL DELAY ;调用延时子程序 DJNZ R0,LOOP ;没有移动够8次继续移动 (将寄存器上的数据减1不为0时执行逗号后面LOOP,为0 时执行下条指令) AJMP START ;移动完7次后跳到开始重来,以达到循环流动效果 DELAY: ;----- 延时子程序 ----- MOV R1,#248 ;延时一段时间 D1:MOV R2,#248 DJNZ R2,$ DJNZ R1,D1 RET ;子程序返回 END ;程序结束 在上面主程序中用到了以下几条汇编语言指令:MOV、ACALL、RL、DJNZ,AJMP、RET、E ND。 MOV:数据传送指令 ACALL:是子程序调用指令,程序中调用了DELAY延时子程序 RL:数据左移指令为 DJNZ;减1条件转移指令,这是把减1与条件转移两种功能结合在一起的指令AJMP:是无 条件跳转指令,意思是:跳转到指定的标号处继续运行 RET:子程序返回指令 END: 是程序结束的伪指令,意思是告诉编译器,程序到此结束。伪指令只告诉编译器此程序 到此有何要求或条件,它不参与和影响程序的执行。 在上面源程序中"ACALL DELAY"指令的作用是调用DELAY延时子程序。为什么要使用这指令呢?如果不用该指令 能够实现"流水"效果吗?答案是肯定的,一定要用该指令才能看到我们需要的"流水"效 果。如果不用该指令,则由于8个LED发光与熄灭的时间都很短,我们肉眼无法看到LED 的熄灭与点亮,凭我们肉眼看到的是LED1~LED8都同时亮(半亮),而看不到"流水"效 果的! 产生这种现象主要是因为单片机执行每条指令的时间很短,我们知道实验板上单片 机的时钟高达12MHz,在这个时钟信号(即晶体振荡信号)下,一个"机器周期"仅大约 1 (微秒)。本程序中我们用到的指令不是单周期就是双周期,也就是说,执行一句用时仅 1(微秒)或者2(微秒),也就是点亮和熄灭时间都为几微秒级别,在如此高速的流水速 度下,8个LED发光与熄灭的时间都很短,当然凭我们的肉眼看不到"流水"效果了!而延 时程序利用多次循环执行指令来达到目的。由于DJNZ为双周期指令执行一次2微秒,上 面的延时程序延时间为2*248*248=123008 即0.123秒














- 粉丝: 102
- 资源: 3万+
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


