单片机课设秒表时钟计时器的设计.docx
- 文档编号:8040056
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:26
- 大小:182.42KB
单片机课设秒表时钟计时器的设计.docx
《单片机课设秒表时钟计时器的设计.docx》由会员分享,可在线阅读,更多相关《单片机课设秒表时钟计时器的设计.docx(26页珍藏版)》请在冰豆网上搜索。
单片机课设秒表时钟计时器的设计
辽宁工学院
《单片机与接口技术》课程设计(论文)
题目:
秒表/时钟计时器的设计
院(系):
专业班级:
学号:
学生姓名:
指导教师:
教师职称:
起止时间:
课程设计(论文)任务及评语
院(系):
信息科学与工程学院教研室:
自动化
学号
学生姓名
专业班级
课程设计(论文)题目
秒表/时钟计时器的设计
课程设计(论文)任务
采用AT89C52单片机作控制器,LED数码管,实现显示时、分、秒,以24小时计时方式。
1、采用AT89C52单片机。
2、采用6位LED数码管。
3、显示时、分、秒,以24小时计时方式。
4、按键开关实现时分调整、秒表/时钟功能转换省电等功能。
5、LED数码管显示。
6、进行系统各功能模块电路的硬件设计;
7、进行整个系统的硬件电路图设计;
8、进行系统的流程图设计与软件的编写;
9、撰写、打印设计说明书。
指导教师评语及成绩
成绩:
指导教师签字:
年月日
第1章方案论证1
第2章硬件设计3
2.1秒表/时钟计时器的总体设计3
2.2AT89C52单片机最小系统4
2.374LS244芯片说明6
2.4LED显示器的显示方法及其与单片机的接口6
2.5电源电路的设计8
第3章软件设计9
3.1主程序9
3.2显示子程序9
3.3定时器T0中断服务程序10
3.4T1中断服务程序10
3.5调时功能程序11
3.6整点响程序11
3.7时钟/秒表功能程序11
3.8程序清单11
第4章设计总结21
参考文献22
第1章方案论证
现今的计时器通常只能通过启/停按键实现断点计时的功能,即通过启/停按键来记录一段时间。
这种计时器查看的时间只能为计时结束时刻。
实际的应用中往往需要在不影响正常计时的基础上,能查看记录过程中的某些点的时间。
本课设即针对此问题,设计了一种能通过按键方式查看记录过程中任一时刻值的计时器。
这种计时器在查看中间值时不会影响整个记录过程,并且能把相应数据送入存储模块及显示模块,以便查看。
本系统采用AT89C52单片机作控制器,LED数码管,实现显示时、分、秒,以24小时计时方式。
为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法。
由于静态显示法需要数据锁存器等硬件,结构较为复杂,考虑时钟显示只有六位,且系统没有其他复杂的处理任务,所以采用动态扫描法实现LED的显示。
单片机采用AT89C52系列,有足够的空余硬件资源实现其它的扩充功能。
秒表/时钟计时器的总体设计框图如下图所示。
图1.1系统总体设计框图
系统主要实现如下功能:
1.时钟功能
对于时钟功能,需要在数码管上显示小时、分钟和秒钟,因此,可以在内部存储空间分别定义它们的显示缓存空间,来存放小时、分钟和秒钟的BCD码,各2个字节。
由于时钟是不能停止的,因此需要采用内部定时器自动计时,并使用定时器中断处理程序来定时进行时间数值的刷新。
52单片机的2个定时器都具有16位定时器的
工作模式。
当晶振为12MHz时,16位定时器的最大定时值为65.536mS;要达到1秒钟,可以采用两种方法:
采用一个定时器定时与软件计数相结合的方法;或者采用两个定时器级联的方法。
由于秒表在计时功能时也需要用到1个定时器,因此,我们采用第一个方法,只使用1个定时器,例如使用T0。
为了达到较为准确的计时,使T0的溢出时间为50ms,使用一个字节作为软件计数器ST,计数值为20。
定时器的中断处理程序对ST进行减1操作,当ST为0时,1秒到达,此时更新存放小时、分钟、秒钟的显示缓存区。
2.计时功能
当秒表用作计时功能时,也需要一个定时器进行10MS的定时,在本例中使用单片机的TIMER1。
在TIMER1的中断处理程序中对SS和ss的缓存空间进行更新,与上面类似。
3.功能按键
再看按键的处理。
这3个键可以采用中断的方法,也可以采用查询的方法来识别。
对于A、B键,主要功能在于功能切换和数值复位,对于时间的要求不是很严格,而C键主要用于时间的锁定,需要比较准确的控制。
因此可以考虑,对A、B键采用查询的方式,而对于C键采用外部中断。
4.中断嵌套和控制
现在在我的方案中有3个中断,T0、T1中断和外部中断INT0。
这3个中断的特点是:
T0的工作是连续的,可以在误差范围内可以被打断但不可以停止;T1的工作同样可以在误差范围内被打断,但可以被INT0停止;INT0是用来启动或停止T1的。
第2章硬件设计
2.1秒表/时钟计时器的总体设计
秒表/时钟计时器的硬件电路设计如图2.1所示。
图2.1总体硬件设计图
采用AT89C52单片机,数字显示采用共阳六段LED显示器,P0口输出段码数据,P2.0-P2.5口作为列扫描输出,P1.0、P1.1、P1.3口接三个开关按钮,用以实现调时及秒表/时钟功能切换设置。
为了给共阳LED数码管提供驱动电压,采用三极管作电源驱动输出。
采用12MHZ晶振,有利于提高系统计时的精确性。
对于A、B键,主要功能在于功能切换和数值复位,对于时间的要求不是很严格,而C键主要用于时间的锁定,需要比较准确的控制。
因此可以考虑,对A、B键采用查询的方式,而对于C键采用外部中断。
2.2AT89C52单片机最小系统
最小系统的核心是AT89C52单片机,其内部带有8KB的FLASHROM,256B片内RAM,基本上能满足最小系统的设计要求。
如接上时钟电路、复位电路即可加电工作。
如图2.2所示。
图2.2单片机最小系统图
AT89C52单片机各引脚的功能和应用介绍如下:
1. 输入/输出引脚
(1)P0口(39~32脚):
P0.0~P0.7统称为P0口。
在不接片外存储器与不扩展I/O口时,可作为准双向输入/输出口。
在接有片外存储器或扩展I/O口时,P0口分时复用为低8位地址总线和双向数据总线。
(2)P1口(1~8脚):
P1.0~P1.7统称为P1口,可作为准双向I/O口使用。
对于52子系列,P1.0与P1.1还有第二功能:
P1.0可用作定时器/计数器2的计数脉冲输入端T2,P1.1可用作定时器/计数器2的外部控制端T2EX。
(3)P2口(21~28脚):
P2.0~P2.7统称为P2口,一般可作为准双向I/O口使用;在接有片外存储器或扩展I/O口且寻址范围超过256字节时,P2口用作高8位地址总线
引脚功能如下:
P3.0 RXD 串行口输入
P3.1 TXD 串行口输出端
P3.2 INT0 外部中断0请求输入端,低电平有效
P3.3 INT1外部中断1请求输入端,低电平有效
P3.4 T0 定时器/计数器0计数脉冲输入端
P3.5 T1 定时器/计数器1计数脉冲输入端
P3.6 WR 外部数据存储器写选通信号输入端,低电平有效
P3.7 RD 外部数据存储器读选通信号输入端,低电平有效
(4)P3口(10~17脚):
P3.0~P3.7统称为P3口。
除作为准双向I/O口使用外,还可以将每一位用于第二功能,而且P3口的每一条引脚均可以独立定义为第一功能的输入输出或第三功能。
2.控制线
(1)ALE/PROG(30脚):
地址锁存有效信号输入端。
ALE在每个机器周期内输出两个脉冲。
在访问片外程序存储器期间,下降沿用于控制锁存P0输出的低8位地址;在不访问片外程序存储器期间,可作为对外输出的时钟脉冲或用于定时目的。
但要注意,在访问片外数据存储器期间,ALE脉冲会跳空一个,此时作为时钟输出就不妥了。
对于片内含有EPROM的机型,在编程期间,该引脚用作编程脉冲PROG的输入端。
(2)PSEN(29脚):
片外程序存储器读选通信号输出端,低电平有效。
当从外部程序存储器读取指令或常数期间,每个机器周期该信号两次有效,以通过数据总线P0口读回指令或常数。
在访问片外数据存储器期间,PSEN信号将不再出现。
(3)RST/VPD引脚(9脚):
RST即为RESET,VPD为备用电源。
该引脚为单片机的上电复位或掉电保护端。
当单片机振荡器工作时,该引脚上出现持续两个机器周期的高电平,就可实现复位操作,使单片机回复到初始状态。
上电时,考虑到振荡器有一定的起振时间,该引脚上高电平必须持续10ms以上才能保证有效复位。
当Vcc发生故障,降低到低电平规定值或掉电时,该引脚可接上备用电源VPD(+5V)为内部RAM供电,以保证RAM中的数据不丢失。
(4)EA/Vpp(31脚):
EA为片外程序存储器选用端。
该引脚有效(低电平)时,只选用片外程序存储器,否则单片机上电或复位后选用片内程序存储器。
对于片内含有EPROM的机型,在编程期间,此引脚用作21V编程电源Vpp的输入端。
2.374LS244芯片说明
开关量输入的扩展经常使用的芯片是74LS244/74LS245/74LS240等;这些芯片的特点是三态门,可以把多个芯片的输出,并联在一起而不会互相影响;通过138、139、153等译码选通芯片,把RD/WR/地址的高位信号(高3位或者高4位,看单片机系统中的芯片的数量)接到译码芯片,把译码芯片的输出接到锁存器的锁存输入,或者缓冲器的选通输入。
图2.374LS244引脚
244内部包含8个单向三态门,分为两组,同时作为总线芯片的另外一个特点是驱动能力加强了,可以提供比较大的输出电流,所以经常用来直接驱动光耦、发光管等,也可以用于驱动微型的继电器。
2.4LED显示器的显示方法及其与单片机的接口
在单片机系统中,通常用LED数码显示器来显示各种数字或符号。
由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。
LED显示器又称数码管,八段LED显示器由8个发光二极管组成。
其中7个发光二极管构成字型“8”的各个笔画段,另一个小数点为dp发光二极管。
LED显示器有两种不同的形式:
一种是发光二极管的阳极都连在一起的,称之为共阳极LED显示器;另一种是发光二极管的阴极都连在一起的,称之为共阴极LED显示器。
如图2.4所示。
共阴和共阳结构的LED显示器各笔划段名和安排位置是相同的。
当二极管导通时,相应的笔划段发亮,由发亮的笔划段组合而显示各种字符。
8个笔划段hgfedcba对应于一个字节(8位)的D7D6D5D4D3D2D1D0,于是用8位二进制码就可以表示欲显示字符的字型代码。
例如,对于共阴LED显示器,当公共阴极接地(为零电平),而阳极hgfedcba各段为时,显示器显示"P"字符,即对于共阴极LED显示器,“P”字符的字形码是73H。
如果是共阳LED显示器,公共阳极接高电平,显示“P”字符的字形代码应为(8CH)。
图2.4LED显示器及工作原理
LED显示方式有动态显示和静态显示两种方式。
本系统采用动态扫描显示接口电路,动态显示接口电路是把所有显示器的8个笔划段a-h同名端连在一起,而每一个显示器的公共极COM各自独立地受I/O线控制。
CPU向字段输出口送出字型码时,所有显示器接收到相同的字型码,但究竟是哪个显示器亮,则取决于COM端。
也就是说我们可以采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。
在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
数码管采用共阳极接法,将各位数码管的段选线并联在一起,由一片74HC595八位输出口控制,图中增加了一个驱动器,用以提高信号驱动能力。
共阳极点COM接到另一片74HC595八位输出口。
单片机通过口线把要显示的数据串行传给74HC595,由74HC595把串行的数据转换成并行数据,分别控制数码管的段选线a-h同名端和位选线COM端。
2.5电源电路的设计
在系统中,电源的设计是相当重要的一部分。
因为在设计过程中我们需要考虑功率、输出电压及抗干扰等因素的影响,我们选定的电源应满足整个系统顺利运行的要求。
本系统采用+5V直流稳压电源做为工作电源。
+5V直流稳压的工作电路,传统方式采用分立元件构成,目前均采用集成三端稳压器7805构成。
集成三端稳压器因其稳压精度高、工作稳定可靠、外围电路简单、容易设计和制作、体积小、重量轻、成本低、维修简单等优点,所以在各种电源电路中得到了普遍的应用。
7805集成三端稳压器的典型应用电路如图所示,这是一个输出+5V直流电压的稳压电路。
IC采用集成三端稳压器7805,C2、C4分别为输入端和输出端滤波电容,RL为负载电阻。
PBU605是由4个二极管构成的整流电路,用来稳定输入的12V电压。
图2.5电源电路
变压器TF将交流电网220V的电压V1变为所需要的交流电压V2,然后通过全波整流将交流电压V2变成脉动的直流电压。
由于此脉动的直流电压还含有较大的纹波,必须通过滤波电容C4加以滤除,从而得到平滑的直流电压Vi。
但这样的电压还随电网电压波动(一般有±10%左右的波动)、负载和温度的变化而变化。
第3章软件设计
3.1主程序
本设计中,计时采用定时器T0中断完成,其余状态循环调用显示子程序,当端口开关按下时,转入相应功能程序。
其主程序执行流程见下图。
3.2显示子程序
数码管显示的数据存放在内存单元70H-75H中。
其中70H-71H存放秒数据,72H-73H存放分数据,74H-75H存放时数据,每一地址单元内均为十进制BCD码。
由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。
显示时,先取出70H-75H某一地址中的数据,然后查得对应的显示用段码,并从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。
为了显示小数点及“-”、“A”等特殊字符,在显示班级及计时时采用不同的显示子程序。
3.3定时器T0中断服务程序
定时器TO用于时间计时,定时溢出中断周期可分别设为50ms和10ms.中断进入后,现判断是时钟计时还是秒表计时,时钟计时累计中断20次(即1s)时,对秒计数单元进行加1操作,秒表计时每10ms进行加1操作。
时钟计数单元地址分别在70H-71H(秒)、76H-77H(分)和78H-79H(时),最大计时值为23时59分59秒。
而秒表计数单元地址也在70H-71H(0.01毫秒)、76H-77H(秒)和78H-79H(分),最大计时值为99分59.99秒。
7AH单元内存放“熄灭符”数据(#0AH)。
在计数单元中采用十进制BCD码计数,满60(秒表功能时有100)进位,T0中断服务程序执行流程见下图
图3.2
定时器T0、T1溢出周期为50ms(10ms),T0为秒计数用,T1为调整时闪烁用;P1.0,P1.1,P1.2为调整按钮,P0口为字符输出口,采用共阳显示管。
3.4T1中断服务程序
T1中断服务程序用于指示调整单元数字的亮闪。
在时间调整状态下,每过0.3s,将对应单元的显示数据换成“熄灭符”数据(#0AH)。
这样在调整时间时,对应调整单元的显示数据会间隔闪亮。
3.5调时功能程序
调时功能程序的设计方法时:
按下P1.0口按键,若按下时间短于1s,则进入省电状态(数码管不亮,时钟不停);否则进入调分状态,等待操作,此时计时器停止走动。
当再按下按钮时,若按下时间短于0.5s,则时间加1分;若按下时间长于0.5s,则进入小时调整状态。
在小时调整状态下,当按键按下的时间长于0.5s,退出调整状态,时钟继续走动。
P1.1口按键在调时状态下可实现减1功能。
3.6整点响程序
如果在时钟状态下,如果是整点那么就用P3.2这个引脚来控制蜂鸣器。
3.7时钟/秒表功能程序
在正常计时状态下,若按下P1.1口按键,则进行时钟/秒表功能的转换,转换后计时从开始。
当按下P1.2口的按键时,可实现清0、计时启动、暂停功能。
3.8程序清单
/*AT89C52秒表/时钟程序*/
/*定时器T0、T1溢出周期为50ms(10ms),T0为秒计数用,T1为调整时闪烁用*/
/*P1.0P1.1P1.2为字符输出口,采用共阳显示管。
*/
/*主程序*/
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
MOV TL1,#0B0H/*50ms定时初值(T1闪烁定时用)*/
MOV TH1,#3CH/*50ms定时初值*/
SETB EA/*总中断开放*/
SETB ET0/*允许T0中断*/
SETB TR0
MOV R4,#14H
START1:
LCALL DISPLAY /*调用显示子程序*/
JNB P1.0,SETMM1/*P1.0口为0时,转时间调整程序*/
JNBP1.1,FUNSS/*秒表功能,P1.1按键调时时作减1操作*/
JNBP1.2,FUNPT/*STOP、PUSE、CLR*/
SJMPSTART1/*P1.0口为1时跳回START1*/
SETMM1:
LJMPSETMM/*转到时间调整程序SETMM*/
FUNSS:
LCALL DS20MS
JB P1.1,START1
WAIT11:
JNB P1.1,WAIT11
CPL 03H
MOV 70H,#00H
MOV 71H,#00H
MOV 76H,#00H
MOV 77H,#00H
MOV 78H,#00H
MOV 79H,#00H
AJMP START1
ACALLZDBS
FUNPT:
LCALL DS20MS
JB P1.2,START1
WAIT22:
JNB P1.2,WAIT21
CLR ET0
CLR TR0
WAIT33:
JB P1.2,WAIT31
LCALL DS20MS
JB P1.2,WAIT33
WAIT66:
JNB P1.2,WAIT61/*清70~79H共10个内存单元*/
MOV R0,#70H
MOV R7,#0AH
CLEARP:
MOV @R0,00H
INC R0
DJNZ R7,CLEARP
WAIT44:
JBP1.2,WAIT41
LCALLDS20MS
JBP1.2,WAIT44
WAIT55:
JNBP1.2,WAIT51
SETBET0
SETBTR0
AJMPSTART1
WAIT21:
LCALLDISPLAY
AJMPWAIT22
WAIT31:
LCALLDISPLAY
AJMPWAIT33
WAIT41:
LCALLDISPLAY
AJMPWAIT44
WAIT51:
LCALLDISPLAY
AJMPWAIT55
WAIT61:
LCALLDISPLAY
AJMPWAIT66
/*中断入口程序*/
ORG 0000H;/*程序执行开始地址*/
LJMPSTART;/*跳到标号START执行*/
ORG 0003H;/*外部中断0中断程序入口
RETI /*外部中断0中断返回*/
ORG 000BH/*定时器T0中断程序入口*/
LJMP INTT0
ORG 0013H/*外部中断1中断程序入口*/
TETI/*外部中断1中断返回*/
ORG 001BH
LJMP INTT1/*跳至INTT1执行*/
ORG 0023H/*串行中断程序入口地址*/
RETI
/*T0中断服务程序*/
INTT0:
PUSH ACC/*累加器入栈保护*/
PUSH PSW /*状态字入栈保护*/
CLR ET0/*关T0中断允许*/
CLR TR0/*关闭定时器T0*/
JB 03H,FSS/*标志为1转秒表处理程序(10ms定时)*/
MOV A,#0B7H/*中断响应时间同步修正*/
ADD A,TL0/*低8位初值修正*/
MOV TL0,A/*重装初值(低8位修正值)*/
MOV A,#3CH/*高8位初值修正*/
ADCC A,TH0
MOV HT0,A/*重装初值(高8位修正值)*/
SETB TR0/*开始定时器T0*/
DJNZ R4,OUTT0/*20次中断未到中断退出*/
ADDSS:
MOV R4,#14H/*20次中断到(1s)重赋初值*/
MOV R0,#71H /*指向秒计时单元(71H~72H)
ACALL ADD1/*调用加1程序(加1s操作)
MOV A,R3
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/*短于60min时中断退出*/
ACALL LCR0/*长与或者等于60s时对秒计秒单元清零*/
MOV R0,#79H/*指向小时计时单元(78H~79H)*/
ACALL ADD1/*小时计时单元加1h*/
MOV A,R3/*时数据放入A*/
CLR C /*清进位标志*/
JB 03H,OUTT0/*秒表时最大数为99*/
CJNE A,#24H,HOUR
HOUR:
JC OUTT0/*短于24h时中断退出*/
ACALL CLR0/*长与或者等于24h时对秒计时单元清零*/
OUTT0:
MOV 72H,76H/*中断退出时将分、时计时单元数据移
MOV 73H,77H入对应显示单元*/
MOV 74H,78H
MOV 75H,79H
POP PSW /*恢复状态字(出栈)*/
POP ACC /*恢复累加器*/
SETB ET0/*开放T0中断*/
RETI/*中断返回*/
/*秒表计时程序(10min加1),低2位为0.1、0.01秒,中间2位为秒,最高2位为分。
*/
最大计数值为99分59.99秒
FSS:
MOVA,#0F7H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 秒表 时钟 计时器 设计