基于AT89C52的电子时钟设计.docx
《基于AT89C52的电子时钟设计.docx》由会员分享,可在线阅读,更多相关《基于AT89C52的电子时钟设计.docx(18页珍藏版)》请在冰点文库上搜索。
基于AT89C52的电子时钟设计
华北水利水电学院
课程设计报告
课程名称:
基于AT89C52的电子时钟设计
姓名:
李东利
学号:
200814715
班级:
电信2008147
专业:
电子信息工程
日期:
二零一零年一月二十二日
目录
一、前言3
二、课程设计的目的和要求4
2.1课程设计的目的4
2.2课程设计的基本要求4
三、总体设计原理4
四、硬件设计5
4.1设计思路5
4.2硬件结构及原理电路5
4.3主要硬件原件说明6
4.4单元电路原理介绍6
五、软件设计10
5.1程序介绍10
5.2程序清单13
六、系统操作说明18
七、设计总结19
八、参考文献20
一前言
20世纪70年代开始,半导体厂商把微型机最基本的部件制作在一个硅片内,于是就出现了以一个大规模集成电路为主组成的微型计算机---单片微型计算机(Single-chipmicrocomputer),简称单片机。
由于单片机面向控制性应用领域,装入到各种智能化产品之中,所以又称为嵌入式控制器(embeddedmicrocontroller)单片机内部包含有计算机的基本功能部件:
中央处理器(CPU)、存贮器(memory)、输入/输出(I/O)接口电路,给单片机加上适当的外围设备和软件,便构成一个单片机应用系统。
其应用如下:
(1)单片机在智能仪表中的应用:
单片机广泛地应用于实验室、交通运输工具、计量等各种仪器仪表之中,使仪器仪表智能化,提高它们的测量精度,加强其功能,简化仪器仪表的结构,便于使用、维护和改进。
(2)单片机在机电一体化中的应用:
机电一体化是机械工业发展的方向。
机电一体化产品是指集机械技术、微电子技术、自动化技术和计算机技术于一体,具有智能化特征的机电产品。
(3)单片机在实时控制中的应用:
单片机也广泛地用于各种实时控制系统中,如对工业上各种窑炉的温度、酸度、化学成分的测量和控制。
将测量技术、自动控制技术和单片机技术相结合,充分发挥数据处理和实时控制功能,使系统工作于最佳状态,提高系统的生产效率和产品的质量。
(4)单片机在分布式多机系统工程中的应用:
单片机在多机系统中,往往作为一个终端机,安装在系统的某些节点上,对现场信息进行实时的测量和控制。
五单片机在家用电器等消费类领域的应用:
家用电器等消费类领域的产品特点是量多面广,市场前景看好。
单片机应用到消费类产品之中,能大大提高它们的性能价格比,提高产品在市场上的竞争能力。
二课程设计的目的和要求
2.1课程设计的目的
单片机具有稳定可靠、体积小、价格低廉等特点,成为设计智能化仪器仪表的首选微控制器,因此本次设计我们采用了AT89C52芯片,此款单片机可以使用软件对其进行在线编程,其灵活性和可靠性都相对提高。
通过此次课程设计,增强了我们的动手能力,把理论与实践融合在一起。
同时,也进一步加深了对单片机的硬件结构的理解和巩固,编程能力也得到了提高。
2.2课程设计的基本要求
本次课程设计要求利用单片机内部定时器实现时、分、秒计时且在6个数码管上同时显示时、分、秒计时时间,并能通过按键对计时时间进行重新设置。
三总体设计原理
本设计中的电子钟的核心是AT89S51单片机,其内部带有4KB在线可编程Flash存储器的单片机,无须外扩程序存储器,硬件电路主要由四部分构成:
时钟电路,复位电路,键盘以及显示电路。
系统时钟电路采用的晶振的频率为12MHz,定时计数个数为5000,定时器采用的是定时器0工作在方式1定时,用于实现时、分、秒的计时,定时时间为5ms。
复位电路可使电子表恢复到初始状态。
键盘可对电子表进行开启、停止,还能实现时、分、秒的显示及设定等操作。
显示电路由一个共阳级6位一体LED数码管构成,它的段控端和位控端通过7447及9015PNP型号三极管与AT89C52单片机的I/O口相连,显示器可使电子表显示出时、分、秒。
多功能电子表的计时原理为:
上电后,电子表显示P.提示符,按下K0键后,电子表从00:
00:
00开始计时。
当定时器0的定时时间满5ms后,定时器0溢出一次,溢出满200次后,电子表的秒加1,满60秒后,分加1,满60分后,时加1,满24时后,电子表重新从00:
00:
00开始计时。
四硬件设计
4.1设计思路
电子时钟主要由显示模块、校时模块和时钟运算模块三大部分组成。
其中校时模块和时钟运算模块要对时、分、秒的数值进行操作,并且秒计算到60时,要自己清零并向分进1;分计算到60时,要自己清零并向时进1;时计算到24时,要清零。
这样,才能循环记时。
4.2硬件结构及原理电路
4.3主要硬件原件说明
4.3.1单片机AT89C52
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
4.3.2译码器驱动芯片7447
7447是美国仙童(FRIRCHILD)公司生产的BCD码到7段数码管的译码器驱动芯片。
它负责将4位BCD码十进制数转化成对应的7段数码管信号,送到数码管的7位段选输入端。
4.3.374LS138译码器
74LS138为3线-8线译码器,共有54/74S138和54/74LS138两种线路结构型式,其工作原理如下:
当一个选通端(G1)为高电平,另两个选通端(/(G2A)和/(G2B))为低电平时,可将地址端(A、B、C)的二进制编码在一个对应的输出端以低电平译出。
其作用是利用G1、/(G2A)和/(G2B)可级联扩展成24线译码器;若外接一个反相器还可级联扩展成32线译码器。
若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。
4.4单元电路原理介绍
4.4.1电源电路原理
本系统所用器件的工作电压为+5V,为保证本系统能够正常工作,需提供稳定的+5V电压,可利用三端集成稳压器7805来实现,其应用电路如图所示。
7805的输入电压为+10V,输出电压为稳定的+5V电压,C=2000μF为滤波电容,C1=0.33μF是为了改善纹波电路,C0=0.1μF是为了改善负载的瞬态响应。
(其中要求Ui-Uo>2V)
4.4.2时钟电路原理
如图所示为时钟电路原理图,AT89C52芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
而在芯片内部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
4.4.3复位电路原理
如图所示为复位电路原理图,复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序,并使其它功能单元处于一个确定的初始状态。
本复位电路采用的是按键复位,它是通过复位端经电阻与VCC电源接通而实现的,它兼具上电复位功能。
因本系统的晶振的频率为12MHz,所以,复位信号持续时间应当超过2μS才能完成复位操作。
4.4.4键盘工作原理
如图所示为键盘原理图,本系统采用的是独立式键盘结构,每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。
它的软件是采用查询式结构,首先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。
4.4.5显示器原理
系统采用动态显示方式,用P0口来控制LED数码管的段控线,而用P2口来控制其位控线。
动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。
图中的7447作为驱动器,而7个100欧姆电阻则起限流作用。
五软件设计
5.1程序介绍
(1)主程序(START)
在主程序中只完成系统的初始化,同时进行时、分、秒按键的扫描。
如果有按键按下,则做相应时分秒计数器的加1处理。
主程序流程图如下:
(2)定时器中断服务程序(TIMER0)
定时器T0用于时间计时。
定时计数个数为50000,由于采用12MHz晶体振荡器,所以定时溢出中断周期为5000us=5ms。
为了保证计时的准确性,进入中断服务程序时应立即重设计数初值。
在中断程序中还要判断是否计时1s,若是,还应通过调用其他子程序作时、分、秒值的相应处理。
中断程序流程图如下:
(3)显示子程序(DISP)
该子程序通过在中断服务程序中被调用而执行。
每一次中断程序调用一次,其作用是根据扫描指针循环驱动各个数码管。
(4)时钟调整子程序(CLK_CHANGE)
当中断程序中判断出计时1s时,该程序即被调用执行。
其作用为将秒的计数值加1,同时判断是否应对时、分、秒作相应修改。
(5)数据转换子程序(CONVERT)
当中断程序中判断出计时1s时,该程序即被调用执行。
由于时分秒的计数值分别保存在一个字节里,而每一个计数值实际上是一个2位的十进制数。
在驱动显示时必须将这个2位数拆分开分别去扫描个位和十位,该子程序就是完成这个任务的,并把拆分结果存储在从20H开始的显示寄存器单元里。
(6)延时子程序(DELAY)
用于键盘的延时去抖。
5.2程序清单
ORG0000H;复位起始地址
AJMPSTART;跳转至主程序
ORG000BH;TIMER0中断矢量地址
AJMPTIMER0;跳转至T0中断子程序
;TIMER0
;主程序***********************************************************
START:
MOVSP,#6FH;设置堆栈从6FH开始
MOV30H,#00H;显示位码寄存器初值为0
MOV2AH,#00H;“时”寄存器初值为00H
MOV2BH,#00H;“分”寄存器初值为00H
MOV2CH,#00H;“秒“寄存器初值为00H
MOVTMOD,#01H;设T0为工作方式1,即16
;位定时器
MOVTH0,#0ECH;定时器计时中断时间为
;5000us
MOVTL0,#78H
MOVIE,#82H;T0中断使能、总的中断使能
MOVR4,#200;5000us中断200次,以实
;现计时1s功能
SETBTR0;启动定时器T0
LOOP:
JBP0.0,NEXT2;P0.0(秒值修改键)是否
;被按下?
不是,则跳至
;NEXT2检查P0.1
ACALLDELAY;去抖动
JBP0.0,NEXT2;P0.0不是真正被按下,则
;跳至NEXT2检查P0.1
NEXT1:
JNBP0.0,NEXT1;P0.0是否已分开?
MOVA,2CH;将秒寄存器的值放入A
ADDA,#01;A的内容加1
DAA;十进制调整
MOV2CH,A;将A的值放回秒寄存器
CJNEA,#60H,NEXT2;是否等于60秒?
不是,
;则跳至NEXT2
MOV2CH,#00;是则重新设置秒寄存器
;的值为00
NEXT2:
JBP0.1,NEXT4;P0.1(分值修改键)是否被
;按下?
不是则跳至NEXT4
ACALLDELAY;去抖动
JBP0.1,NEXT4;P0.1不是真正被按下,则跳
;至NEXT4检查P0.2
NEXT3:
JNBP0.1,NEXT3;P0.1是否已分开
MOVA,2BH;将分寄存器的值修改,类
;同秒的处理
ADDA,#01
DAA
MOV2BH,A
CJNEA,60H,EXT4;P0.2(时值修改键)是否被
;按下,不是,则跳至NEXT4
MOV2BH,#00;是则重设寄存器的值为00
NEXT4:
JBP0.2,LOOP;P0.2是否被按下?
不是则
;跳至LOOP
ACALLDELAY;去抖动
JBP0.2,LOOP
NEXT5:
JNBP0.2,NEXT5;P0.2是否已放开?
MOVA,2AH
ADDA,#01H
DAA
MOV2AH,A
CJNEA,#24H,LOOP
MOV2AH,#00
AJMPLOOP
;定时中断服务程序**************************************************
TIMER0:
MOVTH0,#0ECH;重设定时器中断计时5000us
MOVTL0,#78H
PUSHACC;保留现场的值
PUSHPSW
DJNZR4,TIMLP1;计时1s到否?
不到1s,
;则跳至TIMLP1
MOVR4,#200
ACALLCLK_CHANGE;调用计时子程序
ACALLCONVERT;调用数码转换及
;CONVERT子程序
TIMLP1:
ACALLDISP;调用显示子程序DISP
POPPSW;恢复现场的值
POPACC
RETI
;显示子程序****************************************************
DISP:
MOVA,30H;扫描显示位码载入A
ADDA,#20H
MOVR1,A
MOVA,30H
SWAPA
ORLA,@R1
MOVP1,A;输出至P1显示
INC30H;扫描偏移量指针加1
MOVA,30H
CJNEA,#6,DSPEND
MOV30H,#0
DSPEND:
RET
;时钟调整子程序****************************************************
CLK_CHANGE:
MOVA,2CH;2CH单元为秒寄存器
ADDA,#1;加1秒
DAA;十进制调整
MOV2CH,A;存入秒寄存器
CJNEA,#60H,CLKEND;是否超过60秒?
不是,
;则跳至CLKEND
MOV2CH,#00;是,则重设为00
MOVA,2BH;2BH单元为分寄存器,
;其处理同秒寄存器
ADDA,#1
DAA
MOV2BH,A
CJNEA,#60H,CLKEND;是否超过60分?
不是,
;则跳至CLKEND
MOV2BH,#00;是,则重设为00
MOVA,2AH;2AH单元为时寄存器,
;其处理同秒、分处理
ADDA,1
DAA
MOV2AH,A
CJNEA,#24,CLKEND;是否超过24时?
不是,
;则跳至CLKEND
MOV2AH,#00
CLKEND:
RET
;数据转换子程序***************************************************
CONVERT:
MOVR1,#20H;送显示缓冲区首地址到
;R1指针
MOVA,2CH;将秒寄存器的内容存入A
ANLA,#0FH;取秒值的个位,并存入
;20H单元
MOV@R1,A
INCR1;目标地址指针修改
MOVA,2CH;将秒寄存器的内容存入A
ANLA,#0F0H;取秒值的十位,并存入
;21H单元
SWAPA
MOV@R1,A
INCR1;目标地址指针修改
MOVA,2BH;分值的处理,类似于秒
;的处理
ANLA,#0FH
MOV@R1,A
INCR1
MOVA,2BH
ANLA,#0F0H
SWAPA
MOV@R1,A
INCR1
MOVA,2AH;时值的处理,类似于分、
;秒的处理
ANLA,#0FH
MOV@R1,A
NCR1
MOVA,2AH
ANLA,#0F0H
SWAPA
MOV@R1,A
RET
;延时子程序*******************************************************
DELAY:
MOVR6,#10
D1:
MOVR7,#250
DJNZR7,$
DJNZR6,D1
RET
END
六系统操作说明
使用电子钟时操作步骤如下:
(1)将+5V电源接到电子钟电源插口上,接通电源开关。
(2)把电子钟电路板上的ISP程序下载口JP1通过下载线连接到计算机打印机接口,在计算机上通过下载软件Easy51Pro把电子钟程序下载到单片机内。
(3)电子钟程序下载到单片机以后,电子钟进入待命令状态,显示器LED5显示“P.”。
(4)按一下K0子钟从0时、0分、0秒开始运行,此时显示器分别显示时、分、秒。
(5)再次按一下K0子钟停止运行进入调整状态,此时通过K1键、K2键、K3键分别调整电子钟的时、分、秒。
按一下其中的一个键对应的值加1。
调节到用户想要的时间后,再次按一下K0键,电子钟将以用户调整的时间为起点进入运行状态。
注意事项:
(1)每按一次复位键K0键单片机就完成一次复位操作,电子钟复位以后进入待命令状态。
(2)在对电子钟电路板操作和使用时,下载接口线拔插时,必须先按下电源开关断开电源。
七设计总结
为期两周的单片机课程设计接近尾声,通过我们组成员的通力合作顺利完成了设计任务。
在整个设计过程中我负责的是软件的设计,其中包括程序的编写和软件的仿真。
一方面,系统程序是系统运行中不可缺少的,其程序的可运行与否直接关系着系统设计的成功与否。
程序是为硬件服务的,所以在设计程序的过程中,要结合硬件设计,考虑相关的系统要求来设计程序。
在程序编写方面我感触最深的一点是调时间的过程中,要求闪烁可调,这是为了调时间的过程中的一种直观性,让用户明白现在所调的是时还是分。
这就要求程序的设计要考虑到闪烁频率的问题,具体来讲就是要求计算程序中所涉及到的指令所占用的机器周期的总合计。
另一方面,单片机的虚拟仿真也是设计过程中的一个重要环节。
通过这次设计我熟练掌握了软件Proteus和KeiluVision2的使用,同时也反映出了一些问题。
将编写好的源程序输入电脑,编译后出现很多错误,这些错误有许多是平时的实验遇到过的,例如:
输入的分号格式不正确,零和字母O弄混淆了,CJNE写成了CJNZ等,幸好这些错误在平时的实验中遇到了,所以改错误很容易。
通过这次电子钟设计,我学到了很多知识。
能够和同学一起成功的做出来实物我自己觉得很有成就感,这同时也激发了我学习单片机的更大热情,立志以后从事单片机方面的研究。
八参考文献
[1]张毅刚,《单片机原理及应用》,高等教育出版社,2003年
[3]吴翔,《原理图仿真与PCB设计》,电子工业出版社,2008年
[4]阎石,《数字电子技术基础》,高等教育出版社,2005年
[5]王宗和,《电子技术实践与训练》,高等教育出版社,2005年
[6]刘淳,《电子爱好者入门要诀》,中国电力出版社,2008年