跑马灯
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要:本设计使用89C51芯片,利用P0的8个端口连接8个发光二极管,通过P0.0到P0.7的值控制“跑马灯”的亮灭,以达到显示效果。设计的中断程序要对多个按键动作进行响应,灯光变换的花样有4种,用4个按键k0,k1,k2,k3切换。按下k1键,程序作左向流水灯; 按下k2按键程序作右向流水灯; 按下k3键为亮点向中间移动; 按下k4键为执行亮点向两边移动。
浏览了网上的各种作品及代码,通过各种实现代码的比较,和各种优化,总结出本程序,以较优秀的代码实现各种可控的“跑马”功能。
关键词:跑马灯;89C51芯片;按键。
引言:本设计用4个开关按键控制8个发光二极管,组成为一排跑马灯进行各种样式的亮灯形式,在中断程序中处理多个按键动作的响应,以控制一排跑马灯的工作。
1设计概述
本程序设计意在展示跑马灯的色彩样式及“跑马”变换效果,如果将跑马灯做大,会有很高的观赏价值。
我查阅书籍资料,浏览网上的各种作品及代码,通过各种实现代码的比较,和各种优化,总结出本程序,以较优秀的代码实现各种可控的“跑马”功能。
本设计的中断程序要对多个按键动作进行响应,灯光变换的花样有4种,用4个按键k1,k2,k3,k4切换。进入程序后,程序作双向流水灯;按下k1键,程序作左向流水灯; 按下k2按键程序作右向流水灯; 按下k3键为亮点向中间移动; 按下k4键为执行亮点向两边移动。
2硬件电路设计及描述
本设计使用89C51芯片,利用P0的8个端口连接8个发光二极管,通过P0.0到P0.7的值控制“跑马灯”的亮灭,以达到显示效果,连接图如图1所示。
图1:硬件电路连接图1
利用P1.0到P1.3这4个端口作为4个控制开关的输入,控制开关连接INT0中断,按键触发中断响应以停止“跑马灯”当前的执行样式,进而改变跑马灯的显示样式。
图2:硬件电路连接图2
综上所述,总体的电路连接如图3:
图3:总体硬件电路连接图
3软件设计流程及描述
主程序的设计思路为,开始时执行左右流水灯,在中断服务程序中,首先读取按键状态,然后延时10ms,再次读取按键状态。把两次获得的按键状态比较,如果不同,就表示是抖动,退出中断;否则,就去判断是哪个按键按下。如果是k1,就执行左跑马灯;如果是k2,就执行右跑马灯;如果是k3,就执行亮点向中间移动;如果是k4,就执行亮点向两边移动。主程序的流程如图4。
主程序流程图
图4:主程序流程图
(程序开始时)
org 0003h
ljmp ext1
设置中断。因为0中断的中断地址为0003h,所以在0003h地址设置一个跳转,即当执行到0003h时程序跳转到ext1标签进行执行,ext1标签内的代码程序则通常称为中断服务程序,用以完成中断服务。
(在左右流水灯的程序中)
mov a, #0feh
给a赋值0feh,而后又将a输出给p0,亮灯,0feh转化为2进制书就是11111110,即让第一个灯亮,其余的灯灭。
lcall del100ms
rl a
延迟100ms后,rl a是让a按位左移,再次执行输出p0时的效果就是只第二个灯亮。
此处变换a的方法比较简便,可以与自设样式1和样式2相比较:
(自设样式1中)
mov p0, #07eh
lcall del100ms
…………
这种方式是把每一步骤的变换都写出来,赋值给p0输出,这种方式适用于变换方式不固定的跑马灯。
(延迟10ms的标签del10ms中)
djnz r4, $
$符号代表当前行的代码,也就是说,当前代码要执行r4次,而这个延迟程序一共需要执行这条语句248X20次,通过计算即为10ms。
设计采用置标志位的方法,即在主程序中设定一个标志位,不断的对这个标志进行查询:如果是标志为状态1,就执行双向跑马灯;如果是状态2,就执行左向跑马灯;如果是状态3,就执行右向跑马灯,依次类推。而在中断服务程序中,只需要进行如下工作:去抖动,键识别,改变标志位。
这里我们用寄存器r0的内容作为标志,当它里面的内容是0ffh时,执行左右跑马灯程序;为01h时,执行左跑马灯;02h时执行右跑马灯;03h时执行样式1的“跑马”;04h时执行样式2的“跑马”。
图5:中断程序流程图
在中断服务程序中,应该尽量的使得任务简化,不要让中断服务程
序作过多复杂的任务,而要尽量把这些复杂的任务放到主程序中间去完成。中断流程如图5。
去抖功能:读入键值,存入30h地址,然后延迟10ms后,也就是一个很短的时间之后,再次读入一个键值,两次键值相比较,如果一样则不是因为外部原因抖动产生按键,如果不一样则说明是别的原因产生的按键抖动。这样的一个程序就可以去除因为抖动产生的错误输入信号。
4总结
本设计利用P0的8个端口连接8个发光二极管,通过P0.0到P0.7
的值控制“跑马灯”的亮灭,以达到显示效果。设计的中断程序要对多个
按键动作进行响应,灯光变换的花样有4种,用4个按键k0,k1,k2,k3
切换。按下k1键,程序作左向流水灯; 按下k2按键程序作右向流水灯; 按下k3键为亮点向中间移动; 按下k4键为执行亮点向两边移动。设计
成功的实现了跑马灯,并在设计过程中学习到了很多书本外的东西。
5课程设计体会
通过这两周的单片机课程设计,我从中学习到了很多课堂上很难学到的东西,亲身学习实践了一次单片机的实际应用制作。在资料的搜集整理过程中,我看了很多程序的代码,学习了很多程序思想,确定设计题目后,通过比较各处的代码,确定比较简洁高效的代码来实现最后的程序。在这过程中,我也学习了很多东西,有很大的提高。在随后的实际上机编程调试过程中,遇到了几处困难,在和同学的共同探讨研究后问题都迎刃而解,了解了团队合作和人际关系的重要性。最后的演示过程中,实际对硬件电路的连接更加深了我对单片机的了解,知道了单片机在实际应用的重要性。以后就业的方向也完全可以选择单片机,我想单片机在以后的生活中的应用会越来越多。