单片机控制彩灯

来源:百度知道 编辑:UC知道 时间:2024/05/21 10:01:49
单片机新手询问:假如用P3.3按键与P3.4按键来控制P0.0口的发光二极管,按P3.3按键使发光二极管每5秒钟亮一下,按P3.4按键使发光二极管每1秒钟亮两下,请问如何编程啊。。。多谢了

D1:JNB P3.3,B1
JNB P3.4,B2
AJMP D1
B1:SETB P0.0
ACALL 5S
CLR P0.0
ACALL 5S
JB P3.3,D1
AJMP B1
B2:SETB P0.0
ACALL 1S
CLR P0.0
ACALL 1S
JB P3.4,D1
AJMP B2
1S:1秒延时程序
5S:5秒延时程序
RET

我很少用汇编写程序.
所以我说下大概的意思吧.
用两个定时器做,一个定时5S.一个定时1S.
P3.3,P3.4接外部中断上,
当某一中断来的时候.关掉其中一个定时器.(TR0=0或 TR1=0)
使相应的定时器工作.也就是TR0=1 或 TR1=1
明白否?

你如果懂得用定时中断的话就很好办,可以设置个基准时间比如10ms,然后拿个寄存器来记LED的翻转时间5s亮一下的话就要记250的数,1s亮两下的话就要记25,然后到达250(25)的时候对P00口取反,并清除寄存器里的数这样一直循环。按键的防抖动方面也可以一10ms的时间为基准拿个寄存器来计数,如果按键值变化的话就把寄存器里的数清掉,知道符合防抖动时间,确定按键功能。如果你不懂得用定时中断的话,那么我建议你加个10ms的延时程序来当基准时间,在主程序里调用,其他的跟上面是一样的。 (10ms会有点长,基本上都是在1ms以下,不过这里如果是5s亮一下的话那么正好可以只用一个寄存器就可以完成了)
至于第一个回答的我建议你不要采纳,因为如果像他所描述的那样的话,你的按键会处理不过来的。他用的延时是用调用的,也就是说如果LED在工作的话那么IC将在2s或则10s内不会对按键进行响应。