电子钟实训报告
《单片机原理及应用》
课程设计报告
课题名称: 基于单片机的电子钟的设计 姓 名:
院 系:
专 业:
学 号:
指导教师:
完成时间: 年 月 日
目录
摘要 …………………………………………………………………...............................1
第一章 引言………………………………………………………………...................... 2
1.1 设计目的……………………………………………………………………................2
1.2 设计任务……………………………………………………………………………....2
1.3 设计思路……………………………………………………………………………....2
第二章 硬件系统的设计……………………………………………………………….3
2.1 电路原理图设计………...……………………………………………………….........3
2.2 AT89C51引脚及其功能………………………………………………………………4
2.2.1 AT89C51的原理及说明……………………………………………………………….4
2.2.2 引脚功能………………………………………………………………………………5
2.3 驱动部件.................................................................................................................... ...5
2.4 显示部件……………………………………………………………………………….6
第三章 软件系统的设计................................................................................................7
3.1 电子钟的主程序………………………………………………………………………7
3.2 电子钟的显示子程序…………………………………………………………………9
3.3 定时器中断服务程序…………………………………………………………………9
第四章 设计心得..............................................................................................................12
第五章 附录.......................................................................................................................13
附录1 硬件电路原理图和连接图………………………………………………………....13 附录2 电子钟程序清单……………………………………………………………………14 附录3 元器件清单…………………………………………………………………………17
附录4实训产品照片………………………………………………………………………....18 参考文献..................................................................................................................................18
基于单片机的电子钟的设计
摘要
本次实训是基于AT89C51单片机电子钟的设计,对时、分、秒的显示的控制,时、分、秒用六位数码管显示LED数码管时钟电路采用24小时计时方式。该电路采用AT89C51单片机,使用5V电池供电,只使用一个按键进行复位状态的控制以及正常显示等状态。LED显示采用静态扫描方式实现,采用6M晶振。
最常见的电子钟通常使用单片机模块控制,一种用单片机原理实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有硬件成本低、计时准确、更长的使用寿命特点,因此得到了广泛的使用。
本次设计通过用单片机为主控制,通过电路仿真而实现。首先使用Proteus Professional软件进行绘制硬件电路图,用keil软件进行编程与调试,最终生成hex文件,传入单片机内部,从而实现仿真效果。
关键词:电子钟、仿真、单片机
第一章 引言
1.1 设计目的
(1) 通过课程设计,使我们能够深入理解单片机系统的工作原理,
接口电路的设计及调试方法,培养综合运用所学理论知识分析和解决实际问题的能力。
(2) 使用AT89C51芯片的串口功能,利用六片8位并行输出串行
移位寄存器74LS164,实现时,分,秒的显示。
(3) 用keil软件进行编程与调试,利用Proteus 7 Professional软件
进行绘制硬件电路图且进行仿真。
1.2 设计任务
(1) 根据具体题目要求,设计以单片机为控制核心的测量系统
或控制系统,完成对指定目标或对象的测量及控制。
(2) 设计单片机与测量及控制对象的接口并进行硬件调试。
(3) 针对要求测量或控制的对象完成程序的编制。
(4) 硬件软件联调,完成题目所要求的功能。
(5) 设计能支持时、分、秒的时钟,时钟要具有时间调整功能。
1.3 设计思路
电子钟的计时器的硬件电路如图所示,采用AT89C51单片机,最小化应用设计;此次设计,我们采用静态显示的方案来完成电子钟的设计。采用共阳八段LED显示器,用74LS164来驱动 LED数码管,采用6M晶振,有利于提高计时的精确性。主要功能:
设计一个时钟系统,时钟时间在六位数码管上进行显示,从左到右依次为“时:分:秒”。
一上电,数码管显示起始时间为0时0分0秒,即数码管显示00.00.00,以后每秒钟时钟系统加1,最大显示值为23.59.59。
本次设计中,我们只用到了一个按键,此按键是用来控制电路复
位的,我们将设计好的复位电路直接接在单片机的复位引脚(RST)上,这样程序在运行过程中就会自动查询该引脚上的电平,当该引脚电平为高电平时,则电路恢复初始状态,反之,则程序正常运行。
电子钟的硬件电路框图如下:
第二章 硬件系统的设计
2.1电路原理图设计
根据AT89C51单片机灌电流能力强,拉电流能力弱的特点,我们选用共阳数码管。将AT89C51的P3.0~P3.1分别与74LS164的数据输入口和时钟信号输入口相连,74LS164是8位串入并出移位寄存器,负责将P3.0输出的串行数据转换成并行信号。显然,这种方式显示同样的位数使用单片机的口线大大减少,即可以让LED当前时间数值,数码管显示器有二种工作方式,即静态显示方式和动态扫描显示方式。为节省端口,本系统采用静态扫描显示方式。系统的时分
显示部件由6只7段共阳LED数码管构成,前两只用于时的显示,中间两只用于分的显示,最后两只用于秒的显示。每个LED数码管由相对应的74LS164驱动,数码管的a,b,c,d,e,f,g,h,分别分别74LS164的QA,QB,QC,QD,QE,QF,QH相连。具体设计ptotues仿真原理图及实物PCB图见下图所示:
电路原理图及protues仿真:
2.2 AT89C51引脚及其功能
2.2.1 AT89C51的原理及说明
AT89C51是美国Intel公司生产的低电压,高性能CHMOS8位单片机,片内含4k bytes的可反复擦写的只读程序存储器(PEROM)和蔼可亲128 bytes的随机存取数据存储器(RAM),器件采用Intel公司的高密度、非易失性存储技术生产,片内置通用4位中央处理器(CPU)和Flash存储单元,功能强大AT89C51单片机适合于许多较为复杂控制应用场合。
AT89C51引脚图
2.2.2 引脚功能
Vcc(40):电源电压 GND(20):接地
P3.0 RXD(串行输入口) P3.1 TXD(串行输出口)
RST(9):复位信号输入端。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1(18):振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2(19):振荡器反相放大器的输出端。通过XTAL1、XTAL2外接晶振后,即可构成自激振荡器,驱动内部时钟发生器向主机提供时钟信号。
2.3驱动部件
本设计的驱动电路采用74LS164,74LS164是最常见的移位寄存器,移位寄存器是暂时记忆数据的“寄存器”,其特征是具有将数据
向左或向右移动的功能。移位寄存器有各种形式。按存数据的位数有4位、8位等,按“输入/输出数据”形式有“串入/串出”、“串入/并出”、“并入/串出”、“并入/并入”等。
图3(a)是串行输入/并行(串行)输出移位寄存器74LS164的管脚排列图。其功能表见表2所示。74LS164有两个串行数据DA、DB输入端,使用时一般把它们连在一起;CR为清零输入端,低电平有效,当该端加入低电平时,寄存器输出Q0~Q7全为低电平。在正常情况下,清零输入端接高电平,当CP信号上升沿到来时,数据右移一位;Q0~Q7为并行数据输出端,同时Q7端也是串行数据输出端,对于串行输入的数据,最后进入的从Q0输出。CP为移位脉冲。最先输入的从Q7输出,
74LS164管脚图
74LS164真值表
2.4 显示部分
由于系统要显示的内容较简单,显示量不多,所以选用数码管既方便又经济。LED有共阴极和共阳极两种。如图4所示。
二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)a~g,另一个小数点为dp发光二极管。当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电阻。
LED数码管结构原理图
需说明的是当用数据口连接LED数码管a~dp引脚时,不同的连接方法,各段码位与显示段有不同的对应关系。通常数据口的D0位与a段连接,D1位与b段连接,„„D7位与dp段连接,如表3所示,表4为用于LED数码管显示的十六进制数和空白字符与P的显示段码。
LED显示段码
注:(1)本表所列各字符的显示段码均为小数点不亮的情况。
(2)“空白”字符即没有任何显示。
第3章 软件系统的设计
本次实训的软件部分由主程序,静态显示子程序,中断服务程序,时、分、秒加1子程序,时、分、秒单元清零子程序组成。
3.1 电子钟的主程序
本设计中,计时采用定时器T0中断完成,其余状态循环调用显示子程序,当端口开关按下时,转入相应功能程序。其主程序执行流程见下图。
主程序代码如下:
;主程序 使用资源:R3,6位显示的指针。
;R0,显示缓冲地址指针。
;DPTR,段码表指针。
START:MOV SP,#60H ;设置堆栈
MOV COUNT,#00H
MOV TMOD,#01H ;T0,方式1,定时100ms
MOV TH0,#3CH
MOV TL0,#0B0H
SETB EA ;开放T0中断
SETB ET0
SETB TR0 ;启动T0
MOV SCON,#00H ;串口方式0
MOV R3,#06H
MOV DPTR,#TABLE
MOV R0,#30H
MOV SEC,#0 ;秒,分,时清0
MOV MIN,#0
MOV HOUR,#0
MOV SECL,#00H ;显示缓冲区单元清0
MOV SECH,#00H
MOV MINL,#00H
MOV MINH,#00H
MOV HOURL,#00H
MOV HOURH,#00H
DISP1:MOV A,@R0 ;初始化显示00.00.00
MOVC A,@A+DPTR
MOV SBUF,A
WAIT1:JNB TI,WAIT1
CLR TI
INC R0
DJNZ R3,DISP1
MOV R0,#30H
MOV R3,#06H
LOOP:SJMP LOOP
3.2电子钟的显示子序
显示子程序代码如下:
;- - -显示子程序- - -
;入口参数:(R0)= 显示缓冲区地址
;(R3)=显示位数
;占用资源:ACC,DPTR,R0,R3
DISP:MOV A,@R0
MOVC A,@A+DPTR
CJNE R3,#2,A1
ANL A,#7FH
A1: MOV SBUF,A
WAIT:JNB TI,WAIT
CLR TI
INC R0
DJNZ R3,DISP
MOV R0,#30H
MOV R3,#06H
POP PSW
POP ACC
RETI
3.3定时器中断服务程序
定时器TO用于时间计时,定时溢出中断周期设为100ms,中断进入后,判断是否到1秒钟,到了,则调用加法子程序对秒进行加1处理,处理完后返回断点地址,同时判断秒是否到了60秒,到了则对秒单元清零,同时对分进行加1操作,同样对分进行判断,到60分则对分单元清零,同时对时加1,同样也对时进行判断,到24小时,则对时单元清零,最后中断返回。 T0中断服务程序执行流程见下图:
Y
中断服务程序如下:
;- - -中断服务子程序- - - -
TIMER0:PUSH ACC ;保护现场
PUSH PSW
MOV TH0,#3CH ;赋初值
MOV TL0,#0B0H
INC COUNT ;秒计时单元增1,10次到1秒
MOV A,COUNT
XRL A,#10 ;1秒到否?
JZ T0_0
T0_01:POP PSW ;恢复现场
POP ACC
RETI
T0_0:MOV COUNT,#00H ;1
INC SEC ;
MOV A,SEC
XRL A,#60 ;60
JZ T0_1
MOV A,SEC ;
MOV B,#10
DIV AB
MOV SECL,B ;
MOV SECH,A ;
LJMP DISP ;
T0_1:MOV SEC,#00H ;1
MOV SECL,#00H ;
MOV SECH,#00H ;
INC MIN ;秒到 秒单元增1 秒(1分钟)到否? 转换为BCD码 秒的个位存入SECL 秒的十位存入SECH 转显示子程序 分到,秒单元清0 秒个位清0 秒十位清0 分单元加1
MOV A,MIN
XRL A,#60
JZ T0_2 ;1分到否?
MOV A,MIN
MOV B,#10 ;分转换为BCD码
DIV AB
MOV MINL,B ;
MOV MINH,A ;
LJMP DISP ;
T0_2:MOV MIN,#00H ;1
MOV MINL,#00H ;
MOV MINH,#00H ;
INC HOUR ;
MOV A,HOUR
XRL A,#24
JZ T0_3 ;1
MOV A,HOUR ;
MOV B,#10
DIV AB
MOV HOURL,B ;
MOV HOURH,A ;存分的个位 存分的十位 转显示子程序 分到,分单元清0 分个位清0 分十位清0 时单元加1 小时到否? 时转换为BCD码 存时个位 存时十位
LJMP DISP ;转显示子程序
T0_3:MOV HOUR,#00H ;时单元清0
MOV HOURL,#00H ;时个位清0
MOV HOURH,#00H ;时十位清0
LJMP DISP ;转显示子程序
TABLE:DB 02H,9FH,24H,0CH,99H,48H,40H,1EH,01H,08H //0 1 2 3 4 5 6 7 8 9
END
第4章 设计心得
两个星期的课程设计结束了,通过本次课程设计的实践,从中我学到了很多东西且感悟良多,进一步学习、掌握单片机应用系统的有关知识,加深了解单片机的工作原理。也进一步掌握简单单片机应用系统的设计、制作、调试的方法。体会到了课本联系实际,学以至用,设计思想,实际动手能力都有所提高.
第一天一回来我们就去图书馆查阅相关资料,和组员一起确定流程图,方案可行后然后编写对应程序,我们做的是静态显示电子钟,然后画出硬件图并用protues进行硬件仿真可行后拟出元件清单。由于没有平PCB板,所以我们都用万能版做的,这就要求我们在设计布
线上面一定要合适,而且焊接也要过关,在焊接每个元件的时候一定要注意各个输入、输出引脚,因为每个引脚都是不一样的,只要让各个引脚互相对应,才能得出正确的结果,否则,出现任何一点小的误差就会对整个系统造成毁灭性的打击。我们用的是6个74LS164来驱动6个数码管的硬件上连线比较繁琐就更要注意了。
在老师的辛勤的指导下,最后我们顺利地完成了这次的课程设计。这次课程设计使我懂得了同学间的团结合作,懂得了理论联系实际,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是正确的理论,从而提高自己实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,并决心在以后的学习中加以改正,努力练习,提高自己的动手能力。平时必须加强对一些细小环节的重视,这样才能在真正程序设计时能做到正确快速的调试成功。
第5章 附 录
附录1:硬件电路原理图和连接图
附录2:电子钟程序清单
;时钟,计数初值00.00.00 静态显示,定时100ms
;- - -内存单元分配- - - SECL EQU 30H //秒 SECH EQU 31H MINL EQU 32H //分 MINH EQU 33H
HOURL EQU 34H //小时 HOURH EQU 35H SEC EQU 36H MIN EQU 37H HOUR EQU 38H
COUNT EQU 39H //计时到1秒;1s=10×100ms ORG 0000H LJMP START ORG 000BH LJMP TIMER0 ORG 0030H
;主程序。使用资源:R3,6位显示的指针。 ;R0,显示缓冲地址指针。 ;DPTR,段码表指针。 START:MOV SP,#60H ;设置堆栈 MOV COUNT,#00H
MOV TMOD,#01H ;T0,方式1,定时100ms
MOV TH0,#3CH MOV TL0,#0B0H
SETB EA ;开放T0中断 SETB ET0
SETB TR0 ;启动T0 MOV SCON,#00H ;串口方式0 MOV R3,#06H MOV DPTR,#TABLE MOV R0,#30H
MOV SEC,#0 ;秒,分,时清0 MOV MIN,#0 MOV HOUR,#0
MOV SECL,#00H ;显示缓冲区单元清0 MOV SECH,#00H MOV MINL,#00H MOV MINH,#00H MOV HOURL,#00H MOV HOURH,#00H
DISP1:MOV A,@R0 ;初始化显示00.00.00 MOVC A,@A+DPTR MOV SBUF,A
WAIT1:JNB TI,WAIT1 CLR TI INC R0 DJNZ R3,DISP1 MOV R0,#30H MOV R3,#06H
LOOP:SJMP LOOP
;- - -显示子程序- - -
;入口参数:(R0)= 显示缓冲区地址 ;(R3)=显示位数 ;占用资源:ACC,DPTR,R0,R3 DISP:MOV A,@R0 MOVC A,@A+DPTR CJNE R3,#2,A1 ANL A,#7FH A1: MOV SBUF,A WAIT:JNB TI,WAIT CLR TI INC R0 DJNZ R3,DISP MOV R0,#30H
MOV R3,#06H POP PSW POP ACC RETI
;- - -中断服务子程序- - - - TIMER0:PUSH ACC ;保护现场 PUSH PSW
MOV TH0,#3CH ;赋初值 MOV TL0,#0B0H
INC COUNT ;秒计时单元增1,10次到1秒 MOV A,COUNT
XRL A,#10 ;1秒到否? JZ T0_0
T0_01:POP PSW ;恢复现场 POP ACC RETI
T0_0:MOV COUNT,#00H ;1秒到 INC SEC ;秒单元增1 MOV A,SEC
XRL A,#60 ;60秒(1分钟)到否? JZ T0_1
MOV A,SEC ;转换为BCD码 MOV B,#10 DIV AB
MOV SECL,B ;秒的个位存入SECL MOV SECH,A ;秒的十位存入SECH LJMP DISP ;T0_1:MOV SEC,#00H ;1 MOV SECL,#00H ; MOV SECH,#00H ; INC MIN ; MOV A,MIN XRL A,#60
JZ T0_2 ;1 MOV A,MIN
MOV B,#10 ; DIV AB
MOV MINL,B ; MOV MINH,A ; LJMP DISP ;T0_2:MOV MIN,#00H ;1 MOV MINL,#00H ; MOV MINH,#00H ;转显示子程序 分到,秒单元清0 秒个位清0 秒十位清0 分单元加1 分到否? 分转换为BCD码 存分的个位 存分的十位 转显示子程序 分到,分单元清0 分个位清0 分十位清0
INC HOUR ;时单元加1 MOV A,HOUR XRL A,#24
JZ T0_3 ;1小时到否? MOV A,HOUR ;时转换为BCD码 MOV B,#10 DIV AB
MOV HOURL,B ;存时个位 MOV HOURH,A ;存时十位 LJMP DISP ;转显示子程序 T0_3:MOV HOUR,#00H ;时单元清0 MOV HOURL,#00H ;时个位清0 MOV HOURH,#00H ;时十位清0 LJMP DISP ;转显示子程序
TABLE:DB 02H,9FH,24H,0CH,99H,48H,40H,1EH,01H,08H //0 1 2 3 4 5 6 7 8 9 END
附录3:元器件清单
附录4:实训产品照片
【参考文献】
《单片机程序设计实例》 清华大学出版社
《单片机原理及接口技术 》高等教育出版社
《单片机课程设计实例指导》 北京航空航天大学出版社