单片机原理数码管动态显示论文学院机械工程学院专业机械设计制造及其自动化班级1班姓名学号2012471112指导教师杜俊完成日期2014年12月23日1单片机原理数码管动态显示摘要:基于51单片机的LED数码管动态显示,LED数码管动态显示就是一位一位地轮流点亮各位数码管,对于每一位LED数码管来说,每隔一段时间点亮一次,利用人眼的“视觉暂留”效应,采用循环扫描的方式,当扫描速度达到一定程度时,人眼就分辨不出来了。文章从硬件和软件等方面对LED数码管的动态显示进行了分析,并简要说明了各功能的实现方法。关键词:动态显示,数码管,有停留引言单片机是指一个集成在一块芯片上的完整计算机系统,在控制数码管显示的应用面积很广泛,实用性极强,而其的设计是基于嵌入式的控制器设计。单片机微型计算机是微型计算机发展中的一个重要的分支,它以其独特的结构和性能,越来越普及地应用到国民经济的各个领域。随着大规模、超大规模集成电路技术的发展和计算机微型化的需要,将微型算机的基本功能部件:中央处理器(CPU)、存储器、输入/输出接口、定时器/计数器、中断系统等多种资源集成在一个半导体芯片上,使得一块集成电路芯片就能构成一个完整的微型计算机。在单片机的结构设计上,它的硬、软件系统及I/O接口控制能力等方面都有独到之处,具有较强而有效的功能。从其组成、逻辑功能上来看,单片机都具备了微型系统的基本部件。但需要指出的是,单片机毕竟还只是一个芯片,只有在配置了应用系统所需的接口芯片、输入/输出设备后,才能构成使用的单片机应用系统。数码管在单片机应用系统显示器是一个不可缺少的人机交互设备之一,是单片机应用系统中最基本的输出装置。通常需要用显示器显示运行状态以及中间结果等信息,便于人们观察和监视单片机系统的运行状况。而单片机系统中最为常见的显示器是发光二极管数码显示器(简称LED显示器)。LED显示器具有低成本、配置简单、安装方便和寿命长等特点。但显示内容比较有限,一般不能用于显示图形。一、设计任务2(1)使用四位数码管动态显示;(2)显示内容为6789。二、硬件设计硬件设计的任务是根据总体设计要求,在所选定的单片机类型的基础上,具体确定系统中所用的元器件及系统构成方式。单片机应用系统中可用的各种元器件的种类繁多、功能各异、价格不等,这就为用户在元器件功能、特性等方面的选择提供了较大的自由度。2.1LED数码管显示原理及电路LED数码管是由若干个发光二极管按一定的规律排列而成的,当某个发光二极管导通时,相应的段就会被点亮。根据内部发光二极管连接方式的不同,LED数码管可以分为共阳极和共阴极两类。共阴极LED显示器的发光二极管的阴极连接在一起,通常是其公共阴极接地当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。同样,共阳极LED显示器的发光二极管的阳极连接在一起,通常是其公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段就被显示。在控制LED数码管过程中,将不同的8位二进制数送到数码管中就可以使数码管显示不同的数字了。在单片机应用系统中,单片机与数码管的连接可以分为静态显示和动态显示。(1)静态显示静态显示就是各个LED数码管同时显示各自的字符,并维持不变,直到显示下一个字符为止。在单片机系统设计时,静态显示通常利用单片机的串行口实现。当显示器位数较少时,采用静态显示的方法比较适合。N位静态显示器要求有N*8根I/O口线,占用I/O口线较多,所以在位数较多时往往采用动态显示方式。(2)动态显示动态显示就是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方法称为位扫描,这是将所有数码管相同的段选线并联,各数码管位选线轮流选通,分时多路复用。这种方案在任一时刻只有一位数码管被选中发光,然后利用人眼的视觉暂留特点实现同时显示的效果。本显示面板有4个数码管,只需要4个3位驱动线和4个段驱动线。但4位循环显示时,每一位数码管的发光时间只占1/4循环时间,可能导致数码管显示闪烁。通常,各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的位选线(公共阴极或阳极)由另外的I/O口线控制。2.2单片机控制数码管显示的设计与实现共阴极8段数码管的信号端高电平有效,只要在各个位段上加上相应的信号即可使相应的位段发光;共阳极的8段数码管则相反,在相应的位段加上低电平即可使该位段发光。因而,一个8段数码管就必须有8位(即1个字节)数据来控制各个位段的亮灭。如此推算,有几个8段数码管,就必须有几个字节的数据来控制各个数码管的亮灭。这样控制虽然简单,却不切实际,MCU也不可能提供这么多的端口用来控制数码管,为此,往往是将几个8段数码管合在一起使用,通过一个称为数据口的8位数据端口来控制段位。MCU的两个8位端口就可以控制一个8连排的数码管。若是要控制更多的数码管,则可以考虑外加一个译码芯LED数码管动态显示电路图片。要让各个数据管均显示需要的数字,则必须逐个使相应位选信号其他位选信号为1,并将要显示的一位数字送到数据线上。42.3发光二极管电路发光二极管电路的设计比较简单。可将单片机P3口的P3.0、P3.1、P3.2、P3.3分别与四个发光二极管的阳极相连,以便控制四个发光二极管的工作。三、软件设计本LED显示面板的功能可用C51语言实现。软件功能包括正常运行和仪表参数设定。3.1主程序本设计的主程序主要完成显示面板功能的确定、系统初始化、定时器初始化等。(1)显示面板功能的确定该显示面板的主要功能是按照设计要求能够正常显示数字,当按下演示按键时,LED显示面板能够交替显示数字6789。(2)系统初始化系统初始化主要包括LED数码管和发光二极管的初始状态设定。本面板右四个按键对应P0口初始状态值为0xf0;LED数码管对应的P1、P2口的初始状态值可先设置为0x00、0x00,经过一段时间延迟后再设置为0xff,0xff,这样,在程序开始执行时就可以检查数码管是否能正常工作;发光二极管对应的P3口的P3.0、P3.1、P3.2、P3.3的初始状态设置与LED数码管相同。LED数码管动态显示流程图如下:先设计一个能显示一位数的程序,然后重复执行这段程序,并改变N所显示的内容。Y(3)定时器的初始化返回显示计数显示指针指向下一字节,计数器减1输出位选数据,并延时取缓冲区一字节数,并转换成显示码初始化显示缓冲区首地址,显示计数器数码管动态显示5秒计时器加1,转成显示数据并送显示软件计数?定时器的初始化包括定时器工作方式的设定和定时初值的设置。本文的LED数码管采用动态(扫描)驱动显示方法,设计时要注意扫描时间的设置。该时间要既能保证LED数码管的亮度,又不会使人眼感觉到闪烁。定时器的工作模式为方式1。此模式下的计数脉冲频率为fcont=fosc/12,计数初值X可以通过公式设定:X=M-计数值=M-t/T=M-fosct/12其中,fosc为振荡器的振荡频率,t为要定时的时间,M为定时器的最大定时时间。根据视觉暂留特性,人眼睛对动态频次的分辨率一般为1/16~1/24s,因此,可以将LED数码管轮流显示的时间设定为小于这个分辨率的任何一个时间。3.2中断程序中断程序功能是在定时时间到时,将段码值赋给相应的数码管,并将时间初值装入相应的寄存器。参数设定时,设定位要实现闪烁,以确定正在被设置的数据位。实现闪烁的基本思想是每隔500ms,当前闪烁数据位的段码值就由数据状N态变为空码状态,下一个500ms再由空码状态变Y为数据状态,并不断循环执行此操作(共阳极显示方式下空码值为0XFF)。这样,从用户角度看,当前被设定的数据位就是闪烁的。这里可通过设定一个计数器来确定转换时间,当计数值达到时,当前闪烁数据位就进行段码值转换。四、测试打开keiluVision3程序,然后新建工程,编辑该电路的设计程序并保存执行后生成.hex可执行文件,再在Proteus软件中打开设计好的电路图,鼠标左键双击80C51单片机芯片,找到可执行文件所在位置并将其导入,点击演示按钮,便可以看到数码管依次交替显示数字6789,至此,测试阶段完成,则设计的该程序和电路可以完成预期的目的。数字的动态循环显示电路如下图所示(以数字7为例):定时器服务中断程序保护现场恢复现场中断返回6五、总结经过一段时间的努力,我们顺利的完成了这次单片机论文,这是一个磨练意志的过程。从论文题目的选择开始,电路图的设计、硬件和软件系统的设计、到最后的Proteus软件仿真完成,这其中经历了很多困难,但是更重要的是在这个过程中我得到了很大的锻炼。一方面通过C51单片机等一些器件的设计让我学习和掌握了单片机技术的基础知识和技术要点,也使以前学的很多知识都得到了运用;另一方面在用Proteus软件画电路图时,然后再转换成一维的WORD中进行编辑,这个过程中让我掌握了计算机辅助的设计技术。当然,这是一个需要不断的尝试,不断的校核,不断的修改,最后完成一个合理的设计的过程。需要的是细心和耐心。在很大程度上培养了我拼搏的工作精神。使我受益匪浅,更加明确了自己专业的方向。通过本次论文的设计,我不仅学到了关于单片机技术方面的许多专业知识,同时也让我感觉到团队合作的重要性。其实如何有效和快速的找到资料也是课设给我的启发,利用好图书馆和网络,是资源的到最好的利用。与他人交流思想是取得成功的关键,在交流中,不仅强化了自己原有的知识体系,也扩展了自己的思维。该过程是一个通过思考、发问、自己解惑并动手、提高的过程。7我会在以后的学习中不断学习,积累经验,完善自己。对于这次单片机论文设计不仅巩固了以前所学过的知识,而且学到了很多在书本上没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次论文设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,例如对以前所学过的知识理解得不够深刻,掌握得不够牢固。总之,这次的论文设计使我受益匪浅。附录程序编辑:#includeREG51.Htypedefunsignedcharuchar;typedefunsignedintuint;sbitone=P3^0;sbittwo=P3^1;sbitthree=P3^2;sbitfourth=P3^3;ucharshumaguan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//定义数码管段码voiddelay(uinta)//延时函数{uinti,j;for(i=a;i0;i--)for(j=110;j0;j--);}voiddisplay(){one=0;//打开第一位位码P2=shumaguan[6];//送数据delay(500);//延时500ms8one=1;//关闭第一位位码two=0;P2=shumaguan[7];delay(500);two=1;three=0;P2=shumaguan[8];delay(500);three=1;fourth=0;P2=shumaguan[9];delay(500);fourth=1;}voidmain(){P3=0xff;while(1){display();}}9参考文献[1]张齐,朱宁西,单片机应用系统设计技术,北京:电子工业出版社,2009.[2]力学礼,基于Proteus的8051单片机实例教程,北极;电子工业出版社,2008[3]黄惟公,邓成中,王艳,单片机原理与应用技术,西安:子安电子科技大学出版社,2007.[4]张道德,杨光友,单片机接口技术,北京:电子工业出版社,2007.[5]徐爱钓,孟志勇,单片机高级语言应用实践,北京:电子工业出版社,2008.[6]周润景等,PROTEUS入门实用教程,北京:机械工业出版社,2007.[7]丁明亮,唐前辉,51单片机应用技术与仿真,北京:北京航空航天大学出版社,2007.