《LED简易数字电子时钟毕业设计论文.doc》由会员分享,可在线阅读,更多相关《LED简易数字电子时钟毕业设计论文.doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、LED简易数字电子时钟 电气1202电气自动化机电工程系2014年1年11月13日 目录目录2第一章 前言3 1.1时钟来历3第二章方案论证与比较42.1数字时钟方案42.2数码管显示方案4第三章 系统设计53.1总体设计53.1.1系统说明5 3.1.2系统框图63.2模块设计63.2.1电源部分63.2.2复位电路73.2.3时钟实现哥功能分析及图解73.2.4数码管解说8 3.2.5控制部分8 3.2.6电路原理图10 3.2.7电路硬件图10第四章 软件流程图设计114.1 定时器T0中断服务程序114.2 定时器T1中断服务程序12第五章 程序设计14第六章 总 结226.1 物品清
2、单:226.2设计总结236.3 LED简易数字时钟介绍:23致谢24参考文献25LED简易数字电子时钟的设计 摘 要 单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,
3、它由直流电源供电,通过数码管能够准确显示时间,调整时间,从而到达学习、设计、开发软、硬件的能力。关键词:单片机 AT89C51 硬件设计,软件设计 时钟电路 22第一章 前言1.1 时钟来历时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械
4、式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。时钟电路在计算机系统中起着非常重要的作用,是保证系统正常工作的基础。在一个单片机应用系统中,时钟有两方面的含义:一是指为保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢;二是指系统的标准定时时钟,即定时时间,它通常有两种实现方法:一是用软件实现,即用单片机内部的可编程定时/计数器来实现,但误差很大,主要用在对时间精度要求不高的场合;二是用专门的时钟芯片实现,在对时间精度要求很高的情况下,通常采
5、用这种方法,典型的时钟芯片有:DS1302,DS12887,X1203等都可以满足高精度的要求。本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。第二章方案论证与比较2.1数字时钟方案数字时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发
6、情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而
7、且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。2.2数码管显示方案方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8 位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通
8、电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。 第三章 系统设计3.1总体设计3.1.1系统说明利用单片机(AT89C51)制作简易电子时钟,由2个八段四位共阳LED数码管分别显示时,分,秒。9个PNP管(9012)分别控制2个八段四位共阳数码管的亮灭,四个按键用于时间调整。3.1.2系统框图控制部分单片机(AT89C51)按键K1,K2,K3复位电路电源部分直流电源4.5V2个八段共阳极数码管显示时秒,分钟及小时位位选部分9个PNP三极管图3-1.23.2模块设计3.2.1电源部分 图3.2.13.2.2复位电路图3.2.2
9、所谓按键复位, 是指通过接通一按钮开关, 使单片机进入复位状态。系统上电运行后, 若需要复位, 一般是通过手动复位来实现的。通常采用手动复位和上电自动复位组合, 其电路如图3-3 所示。复位电路虽然简单, 但其作用非常重要。一个单片机系统能否正常运行, 首先要检查是否能复位成功。初步检查可用示波器探头监视RST 引脚, 按下复位键, 观察是否有足够幅度的波形输出(瞬时的) , 还可以通过改变复位电路阻容值进行实验。3.2.3时钟实现各功能分析及图解 仿真开始运行时,或按下k4键时,时钟从12:00:00开始运行,其中K2键对时进行调整,k3对小分进行调整,k1是设置键可以让时钟暂停。 图3-2
10、.3 时钟运行图 图3.2.3 3.2.4数码管解说 图3.2.4为数码管的引脚图,每位的段码线(a,b,c,d,e,f,g,dp)分别与1个8位的锁存器输出相连,由AT89c51控制组合09十个数据,如令其显示1则b3.2.4 引脚(即2,3引脚)送高电平,此时数码管显示1。由于各位的段码线并联,8位I/O口输出段码对各个显示位来说都是相同的。此时数码管显示1。由于各位的段码线并联,8位I/O口出段码对各个显示位来说都是相同的。 图3.2.4图3.2.5控制部分图3.2.5AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含4K bytes的可系统编程的Flas
11、h只读程序存储器,器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准8051指令系统及引脚。AT89S51提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32I/O口线,看门狗(WDT),两个数据指针,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。如图3-7所示,AT89C51有40引脚,双列直插(DIP)封装,所用引脚功能如下:1. VCC 运行时加5V2. GND 接地3. XTAL1 振荡器反相放大器及内部时钟发生器的输入端4. XTAL2 振荡器反相放大器的输出端5. RST 复位输入,高电平有效,在晶振工
12、作时,在RST引脚上作用2个机器周期以上的高电平,将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFT AUXR的DISRTO位(地址8EH)可打开或关闭该功能。DISRTO位缺省为RESET输出高电平打开状态。6. EA/VPP 片外程序存储器访问允许信号。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地),如果EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。7. P1口,P2口P1,P2是一组带内部上拉电阻的8位双向I/O口。运行时通过P1口控制驱动电路的工作,将数据送到数码管,显示相应的段码,为了达到减少功耗或满足端口对最
13、大电流的限制,应加上一限流电阻。P2.0P2.5口控制数码管的位选,使六个数码管轮流显示数据,等于1时位选三极管导通,等于0 时位选三极管截止。3.2.6电路原理图最小电路数码管连接线路3.2.7电路硬件图 图3.2.7简易的数字时钟硬件,上面有四个键分别是K1,K2,K3,K4键。K1键是设置键,K2键是调时键,K3键是调分的,K4键是运行键也就是按下这个键就走时。第四章 软件流程图设计 定时器T0中断服务程序在定时器T0中断服务程序中,首先重装计数初值(0F8CCH)然后,调用显示子程序对数码管进行动态扫描。由于定时器T0定时时时间2ms,因此,每隔2ms就会进入8次中断服务程序,就可以将
14、8只数码管扫描一遍,需要时间2ms*8=16ms扫描频率为1000/16hz=63HZ,这个频率足够快,因而不会出现闪烁现象。定时器T0中断服务程序流程图4.1 定时器T0中断服务程序调显示子程序 重装计数初值 调显示子程序 结束 定时器T0中断服务程序流程图 图4.14.2 定时器T1中断服务程序重装计数初值中断计数器T1加1T1=100吗? 否 是 是T1清零,秒单元加1 秒单元=60吗? 否 是秒单元清零,分单元加1分单元=60吗? 否 是 分单元清零,小时单元加1 小时单元=24吗? 否 是秒、分、小时单元清零 结束 定时器T1中断服务程序流程图图4.24.3按键处理子程序为时钟的调节
15、,程序中通过扫描来判断按键是否按下进行时间的运行图开始 定时器T1暂停 K3键是否按下?K4键是否按下?K2键是否按下? 否 否 否 否 是 是 是蜂鸣器响一声分钟单元加1小时单元加1分钟是60吗?小时是24吗? 否 否 是 是小时单元清零分钟单元清零启动定时器T1调转换子程序结束 按键处理子程序流程图 图4.3第五章 程序设计 根据流程图,经过认真分析得出控制电路的源程序如下: K1 BIT P3.2K2 BIT P3.3K3 BIT P3.4K4 BIT P3.5DISP_DIGIT EQU 30H;位选通控制位, 传送到P2口,用于打开相应的数码管;如等于FEH时,P2.0为0,第1个数
16、码管得电显示DISP_SEL EQU 31H;显示位数计数器,显示程序通过它知道正在显示哪一位数码管HOUR EQU 32H ;小时缓冲区MIN EQU 33H;分钟缓冲区SEC EQU 34H;秒缓冲区T1_COUNT EQU 35H ;定时器T1中断次数计数器,计满100次后,秒加1DISP_BUF EQU 36H;显示缓冲区首地址ORG0000H;程序从0000H开始AJMP MAIN;跳转到主程序MAINORG 0000BH;定时器T0中断服务程序入口地址LJMP TIME0;跳转到定时器T0中断服务程序ORG 0001BH;定时器T1中断服务程序入口地址LJMP TIME1;跳转到定
17、时器T1中断服务程序ORG 030H;主程序从030H开始;以下是主程序MAIN:MOVSP, #70H ;堆栈指针指向70HMOV P1,#0FFH;P1口置1MOV P2,#0FFH;P2口置1MOV HOUR,#12; 小时单元赋初值MOV MIN,#0;分钟单元赋初值MOV SEC,#0;秒单元赋初值MOV T1_COUNT,#0;定时器中断T1计数器清0MOV DISP_DIGIT,#0FEH;位选通控制位赋初值FEH,即先选通第1只数码管MOV DISP_SEL,#0;显示位数计数器清0MOV DISP_BUF +2,#10;第3位数码管显示-(-显示码为0BFH,位于第10位)M
18、OV DISP_BUF +5,#10; 第6位数码管显示-ACALL T0T1_INIT;调定时器T0、T1初始化子程序START:ACALL CONV;调转换子程序JB K1,K1_NEXT;若K1未按下,跳转到K1_NEXT ACALL BEEP_ONE ;调蜂鸣器响一声子程序 ACALL KEY_PROC;K1键按下时,调按键处理子程序 AJMP STARTK1_NEXT:JB K2,K2_NEXT; 若K2未按下,跳转到K2_NEXTAJMP START; 跳转到STARTK2_NEXT:JB K3,K3_NEXT; 若K3未按下,跳转到K3_NEXTAJMP START; 跳转到ST
19、ARTK3_NEXT:JB K4,K4_NEXT; 若K4未按下,跳转到K4_NEXTK4_NEXT:AJMP START ;跳转到START继续循环 ;以下是定时器T0、T1初始化子程序T0T1_INIT:MOV TMOD,#11H;定时器T0、T1均设定为工作方式1MOV TH0,#0F8H;定时器T0计数初值高位(定时时间为2ms)MOV TL0,#0CCH;定时器T0计数初值低位(定时时间为2ms)MOV TH1,#0DCH;定时器T1计数初值高位(定时时间为10ms)MOV TL1,#00H;定时器T1计数初值低位(定时时间为10ms)SETB EA ;开总中断SETB ET0 ;允
20、许定时器T0中断SETB ET1;允许定时器T1中断SETBTR0;动定时器T0SETBTR1;启动定时器T1RET;以下是转换子程序CONV:MOV A,HOUR;小时缓冲区内容送AMOV B,#10;16进制转换为10进制DIV AB;A除以B,商存于A,余数存于BMOV DISP_BUF,A;将小时十位数送DISP_BUFMOV A,B;将小时个位数送AMOV DISP_BUF+1,A;将小时个位数送DISP_BUF+1MOV A,MIN;分钟缓冲区内容送AMOV B,#10; 16进制转换为10进制DIV AB; A除以B,商存于A,余数存于BMOV DISP_BUF+3,A;将分钟十
21、位数送DISP_BUF+3MOV A,B;将分钟个位数送AMOV DISP_BUF+4,A; 将分钟个位数送DISP_BUF+4MOV A,SEC;将秒缓冲区内容送AMOV B,#10;16进制转换为10进制DIV AB; A除以B,商存于A,余数存于BMOV DISP_BUF+6,A;将秒十位数送DISP_BUF+6MOV A,B;将秒个位数送AMOV DISP_BUF+7,A;将秒个位数送DISP_BUF+7RET;以下是定时器T0中断服程序(定时时间2ms), 用于数码管的动态扫描TIME0:PUSH ACC ;ACC入栈PUSH PSW ;PSW入栈MOV TH0,#0F8H ;重装计
22、数初值MOV TL0,#0CCH ; 重装计数初值ACALL DISP ;调显示子程序POP PSW ;PSW出栈POP ACC ;ACC出栈RETI ;中断服务程序返回;以下是显示子程序DISP:MOV P2,#0FFH ; 先关闭所有数码管MOV A,#DISP_BUF; 获得显示缓冲区基地址ADD A,DISP_SEL; 将DISP_BUF+ DISP_SEL送AMOV R0,A; R0 = 基地址 + 偏移量MOV A,R0; 将显示缓冲区DISP_BUF+ DISP_SEL的内容送AMOV DPTR,#TAB ;将TAB地址送DPTR MOVC A,A+DPTR ;根据显示缓冲区(D
23、ISP_BUF+DISP_SEL)的内容查表 MOV P0,A ; 显示代码传送到P0口MOV P2,DISP_DIGIT; 位选通位(初值为FEH)送P2 ;第1次进入中断时,P2.0清0,打开第1个数码管;需要进入8次T0中断(16ms时间),才能将8个数码管扫描1遍MOVA,DISP_DIGIT ; 位选通位送ARLA ; 位选通位左移, 下次中断时选通下一位数码管MOVDISP_DIGIT,A;将下一位的位选通值送回DISP_DIGIT,以便打开下一位INCDISP_SEL; DISP_SEL加1, 下次中断时显示下一位MOV A,DISP_SEL;显示位数计数器内容送ACLR C ;
24、CY位清0SUBB A,#8;A的内容减8,判断8个数码管是否扫描完毕JZ RST_0;若A的内容为0,跳转到RST_0AJMP DISP_RET;若A的内容不为0,说明8个数码管未扫描完;跳转到DISP_RET退出,准备下次中断继续扫描RST_0:MOV DISP_SEL,#0 ;若8个数码管扫描完毕,则让显示计数器回0;准备重新从第1个数码管继续扫描DISP_RET:RET; 以下是定时器T1中断服务程序(定时时间10ms),用于产生秒、分钟和小时信号TIME1:PUSH PSW ; PSW入栈PUSH ACC ;ACC入栈MOV TH1,#0DCH ;重装计数初值MOV TL1,#00H
25、 ;重装计数初值INC T1_COUNT;中断次数计数器加1MOV A,T1_COUNT ;送ACLR C ;CY位清0SUBB A,#100; 是否中断100次(达到1s)JC END_T1 ; 若C=1说明有借位,即不够100次(1s)MOV T1_COUNT,#00H; 若C=0,说明计数达到100次,即1sINC SEC ;秒单元加1 MOV A, SEC ;秒单元送A CJNE A, #60, END_T1;是否到1min,若不到,退出中断 INC MIN ;若到1min,分钟单元加1 MOV SEC, #0 ;秒单元清0 MOV A, MIN ;分钟单元送A CJNE A, #60
26、, END_T1 ;是否到1h,若不到,退出中断 INC HOUR ;若到1h,小时单元加1 MOV MIN, #0 ;分钟单元清0 MOV A, HOUR ;小时单元送A CJNE A,#24, END_T1 ;是否到24h,若不到,退出中断 MOV SEC, #0 ;若到24h,秒单元清0 MOV MIN, #0 ;分钟单元清0 MOV HOUR, #0 ;小时单元清0END_T1:POP ACC ;ACC出栈POPPSW ;PSW出栈RETI ;中断服务程序返回;以下是数码的显示码TAB:DB0C0H,0F9H,0A4H,0B0H,099H;0-4的显示码DB092H,082H,0F8H
27、,080H,090H;5-9的显示码DB 0BFH;-的显示码,位于第10位DB 0FFH;数码管熄灭码;以下是按键处理子程序(当K1键按下时,对K2、K3、K4键进行判断并处理)KEY_PROC:CLR TR1 ;定时器T1动作暂停,即走时功能暂停KEY2: JB K2,KEY3 ;未按下K2键则跳转到KEY3继续扫描ACALL DELAY_10ms;延时10ms去除键抖动JB K2, KEY3 ;未按下K2键则跳转到KEY3继续扫描 JNB K2, $ ;若按下K2则等待放开 INC HOUR ;小时单元值加1 MOV A, HOUR;小时单元值送HOUR CJNE A,#24, KEY2
28、_NEXT;小时是否是24,若不是,跳转到KEY2_NEXT MOV HOUR, #0 ;小时单元清0KEY2_NEXT:ACALL CONV ;调转换子程序,转换为适合显示的数据 AJMP KEY2 ;跳转到KEY2继续执行KEY3:JB K3, KEY4 ;未按下K3键则跳转到KEY4继续扫描ACALL DELAY_10ms;延时10ms去除键抖动JB K3, KEY4 ;未按下K3键则跳转到KEY4继续扫描 JNB K3,$ ;若按下K3则等待放开 INC MIN ;分钟单元值加1 MOV A, MIN;将分钟单元值送A CJNE A,#60,KEY3_NEXT ;是否到60 min,若
29、没到,跳转到KEY3_NEXT MOV MIN, #0 ;若分钟到60,则分钟单元值清0KEY3_NEXT:ACALL CONV ;调转换子程序 AJMP KEY2 ;跳转到KEY2继续执行KEY4: JB K4,KEY2 ;未按下K4键则跳转到KEY2继续扫描 JNB K4, $ ;若K4按下,则等待放开ACALL BEEP_ONE ;调蜂鸣器响一声子程序SETB TR1 ;启动定时器T1KEY_RET:RET;以下是蜂鸣器响一声子程序BEEP_ONE:CLR P3.7;开蜂鸣器ACALL DELAY_100ms ;延时100msSETB P3.7 ;关蜂鸣器 SETB TR1 ;启动定时器
30、T1KEY_RET:RETACALL DELAY_100ms;延时100msRET;以下是10ms延时子程序DELAY_10ms:MOV R7,#50LOOP2:MOV R6,#100LOOP1:DJNZ R6,LOOP1DJNZ R7,LOOP2RET;以下是100ms延时子程序DELAY_100ms:MOV R4,#200DEL1: MOV R5,#250 DJNZ R5,$ DJNZ R4,DEL1RETEND 第六章 总 结表6.1 物品清单:AT89c511个8段四位共阳极数码管2个三极管9个1K电阻17个复位开关4个10K电阻8个30pf电容2个12MHZ晶振1个蜂鸣器1个 图6.
31、16.2设计总结本设计能够很准确的走时,并能够通过硬件对时钟进行时间调整不足之处就是有虚焊有时数码管有些地方不显示,导致不能正常工作,还有排版不是很严格,对三极管测不怎么明确。6.3 LED简易数字时钟介绍:显示12:00:00时间 1、 时间可调:调整键(K1)走时停止按下K2键(小时加1键),按K3键(分钟加1键)分钟加1,调整完成后按K4键(运行键),继续走时 2、下载线和电源线插接说明:1.下载线插接说明:两排十针下载口,板图上都有一个小方框,为1号引角;下载线的凸口为正方向,凸口的右侧边的第一个插孔为1号引角,这一点一定要切记,不然的话程序下载不进去,电源线插接说明:电池盒的红线为正
32、。 3、黑线为负。板子所留出来的电源插口用VCC(表示电源正)和GND(表示电源负)标明调试要点:首先确保各器件的完好性,其次检测各芯片的电源线和地线是否接触良好,然后焊接器件,接好电源用万用表检测各电源端、地端的状态是否正常。检查无误后插AT89C51并写一简易的程序,观察电路是否能协同工作。最后写工作程序,根据显示现象调试程序直至成功上电运行时,数码管开始显示12:00:00,时钟开始走时。 致谢在回首大学数年的生活,多历历在目。站在一个学生的角度而言,我不得不感谢我的老师,对其他同学的尊尊教诲、悉心教导;在此我表示衷心感谢老师,同时我还要感谢在我学习期间给我极大关心和支持的各位老师以及关
33、心我的同学和朋友们。 参考文献1 伟纳电子.ME500B产品资料.htp/2 刘建清.从零开始学单片机技术M .北京:国防工业出版社,20063 周坚.单片机轻松入门M.北京:国防工业出版社,2006 4 王守中.51单片机开发入门与典型实例指导M.北京:人命邮电出版社,2008.5 谢嘉奎电子线路M 高等教育出版社2003-26 夏路易,石宗义电路原理图与电路设计教程Protel 99SEM 北京希望电子出版社20027 王毓银数字电路逻辑设计M 高等教育出版社2004-28 邱关源电路M 高等教育出版社9 轻松玩转51单片机/刘建清编著.-北京:北京航空航天大学出版社,2011.3 10康华光.电子技术基础数字部分(第四版).高等教育出版社,2000年.11任为民.电子技术基础课程设计.中央广播电视大学出版社,1997年.12马丽萍、肖渊.基于Proteus的数字钟设计及仿真J. 西安工程大学学报,2009,23(3):59-62.