STC89C52单片机入门第五课
1、首先,什么是流水灯
无非就是1号灯亮,其他灭,2号灯亮其他灭......循环到尾返回头。
这里我假设用P2口接的LED灯,你们根据自己LED接的IO口,自己注意修改

2、开始写程序,前面不再细说
写入一个1MS延时程序
在#include<reg52.h>下面,再包含1个头文件
#include <intrins.h>

3、在主函数内,写入P2=0xfe;
while(1)内,写入
P2=_cror_(P2,1);//是逗号不是小数点
delay(5);
OK,这样的程序烧录进去,你就会看到循环右移的流水灯效果了

4、这里说明下_cror_(P2,1)这个指令的意思
_cror_(P2,1)是循环右移指令,后面的1表示右移多少位
比如P2是0xfe也就是1111 1110那么循环右移1位后,就是0111 1111
再循环右移就是1011 1111 再来就是1101 1111 一直循环下去
那显示的效果,不就是1个亮过1个吗?
如果你想循环左移呢?
那就把_cror_ 改为_crol_就可以了
_crol_就是循环左移指令
5、那假如你想一次亮2个,移动2个呢
那把P2赋值为0xfc也就是1111 1100
当然,你不一定要16进制,你也可以直接
P2=11111100;
这样也是可以的
然后循环左移

6、那如果你不想用循环左移呢?
那也是可以的,用普通左移指令“<<”
左移指令和循环左移有一些区别,在这里说下
比方P2=0xfe>>1;那么,结果P2是等于0111 1111
再左移,P2=0011 1111 再左移 0001 1111
左移指令,是直接把最高位补0,把最低位扔掉
这样说应该明白吧?右移指令>>也是同个道理
7、那么怎么做成流水灯效果呢?
如下图,我相信聪明的朋友能看明白的

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:72
阅读量:72
阅读量:182
阅读量:112
阅读量:142