多语言展示
当前在线:472今日阅读:84今日分享:32

STC89C52单片机入门第五课

主讲:流水灯程序顺带:左移指令,右移指令,循环左移,循环右移仔细看完下面文章,你会惊奇的发现,原理就是那么简单,胜过你看很多视频教程
方法/步骤
1

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

2

开始写程序,前面不再细说写入一个1MS延时程序在#include下面,再包含1个头文件#include  因为这个程序要用到里面的循环左移指令和循环右移

3

在主函数内,写入P2=0xfe;while(1)内,写入P2=_cror_(P2,1);//是逗号不是小数点delay(5);OK,这样的程序烧录进去,你就会看到循环右移的流水灯效果了如果你们的P2是共阴极的话,那应该改为P2=0x01;

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;这样也是可以的然后循环左移_crol_(P2,2);这样就可以实现循环移动2位了

6

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

7

那么怎么做成流水灯效果呢?如下图,我相信聪明的朋友能看明白的不明白的,也用着急学习这个,慢慢来,先照上面的循环左移测试

注意事项

应该研究 左移跟循环左移的区别

推荐信息