
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.2 从左到右的流水灯
本例连接P0端口的8只LED从左到右循环滚动点亮,产生走马灯效果。
本例电路如图3-2所示。

图3-2 从左到右的流水灯电路
程序设计调试与实训:
本例中的8只LED连接在P0端口,LED阴极指向P0,阳极通过限流电阻接+5V,由于LED接在P0端口,而P0内部无上拉电阻,因此LED只能按图3-2所示来连接,8只电阻同时起限流和上拉作用。如果将它们全部接在P1、P2或P3端口,读者还可以将所有LED反接,阳极指向端口,阴极通过限流电阻后共同接地,这样连接后再相应修改程序,仍可以出现相同的运行效果。
程序将P0端口初值设为0xFE(11111110),由于电路中LED是共阳连接的,该初值会使第0只LED被点亮,当11111110向左循环移位时,即可使8只LED从左向右形成循环走马灯效果。循环左移由函数_crol_完成,注意添加头文件intrins.h。
读者可修改本例代码,实现LED循环右移显示的效果(循环右移函数为_cror_)。
源程序代码:
//----------------------------------------------------------------- // 名称: 从左到右的流水灯 //----------------------------------------------------------------- // 说明: 接在P0端口的8只LED从左到右循环依次点亮,产生走马灯效果。 //----------------------------------------------------------------- #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int //----------------------------------------------------------------- // 延时 //----------------------------------------------------------------- void DelayMS(uint x) { uchar t; while(x--) { for(t = 0; t < 120; t++); } } //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- void main() { P0 = 0xFE; while(1) { P0 = _crol_(P0,1); //P0端口的值向左循环移动1位 DelayMS(150); } }