![单片机C语言程序设计实训100例:基于STC8051+Proteus仿真与实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/270/43738270/b_43738270.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.2 双向来回的流水灯
STC15的P1分别连接8只LED的阴极,LED的阳极则通过限流电阻连接VCC。程序运行时LED上下双向循环滚动点亮,产生走马灯效果。双向来回的流水灯电路如图3-3所示。
![](https://epubservercos.yuewen.com/DF9E4A/23020648309755406/epubprivate/OEBPS/Images/42553-00-58-1.jpg?sign=1739098262-WpSJe16elDkYQTzwRokfXcN7NzAaUk7X-0-21e159ea7770b9dc342d2ef24d877084)
图3-3 双向来回的流水灯电路
1. 程序设计与调试
仿真电路中8只LED的阳极通过限流电阻接VCC,阴极逐一直接连接P1,将P1初值设为0xFE(11111110)时,将使P1.0连接的第0只LED点亮。当11111110向左循环移位时,可使8只LED形成循环走马灯效果。循环左移由函数_crol_完成,要注意添加头文件intrins.h。
另外,为实现更大延时,本案例程序先使用STC-ISP工具生成1ms延时函数Delay1ms(),然后定义void delay_ms(u16 x),并在其内部循环调用Delay1ms()。由于本例delay_ms的参数是u16,其延时参数取值可为1~65 535。
2. 实训要求
① 将LED改用阳极连接P1,仍实现走马灯效果。
② 将8只LED改接到其他端口,重新设计程序实现同样的功能。
3. 源程序代码
![](https://epubservercos.yuewen.com/DF9E4A/23020648309755406/epubprivate/OEBPS/Images/42553-00-58-2.jpg?sign=1739098262-srEiklgzAx88rxFpyAj1xhA5pjITt5wV-0-7b6f1e78f6fa441d2398ef7c1b29a9d6)