![基于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=1739059766-tJUNFMd74DkQDXHI3rwF5TP6bUufESG6-0-e132793bdb980bb7e8e783deffdc4f1a)
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=1739059766-Z0V3EfFJFHtA3t5ahGshhKAzMRy6Bwtv-0-c5724d1a5ddf8fd3f4f87e3076ba398b)
图2-26 三种效果花样灯的程序框架图
2.5.2 流程与程序设计
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_77_4.jpg?sign=1739059766-R1bNxKd3swteLGzavoDz8pglPlU3juOA-0-af797995d48da6a54b6d06f4a8fa9081)
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_78_1.jpg?sign=1739059766-GS2nhCzYbBE1ZKdEdxwcxII64xrqhBhT-0-58cabe624c21acc498e95014ad52b1f6)
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=1739059766-KMw7sM6nE9rGwSyRx0FAOGLawZzCaQkv-0-72dd91df45985cc03dec96e4da0969ed)
图2-27 设置Keil中的振荡频率
1.进入Keil的调试状态
源程序编译成功后,左击工具栏中工具按钮,进入运行调试状态,弹出调试工具栏。常用的几个调试按钮
(也可从调试菜单中查看)说明如图2-28所示。
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_79_5.jpg?sign=1739059766-cqk0CDOpR76Rspejwa12G8YR6JAEEBpX-0-8e7d41865690c2e2c752cf3fd66a1e70)
图2-28 主要调试按钮功能说明
2.程序调试
按程序语句的先后顺序,可在工程管理窗口看到累计运行时间,如图2-29所示。
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_79_6.jpg?sign=1739059766-vMM1yv4SF5Eav8PtvXmayVvDAK3dG5qk-0-1cede0ee390bcef8cf651ceb99157ecc)
图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=1739059766-LCcXeshKL5V6HiQyo4my6OKhghBnubbq-0-24b83b9656a2bd0fdfe2ba27836f0ce6)
![](https://epubservercos.yuewen.com/964F67/19391577901347306/epubprivate/OEBPS/Images/40331_80_3.jpg?sign=1739059766-Hoj9QAZMyAvUvH49L17aaMoU9RcRrJM5-0-800256cba804843669eabe11c46ad4c8)
图2-30 在Keil中调试查看Dly05s()函数的运行时间
3.设计学号*40ms的延时函数
延时函数dly05s()延时长短由其两层循环的变量大小决定。从宏观上,变量i、j的数值越大,时间越长;数值越小,时间越短。但注意i变量不能超过255,j变量不能超过65 535。