《数码管的动态显示.doc》由会员分享,可在线阅读,更多相关《数码管的动态显示.doc(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、电气工程系毕业论文/设计J10秋应用电子技术班XXX2012-05-29目录引言 3一 数码管的结构及工作原理 41.1 数码管的结构1.2 数码管的工作原理 二 利用单片机控制数码管动态显示功能实现数字功能的设计 62.1 数字钟的硬件电路图的设计2.1.1 系统时钟电路的设计2.1.2 系统复位电路的设计2.1.3 按键与按钮电路的设计2.1.4 数字钟的显示电路设计三 系统主要程序设计 93.1 主程序3.2 显示子程序3.3 定时器T0中断服务程序3.4 定时器T1中断服务程序 3.5 调时功能程序四 软件电路的调试 134.1 软件电路调试4.2 系统程序调试致谢 17附录 18参考
2、文献 26 引言20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。时间对于我们每个人来说都是很宝贵的,市场上出现的各式个样的钟表都很受消费者的欢迎和喜爱,钟表的数字化给人们生产生活带来了极大的方便,满足大家的需求,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等等,所有这些,都是以钟表数字化为基础的。本设计克服了机械式钟表的
3、诸多缺点,而且在常规电子式钟表的功能上加上了省电模式;其次,利用单片机的精确计数功能,可对时、分、秒进行精确的计数。一 LED数码管的结构及原理1.1 LED数码管的结构 LED数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。LED数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。位数有半位,1,2,3,4,5,6,8,10位等等.,LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电
4、路有差异外,编程方法也是不同的。图2是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。颜色有红,绿,蓝,黄等几种。LED数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。下面将介绍常用LED数码管内部引脚图片图1 这是一个7段两位带小数点 10引脚的LED数码管图2引脚定义每一笔划都是对应一个字母表示 DP是小数点.LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。1.2 数码管的工作原理A、静态显示驱动: 静态驱动也称
5、直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O埠进行驱动,或者使用如BCD码二-十进位*器*进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O埠多,如驱动5个数码管静态显示则需要5840根I/O埠来驱动,要知道一个89S51单片机可用的I/O埠才32个呢。故实际应用时必须增加*驱动器进行驱动,增加了硬体电路的复杂性。B、动态显示驱动: 数码管动态显示介面是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划a,b,c,d,e,f,g,dp 的同名端连在一起,另外为每个数码管的公共极COM增加位元选通控制电路,位元选通由各自独立的I/O线
6、控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位元选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位元就显示出字形,没有选通的数码管就不会亮。 透过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位元数码管的点亮时间为12ms,由于人的视觉暂留现象及发光二极体的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示资料,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O埠,而且功耗更低。二 利用单
7、片机控制数码管动态显示功能实现数字功能的设计2 数字硬件系统设计 2.1数字钟的硬件电路的设计数码管时钟电路接线图如图2所示。其采用AT89C2051单片机最小化应用设计,LED显示采用动态扫描方式实现,P1口输出段码数据,P3.0P3.5口作扫描输出,P3.7接按钮开关。为了提供LED数码管的驱动电流,用三极管9012作电源驱动输出。图2硬件电路2.1.1 系统时钟电路的设计 Y、C1、C2组成振荡电路,和内部的振荡电路共同构成单片机的工作基准时钟电路。它含有单片机数字电路系统的工作基准,为数字电路提供稳定的时钟信号。Y为晶体,它的标称频率越高,数字电路系统的工作频率也就越高。系统时钟电路如
8、图3所示。图3系统时钟电路2.1.2 系统复位电路的设计 电路中C3、R15组成复位电路,该电路采用的是上电复位,即整个系统从新开始工作。复位电路有很多种,分别可由不同的元件组成,可靠性也各有不同,本设计采用简单的上电复位。如图4所示。图4复位电路2.1.3 按键与按钮电路设计 本设计中只使用一个按键开关SET,来对时、分、秒进行调整。SET还作为复位按钮,也可以进入省电(不显示LED数码管)和正常显示三种状态。图5所示为按钮电路。图5 按钮电路2.1.4数字钟的显示电路设计驱动数码管采用动态显示。动态驱动是将所有的数码管的8个显示笔画“a,b,c,d,e,f,g,dp”的同名端连在一起,另外
9、每个数码管中的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控制显示。R1-R8是P1口的上拉电阻, P端口必须外接上拉电阻才能正常输出“0”和“1”电平,保证P1端口所接的LED数码管能够正常显示数字,和软件相配合来驱动数码管显示时、分、秒。该显示电路如图6所示。图6显示电路三 系统主要程序设计3.1 主程序本设计中计时采用定时器T0中断完成,其余状态循环调用显示子程序,当P3.7端口开关按下时,转入调时功能程序。其主程序执行流程见图 9 所示。显示单元清零T0、T1设为16位计数器模式允许T0中断调用显示子程序P3
10、.0=0?进入调时程序NY开始图 9 主程序流程图3.2 显示子程序数码管显示的数据存放在内存单元70H75H中,其中70H71H存放秒数据,72H73H存放分数据,74H75H存放时数据,每一地址单元内均为十进制BCD码。由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中,显示时,先取出70H75H某一地址中的数据,然后查得对应的显示用段码从P1口输出,P3口将对应的数码管选中供电,就能显示该地址单元的数据值。为了显示小数点及“-”“A”等特殊字符,在显示计时时采用不同的显示子程序。3.3 定时器T0中断服务程序定时器T0用于时间计时。定时溢出中断周期设
11、为50ms,中断累计20次(即1s)时对秒计数单元进行加1操作。时钟计数单元地址分别在70H71H(秒)、76H77H(分)、78H79H(时),7AH单元内存放“熄灭符”数据(#0AH)。在计数单元中采用十进制BCD码计数,满60(秒表功能时有100)进位,T0中断服务程序执行流程见图10。保护现场1秒到?秒单元加1=60S?秒单元清零,分加1=60分?分单元清零,时加1=24h?时单元清零恢复现场, 中断返回 N N N NYYYYT0中断图10 T0中断服务程序执行流程图3.4定时器T1中断服务程序T1中断服务程序用于指示调整单元数字的亮闪,在时间调整状态下,每过0.3秒,将对应单元的显
12、示数据换成“熄灭符”数据(#0AH)。这样,在调整时间时,对应调整单元的显示数据会间隔闪亮。3.5调时功能程序调时功能程序的设计方法是:按下按键,若按下时间小于1s,进入省电状态(数码管不亮,时钟不停),否则进入调分状态,等待操作,此时计时器停止走动。当再次按下按钮时,若按下时间小于0.5秒,则时间加1min;若按下时间大于0.5s,则进入小时调整状态。在小时调整状态下,当按键按下的时间大于0.5s时退出调整状态,时钟继续走动。LED数码管时钟电路的完整源程序见附录3。四 软件电路的调试4.1软件电路调试本设计是采用AT89C2051单片机控制LED数码管显示电路的,其操作步骤如下:(1) 添
13、加元件到元件列表中本设计要用到的器件有:元件中的单片机芯片AT89C2051、电阻Resistor 、数码管7SEG-MPX-CA-BLUE、按键开关BUTTON、电源POWER、地线GROUND、示波器OSCILLOSCOPE。在模型选择工具栏中选 元件 (默认),单击 P 按钮,出现挑选元件窗口,如图 11 所示。图 11 挑选元件窗口图将元器件添加到编辑窗口可以在左上角的关键字搜索栏Keywords中输入,例如输入AT89C2051,即可在Results栏中筛选出该名称或包含该名称的器件,双击Results栏中的名称 AT89C2051 即可将其添加到对象选择器。同样的方法放入7SEG-
14、MPX-CA-BLUE、按键开关BUTTON等。(2) 将元件放入原理图编辑窗口:在元件列表中左键选取AT89C2051,在原理图编辑窗口中单击左键,这样AT89C2051就被放到原理图编辑窗口中了。同样放置其它各元件。如果元件的方向不对,可以在放置以前用方向工具转动或翻转后再放入;如果已放入图纸,可以选定后,再用方向工具或块旋转工具转动。左键选择模型选择工具栏中的终端接口图标: 从模型中挑选出地线-GROUND和电源-POWER,并在原理图编辑窗口中左击放置到原理图编辑窗口中。添加示波器:左键选择模型选择工具栏中的虚拟仪器图标,左键选择OSCILLOSCOPE,并在原理图编辑窗口中左击,这样
15、示波器就被放置到原理图编辑窗口中了。(3)连线按样图绘制电路连线,如图 12 所示。图 12 接线图(4)仿真对于单片机需要下载程序后才能运行,所以要将事先准备好的仿真程序调试文件下载到单片机芯片中。本设计用的是:dianzishizhong.hex。先右击AT89C2051再左击,出现Edit Component 对话框,如图 13 所示。图 13在Program File中单击出现文件浏览对话框,找到dianzishizhong.hex文件,单击“确定”即将仿真程序装入单片机,单击OK退出。然后单击开始仿真,此时可以看到程序的运行结果如图 14 所示。单击分别可以暂停/终止仿真的运行。图1
16、4 显示结果图注:仿真时,元件引脚上的红色代表高电平,蓝色代表低电平。仿真波形如图 15 所示。图15 波形图4.2 系统程序调试软件调试在Wave E2000编译器下进行,该编译器对源程序进行仿真编译,把.ASM文件加入模块文件,出现图16所示的对话框。将所加入的模块保存,然后选择“工具菜单编译”。 编译通过后生成.Hex文件,图 17 所示的为程序软件仿真通过的结果图。图16图17 程序仿真结果图致谢在离校之际,借这毕业论文的最后一页,表达对老师们的谢意。本次毕业设计是在孟庆峰老师的精心指导下完成的。从课题选择、方案论证到具体设计和调试,无不凝聚着路老师的心血。平时,路老师对我们的设计要求
17、严格、也给了我们相当独立的空间。设计的过程是不简单的,不论是在做作品还是在写论文方面.正因为它的不简单,使我明白了如果真的要做好一件事也是要付出辛勤和汗水的,世界上没有不劳而获的事,只有自己努力过了才能体会其中的乐趣。当然设计的成功并不是我一个人的功劳,在这里首先要感谢的是我的指导老师孟老师。孟老师这段时间课挺多,但在我们做毕业设计时还不时的关心我们的进程,给我们一些建议,才使得设计顺利成功。同时,我要感谢课题组的各位同学。在毕业设计的短短2个月的时间里,他们给我提出了很多宝贵的意见,给了我不少帮助还有工作上的支持,在此也真诚的谢谢他们。本设计能够顺利的完成,也归功于各位任课老师的认真负责,使
18、我能够很好的掌握和运用专业知识,并在设计中得以体现。正是有了他们的悉心帮助和支持,才使我的毕业论文工作顺利完成,在此向蚌埠机电技师学院电子工程系的全体老师表示由衷的谢意,感谢他们三年来的辛勤栽培。即将结束三年的学院生活,相信等待我的是一片充满机遇、风险与快乐的土地。附录1 材料清单器件名称数量单价(元)总数(元)基本功能部分万用板11010AT89C2051(CPU)155数码管616按钮10022晶振1080825V 10F电容2020430PF电容201029012三极管602124.7k 电阻6021210K电阻10022导线2芯片插槽10202合计312(作品成品照片)附录3(软件程序
19、清单);*; AT89C2051秒表/时钟程序 ;*; 定时器T0、T1溢出周期为MS,T0为秒计数用,T1为调整时闪烁用,; P3.7为调整按钮,P1口为字符输出口,采用共阳显示管。;*; 中断入口程序 ;* ORG 0000H ;程序执行开始地址 LJMP START ;跳到标号START执行 ORG 0003H ;外中断0中断程序入口 RETI ;外中断0中断返回 ORG 000BH ;定时器T0中断程序入口 LJMP INTT0 ;跳至INTT0执行 ORG 0013H ;外中断1中断程序入口 RETI ;外中断1中断返回 ORG 001BH ;定时器T1中断程序入口 LJMP INT
20、T1 ;跳至INTT1执行 ORG 0023H ;串行中断程序入口地址 RETI ;串行中断程序返回;* ; 主程序 ;* START: MOV R0, #70H ;清70H-7AH共11个内存单元 MOV R7, #0BH ;CLEARDISP: MOV R0, #00H ; INC R0 ; DJNZ R7, CLEARDISP ; MOV 20H,#00H ;清20H(标志用) MOV 7AH,#0AH ;放入“熄灭符数据” MOV TMOD,#11H ;设T0、T1为16位定时器 MOV TL0,#0B0H ;50ms定时初值(T0计时用) MOV TH0,#3CH ;50ms定时初值
21、 MOV TL1,#0B0H ;50ms定时初值(T1闪烁定时用) MOV TH1,#3CH ;50ms定时初值 SETB EA ;总中断开放 SETB ET0 ;允许T0中断 SETB TR0 ;开启T0定时器 MOV R4,#14H ;1s定时用初值(50ms*20) START1: LCALL DISPLAY ;调用显示子程序 JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序 SJMP START1 ;P3.7口为1时跳回START1 SETMM1: LJMP SETMM ;转到时间调整程序SETMM;*; 1秒计时程序 ;*;T0中断服务程序 INTT0: PUSH A
22、CC ;累加器入栈保护 PUSH PSW ;状态字入栈保护 CLR ET0 ;关T0中断允许 CLR TR0 ;关闭定时器T0 MOV A,#0B7H ;中断响应时间同步修行 ADD A,TL0 ;低8位初值修正 MOV TL0,A ;重装初值(低8位修正值) MOV A,#3CH ;高8位初值修正 ADDC A, TH0 ; MOV TH0,A ;重装初值(高8位修正值) SETB TR0 ;开启定时器T0 DJNZ R4, OUTT0 ;20次中断未到中断退出ADDSS: MOV R4,#14H ;20次中断到(1s)重赋初值 MOV R0,#71H ;指向秒计时单元(71H-72H) A
23、CALL ADD1 ;调用加1程序(加1s操作) MOV A,R3 ;秒数据放入A(R3为2位十进制数组合) CLR C ;清进位标志 CJNE A, #60H, ADDMM ; ADDMM: JC OUTT0 ;小于60s时中断退出 ACALL CLR0 ;大于或等于60s时对秒计时时单元清零 MOV R0,#77H ;指向分计时单元(76H-77H) ACALL ADD1 ;分计时单元加1min MOV A,R3 ;分数据放入A CLR C ;清进位标志 CJNE A, #60H,ADDHH ;ADDHH: JC OUTT0 ;小于60s时对秒计时单元清0 ACALL CLR0 ;大于或等
24、于60min时分计时单元清0 MOV R0,#79H ;指向小时计时单元(78H-79H) ACALL ADD1 ;小时计时单元加1h MOV A,R3 ;时数据放入A CLR C ;清进位标志 CJNE A,#24H,HOUR ; HOUR: JC OUTT0 ;小于24h小时计时单元清0 ACALL CLR0 ;大于或等于24h小时计时单元清0OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移入对应显示单元 MOV 73H,77H ; MOV 74H,78H ; MOV 75H,79H ; POP PSW ;恢复状态字(出栈) POP ACC ;恢复累加器 SETB
25、ET0 ;开放T0中断 RETI ;中断返回;*; 闪动调时程序 ;*;T1中断服务程序,用作时间调整时调整单元闪烁指示INTT1: PUSH ACC ;中断现场保护 PUSH PSW ; MOV TL1, #0B0H ;装定时器T1定时初值 MOV TH1, #3CH ; DJNZ R2,INTT1OUT ;0.3s未到退出中断(50ms中断6次) MOV R2,#06H ;重装0.3s定时用初值 CPL 02H ;0.3s定时到对闪烁标志取反 JB 02H,FLASH1 ;02H位为1时显示单元“熄灭” MOV 72H,76H ;02H位为0时正常显示 MOV 73H,77H ; MOV
26、74H,78H ; MOV 75H,79H ;INTT1OUT: POP PSW ;恢复现场 POP ACC ; RETI ;中断退出FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制 MOV 72H,7AH ;01H位为0时,“熄灭符”数据放入分 MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据 MOV 74H,78H ; MOV 75H,79H ; AJMP INTT1OUT ;转中断退出FLASH2: MOV 72H,76H ;01H位为1时,“熄灭符”数据放入小时 MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示 MO
27、V 74H,7AH ; MOV 75H,7AH ; AJMP INTT1OUT ;转中断退出;*; 加子程序 ;* ADD1: MOV A,R0 ;取当前计时单元数据到A DEC R0 ;指向前一地址 SWAP A ;A中数据高4位与低4位交换 ORL A,R0 ;前一地址中数据放入A中低4位 ADD A,#01H ;A加1操作 DA A ;十进制调整 MOV R3,A ;移入R3寄存器 ANL A,#0FH ;高4位变0 MOV R0,A ;放回前一地址单元 MOV A,R3 ;取回R3中暂存数据 INC R0 ;指向当前地址单元 SWAP A ;A中数据高4位与低4位交换 ANL A,#0
28、FH ;高4位变0 MOV R0,A ;数据放入当前地址单元中 RET ;子程序返回;*; 清零程序 ;*;对计时单元复零用 CLR0: CLR A ;清累加器 MOV R0,A ;清当前地址单元 DEC R0 ;指向前一地址 MOV R0,A ;前一地址单元清0 RET ;子程序返回;*; 时钟调整程序 ;*;当调时按键按下时进入此程序 SETMM: CLR ET0 ;关定时器T0中断 CLR TR0 ;关闭定时器T0 LCALL DL1S ;调用1s延时程序 JB P3.7,CLOSEDIS ;键按下时间小于1s,关闭显示(省电) MOV R2,#06H ;进入调时状态,赋闪烁定时初值 S
29、ETB ET1 ;允许T1中断 SETB TR1 ;开启定时器T1 SET2: JNB P3.7,SET1 ;P3.0口为0(键未释放),等待 SETB 00H ;键释放,分调整闪烁标志置1 SET4: JB P3.7,SET3 ;等待键按下 LCALL DL05S ;有键按下,延时0.5s JNB P3.7,SETHH ;按下时间大于0.5s转调小时状态 MOV R0,#77H ;按下时间小于0.5s加1min操作 LCALL ADD1 ;调用加1子程序 MOV A,R3 ;取调整单元数据 CLR C ;清进位标志 CJNE A,#60H,HHH ;调整单元数据与60比较 HHH: JC S
30、ET4 ;调整单元数据小于60转SET4循环 LCALL CLR0 ;调整单元数据大于或等于60时清0 CLR C ;清进位标志 AJMP SET4 ;跳转到SET4循环 CLOSEDIS: SETB ET0 ;省电(LED不显示)状态,开T0中断 SETB TR0 ;开启T0定时器(开时钟) CLOSE: JB P3.7,CLOSE ;无按键按下,等待 LCALL DISPLAY ;有键按下,调显示子程序延时消抖 JB P3.7,CLOSE ;是干扰返回CLOSE等待WAITH: JNB P3.7,WAITH ;等待键释放 LJMP START1 ;返回主程序(LED数据显示亮)SETHH:
31、 CLR 00H ;分闪烁标志清除(进入调小时状态)SETHH1: JNB P3.7,SET5 ;等待键释放 SETB 01H ;小时调整标志置1 SET6: JB P3.7,SET7 ;等待按键按下 LCALL DL05S ;有键按下延时0.5s JNB P3.7,SETOUT ;按下时间大于0.5s退出时间调整 MOV R0,#79H ;按下时间小于0.5s加1h操作 LCALL ADD1 ;调加1子程序 MOV A,R3 ; CLR C ; CJNE A,#24H,HOUU ;计时单元数据与24比较 HOUU: JC SET6 ;小于24转SET6循环 LCALL CLR0 ;大于或等于24时清0操作 AJMP SET6 ;跳转到SET6循环 SETOUT: JNB P3.7,SETOUT1 ;调时退出的程序,等待键释放 LCALL DISPLAY ;延时消抖 JNB P3.7,SETOUT ;是抖动,返回SETOUT再等待 CLR 01H
限制150内