![基于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=1738952315-A2BU9yMuo9GMiDe3tQrmVNbQQK01rm5r-0-a0b338e6c6850e1ddd12e5cca4fda979)
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=1738952315-K9Wb2f89X643TCfRMeCDerWHqzX3HJNk-0-5f51e6d4386f6276c5569148373cf6fb)
图2-26 三种效果花样灯的程序框架图
2.5.2 流程与程序设计
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_77_4.jpg?sign=1738952315-r1BzAVc6ERhQstov0gmjYg9qzK8IO5Y8-0-a33d62a5c2f8f766dd33f831fbc2d58d)
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_78_1.jpg?sign=1738952315-aORl48w5comSxxkdIytf30dgUdMqmO1H-0-52a342302e76a26e1aec89b9149729e6)
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=1738952315-SEgc5X2XvyZjSen2fVKKI6QrLoSsdg7o-0-c017b9b7e290d7227034d77bffecc6ab)
图2-27 设置Keil中的振荡频率
1.进入Keil的调试状态
源程序编译成功后,左击工具栏中工具按钮,进入运行调试状态,弹出调试工具栏。常用的几个调试按钮
(也可从调试菜单中查看)说明如图2-28所示。
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_79_5.jpg?sign=1738952315-qM6Dg2O6VnGQA145f9ntGg7vRFTH6f6t-0-1c32e9ed60798ebd5d35024479c120de)
图2-28 主要调试按钮功能说明
2.程序调试
按程序语句的先后顺序,可在工程管理窗口看到累计运行时间,如图2-29所示。
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_79_6.jpg?sign=1738952315-RnZKsMosyVirMppDWHaVhNhspGGxnK36-0-85f3391e337b106a7d7a78691a24b5da)
图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=1738952315-dnwUuj5fKUjTH9fDzA6wsiMXN8HogrVc-0-575d0aabf89639713405377372aca9cf)
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_80_3.jpg?sign=1738952315-WrUWy8Ql839hto4X48QrZj0ZclU84PVe-0-76a41ab534efbd4d3297631a2d914ca0)
图2-30 在Keil中调试查看Dly05s()函数的运行时间
3.设计学号*40ms的延时函数
延时函数dly05s()延时长短由其两层循环的变量大小决定。从宏观上,变量i、j的数值越大,时间越长;数值越小,时间越短。但注意i变量不能超过255,j变量不能超过65 535。