单片机实现按键灯亮

来源:百度知道 编辑:UC知道 时间:2024/06/08 20:05:12
ORG 0000H
MOV P2,#00H
START: MOV R0,#8
MOV A,#00H
LOOP: JB P3.4,LOOP
RL A
ADD A,#01H
MOV P2,A
DJNZ R0,LOOP
SJMP START
END
中间的RL A
ADD A,#01H
为什么要有RL A
原本把A赋值0了,再加1不就可以了吗,把A移位能算是A*2么?

清0再加1当然不行,因为你在IC识别的数是二进制的,加一的话不等于RL,假设#01H加1结果为#02H,而二进制则是0001+1=0010,在加1,0010+1=0011,并没有向右移动,所以单纯的加1是实现不了右移的。
还有为什么要RL A后再ADD A,#01H我解释一下:
一开始A=0000B
RL A后
A=0000B
+1
A=0001B
再RL A
A=0010B
+1
A=0011B
再RL A
......
以此类推,就完成灯的点亮,不过这程序不怎么好!有兴趣,可以联系我!

运行的结果完全不同(流水灯的流水效果区别很大)

有RL A:
00000001,00000011,00000111,00001111,00011111,00111111,01111111,11111111。

没有RL A,直接ADD A,#01H:
00000001,00000010,00000011,00000100,00000101,00000110,00000111,00001000,00001001.....

A移位可以算是A*2(左移),右移就是除2

搭个电路来看看,印象会比较深刻

我认为用RLC A也可以的