流水灯
用51单片机实现点亮1个2个3个……8个流水灯。我们选择P1口作为控制端口,输出0时LED灯点亮。流水灯实现步骤如下:
- 点亮第一个LED灯,对P1口赋值为“ 1111 1110“;
- 点亮第二个LED灯,对P1口赋值为“ 1111 1100“;
……
3.点亮第八个LED灯,对P1口赋值为“ 0000 0000 “;
4.只点亮第八个LED灯,对P1口赋值为 “ 0111 1111 “;
5.点亮第七个LED灯, 对P1口赋值为 “ 0011 1111 “;
……
6.点亮第一个LED灯,对P1口赋值为 “ 0000 0000“;
7.只点亮第一个LED灯,对P1口赋值为 “ 1111 1110“;
重复上面流程实现LED流水灯。
汇编语言实现:
因为51单片机为8位数处理器,所以从“ 1111 1110“到“ 1111 1100“是左移1位补充数为0 ,我们可以根据左移指令或乘法指令实现。本程序使用乘法指令实现,每次*2都会溢出一次,相应的右边会多出1个0。同理左移根据除法实现每/2右移一位左边补充0。
参考代码如下:
ORG 0000H
AJMP MAIN
//主函数
MAIN: MOV A, #11111111B //初始化累加器
LOOP:
LCALL LEFT //左移程序
CPL A //取反累加器,关闭LED灯
LCALL RIGHT //右移程序