![基于Proteus和Keil的C51程序设计项目教程(第2版):理论、仿真、实践相融合](https://wfqqreader-1252317822.image.myqcloud.com/cover/785/36511785/b_36511785.jpg)
2.5 任务5:三种效果的花样灯设计
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_77_2.jpg?sign=1739051470-Q6x7gXt11tR4mVNyft2P84F31cs77k70-0-25a4dc120983283f096c3b025bb2ca78)
2.5.1 任务与要求
1.任务要求
设计一个花样灯,有多种显示花样。根据2.2节~2.4节,将它们的显示效果串联起来,即先亮点流动一个循环,接下来依次亮起来,最后高/低4位交替闪烁一次,如此三种效果循环显示。
2.任务目标
(1)会正确进行函数声明。
(2)体验结构化程序设计,熟悉函数设计与调用。
3.任务分析
每种效果的花样灯程序单独设计为一个函数,在主函数中一一对它们进行调用。三种效果花样灯的程序框架图如图2-26所示。
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_77_3.jpg?sign=1739051470-N0EYaH3Ppitnx5BGoe5xnkKE3ygcrCdp-0-b1d5934f16300d9efce0f5e438bc208a)
图2-26 三种效果花样灯的程序框架图
2.5.2 流程与程序设计
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_77_4.jpg?sign=1739051470-9uYqHrZTLHo2WtZvAwbeX3baV7Se88rr-0-6bac9432a58d6326cbea758f8be0d423)
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_78_1.jpg?sign=1739051470-k04nGnVrbx5RWQ4MlnuBivg9OGAeVmf0-0-ae80944beb393e3f31f08d788579231d)
2.5.3 编译、代码下载、仿真、测判
按项目1所述方法,先在Keil中新建工程led25.uv2,然后添加源程序、设置工程选项并编译,生成代码文件LED25.HEX。参考2.1.7节下载代码,设置振荡频率为12MHz,进行仿真调试。
将代码下载到实物板进行测试。实践记录:是否成功?__________。自评分:__________。
2.5.4 在Keil中进行延时程序调试
在2.5.2节的程序中,延时函数Dly()的精确时间是多少呢?应用Keil中的调试工具可观测到。确保在Keil的选项设置中设置振荡频率为12MHz,如图2-27所示。
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_79_1.jpg?sign=1739051470-U1CmVO3AioyIGp75nvVHpxdyk8ZJUd7K-0-ce565b426e84ce98a5079c5cc96dbdfa)
图2-27 设置Keil中的振荡频率
1.进入Keil的调试状态
源程序编译成功后,左击工具栏中工具按钮,进入运行调试状态,弹出调试工具栏。常用的几个调试按钮
(也可从调试菜单中查看)说明如图2-28所示。
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_79_5.jpg?sign=1739051470-chuWPtZpp3vxtF0XfMFltB2tFMCWrZPY-0-f8092f6568a9ea9cc9cf8cb322e71cf8)
图2-28 主要调试按钮功能说明
2.程序调试
按程序语句的先后顺序,可在工程管理窗口看到累计运行时间,如图2-29所示。
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_79_6.jpg?sign=1739051470-LfRTXphg4yiFcggQT5yhiBYRNJEW4PDU-0-25fb10a6e1f1bbad836799cc8b035813)
图2-29 从工程管理窗口看语句累计运行时间
单击复位按钮,按表2-18进行调试。在12MHz的情况下,可见Dly05s()函数的运行时间为500062μs,如图2-30所示。
表2-18 单步调试,查看时间
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_80_2.jpg?sign=1739051470-JduD7rgWJdIZ2M0Lz3lHsRKD6KeEbn44-0-ad23b339c5d4dd8a37d64fcd0b6a7f74)
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_80_3.jpg?sign=1739051470-YtPmHfMXroeXcn4mNAvWiOgBjRduBj1J-0-c06f39a7deef7cdd638fed3c4e4fc163)
图2-30 在Keil中调试查看Dly05s()函数的运行时间
3.设计学号*40ms的延时函数
延时函数dly05s()延时长短由其两层循环的变量大小决定。从宏观上,变量i、j的数值越大,时间越长;数值越小,时间越短。但注意i变量不能超过255,j变量不能超过65 535。