跑马灯

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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课程设计体会

通过这两周的单片机课程设计,我从中学习到了很多课堂上很难学到的东西,亲身学习实践了一次单片机的实际应用制作。在资料的搜集整理过程中,我看了很多程序的代码,学习了很多程序思想,确定设计题目后,通过比较各处的代码,确定比较简洁高效的代码来实现最后的程序。在这过程中,我也学习了很多东西,有很大的提高。在随后的实际上机编程调试过程中,遇到了几处困难,在和同学的共同探讨研究后问题都迎刃而解,了解了团队合作和人际关系的重要性。最后的演示过程中,实际对硬件电路的连接更加深了我对单片机的了解,知道了单片机在实际应用的重要性。以后就业的方向也完全可以选择单片机,我想单片机在以后的生活中的应用会越来越多。

相关文档
最新文档