单片机的数字钟制作.docx
《单片机的数字钟制作.docx》由会员分享,可在线阅读,更多相关《单片机的数字钟制作.docx(24页珍藏版)》请在冰豆网上搜索。
单片机的数字钟制作
课题摘要
摘要:
近年来,随着电子产品的发展,人们对数字时钟的要求越来越高,本文针对人们的这一需求,设计了一种有单片机控制的智能化数字时钟,功能强大,界面友好,更好的满足了人们对它的智能化要求。
时钟已不仅仅被看成一种用来显示时间的工具,在很多实际应用中它还需要能够实现更多其它的功能。
高精度、多功能、小体积、低功耗,是现代时钟发展的趋势。
在这种趋势下,时钟的数字化、多功能化已经成为现代时钟生产研究的主导设计方向。
本文正是基于这种设计方向,以单片机为控制核心,设计制作一个符合指标要求的多功能数字时钟。
本设计基于单片机技术原理,以单片机芯片AT89C51作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个多功能数字时钟系统。
该时钟系统主要由时钟模块、闹钟模块、环境温度检测模块、液晶显示模块、键盘控制模块以及信号提示模块组成。
系统具有简单清晰的操作界面,能在4V~7V直流电源下正常工作。
能够准确显示时间(显示格式为时时:
分分:
秒秒,24小时制),可随时进行时间调整,具有闹钟时间设置、闹钟开/关、止闹功能,能够对时钟所在的环境温度进行测量并显示。
设计以硬件软件化为指导思想,充分发挥单片机功能,大部分功能通过软件编程来实现,电路简单明了,系统稳定性高。
同时,该时钟系统还具有功耗小、成本低的特点,具有很强的实用性。
由于系统所用元器件较少,单片机所被占用的I/O口不多,因此系统具有一定的可扩展性。
%
关键词:
数字钟单片机at89c51
*
?
、
>
【
1.引言
现在是一个知识爆炸的新时代。
新产品、新技术层出不穷,电子技术的发展更是日新月异。
可以毫不夸张的说,电子技术的应用无处不在,电子技术正在不断地改变我们的生活,改变着我们的世界。
在这快速发展的年代,时间对人们来说是越来越宝贵,在快节奏的生活时,人们往往忘记了时间,一旦遇到重要的事情而忘记了时间,这将会带来很大的损失。
因此我们需要一个定时系统来提醒这些忙碌的人。
数字化的钟表给人们带来了极大的方便。
近些年,随着科技的发展和社会的进步,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。
多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。
单片机在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序都非常熟悉。
但是却很少知道它的内部结构以及工作原理。
由单片机作为数字钟的核心控制器,可以通过它的时钟信号进行计时实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。
通过键盘可以进行定时、校时功能。
输出设备显示器可以用液晶显示技术和数码管显示技术。
系统方案的确定
单片机芯片作为控制系统的核心部件,它除了具备微机CPU的数值计算功能外,还具有灵活强大的控制功能,以便实时检测系统的输入量、控制系统的输出量,实现自动控制。
在本次设计中采用单片机技术来实现数字钟的功能。
方案的设计可以从以下几个方面来确定。
微处理器的选择,AT89S51、52是2003年ATMEL推出的新型品种,除了完全兼容8051外,还多了ISP编程和看门狗功能。
但是AT89S52的存储器容量比AT89S51的大。
在本次设计中采用AT89S52单片机;显示电路的设计,随着科技的发展,液晶显示的使用越来越方便,已被普遍的使用。
由于液晶显示与驱动都集成在一个芯片上,因此使用起来很方便。
在这里采用液晶显示;校时和定时电路的设计;实时控制电路是时钟电路的一个重要组成部分,采用的是一个时钟芯片,单片机从中读取数据送到显示器上显示,从而实现数字钟的功能;还有一些其他控制电路如复位电路、时钟电路等。
通过这些控制电路的连接构成了完整的电路,
2.设计目的与要求
#
设计目的
熟悉集成电路的引脚安排.
掌握各芯片的逻辑功能及使用方法.
了解面包板结构及其接线方法.
了解数字钟的组成及工作原理.
熟悉数字钟的设计与制作.
设计指标
时间以24小时为一个周期;
显示时,分,秒;
有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间;
~
计时过程具有报时功能,当时间到达整点前5秒进行蜂鸣报时;
为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号.
设计要求
画出电路原理图(或仿真电路图);
元器件及参数选择;
电路仿真与调试;
PCB文件生成与打印输出.
制作要求
自行装配和调试,并能发现问题和解决问题
编写设计报告
!
写出设计与制作的全过程,附上有关资料和图纸,有心得体会.设计原理及其框图
3.数字钟的构成
数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路.由于计数的起始时间不可能与标准时间(如北京时间)一致,故需要在电路上加一个校时电路,同时标准的1HZ时间信号必须做到准确稳定.通常使用石英晶体振荡器电路构成数字钟.图3-0所示为数字钟的一般构成框图.
图3-0数字钟的组成框图
晶体振荡器电路
晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定.不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器电路.
'
图3-1晶体振荡器电路
按键模块
本系统采用的是独立式键盘结构,每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。
此软件是采用查询式结构,首先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。
四个按键的功能:
S1键用于电子钟启动/调整;S2键用于开启闹铃功能;S3键用于调时,分和秒,没按一次+1;S4键用于调时,分和秒,没按一次-1
图3-2按键模块
~
复位电路
复位电路是—种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。
上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。
为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。
"
图3-3复位电路
显示模块
采用的是动态扫描显示电路,将显示各位的所有相同字段线连在一起,每一位的a段连在一起,b段连在一起,…,g段连在一起,共八段,由一个8位I/0口控制,而每一位的公共端由另一个I/0控制。
它比静态显示电路更加优越,它占用的I/0端线少;电路简单,硬件成本低;CPU要定时扫描刷新显示。
由于5伏的电压不能驱动数码管,采用三极管上
拉电阻集电极输出模式,使电压变大。
驱动数码管。
图3-4显示模块
蜂鸣模块
《
蜂鸣模块是由at98c51的口接上一个限流电阻,一个npn三极管和蜂鸣器组成。
三极管的的发射极接地,蜂鸣器的正极接到电源vcc。
当口出现一个低电平出发,使蜂鸣器正常工作。
图3-5蜂鸣模块
4.单片机介绍
89C52芯片管脚功能
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
·
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。
初始化后,程序计数器PC指向0000H,P0-P3输出
口全部为高电平,堆栈指钟写入07H,其它专用寄存器被清“0”。
RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。
然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
,
XTAL2:
来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89S51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
,
图4-1AT89C51单片机示意图
)
特殊功能寄存器
初始态
特殊功能寄存器
初始态
ACC
00H
B
00H
-
PSW
00H
SP
07H
DPH
00H
TH0
00H
DPL
00H
~
TL0
00H
IP
xxx00000B
TH1
00H
IE
0xx00000B
TL1
00H
?
TMOD
00H
TCON
00H
SCON
xxxxxxxxB
SBUF
00H
P0-P3
1111111B
~
PCON
0xxxxxxxB
表4-18051的初始态
程序设计流程图
图4-2程序设计流程图
元器件清单
/
表4-3元器件清单
5.调试及性能分析
硬件调试
硬件调试时可先检查印刷电路板及焊接的质量情况,在检查无误后可通电检查LED显示器的点亮情况。
若亮度不理想,可以调整P0口的电阻值大小,一般情况下取200Ω~1000Ω之间,可以获得满意的亮度效果。
实验室制作时可结合示波器测试晶振及P0、P1端口的波形情况进行综合硬件测试分析。
软件调试
;
软件调试用KeilC51编译器,源程序编译及仿真调试应分段或子函数为单位一个个地进行,最后可结合硬件实时运行调试。
性能分析
按照设计程序分析,LED显示器动态扫描频率约为167Hz,实际使用观察时完全没有闪烁,实际计时时间精度较高,可满足一般场合的应用需要。
控制源程序清
!
6.完整电路图
7.完整PCB
8.结论
这个电路结构决定LED采用共阳极的数码管,可以采用LQ5101BS普通的发光二极管,驱动三极管可采用易得的2SA1015和2SC1815等型号,当然也可使用象S9012,S9013,S9014,2N5401,2N5555等小功率三极管,其它器件没有特殊要求。
为便于实验,单片机AT89C51可采用DIP20P插座,程序编制好后,调试无错,即可烧写到AT89C51中,值得一提的是,AT89C51是Falsh程序存储器,程序可反复擦写,对于做实验是非常方便的。
)
单片机的定时功能也是通过计数器的计数来实现的,此时的计数脉冲来自单片机的内部,即每个机器周期产生一个计数脉冲,也就是每经过1个机器周期的时间,计数器加1。
如果MCS-51采用的12MHz晶体,则计数频率为1MHz,即每过1us的时间计数器加1。
这样可以根据计数值计算出定时时间,也可以根据定时时间的要求计算出计数器的初值。
MCS-51单片机的定时器/计数器具有4种工作方式,其控制字均在相应的特殊功能寄存器中,通过对特殊功能寄存器的编程,可以方便的选择定时器/计数器两种工作模式和4种工作方式。
定时器/计数器工作在方式0时,为13位的计数器,由TLX(X=0、1)的低5位和THX的高8位所构成。
TLX低5位溢出则向THX进位,THX计数溢出则置位TCON中的溢出标志位TFX.
当定时器/计数器工作于方式1,为16位的计数器。
本设计师单片机多功能定时器,所以MCS-51内部的定时器/计数器被选定为定时器工作模式,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲使计数器增1。
。
9.AT89C51单片机显示时钟程序清单
ORG0000H;主程序起始地址
LJMPMAIN;跳转至主程序
ORG000BH;跳转至主程序
LJMPINTT0;跳转至主程序
ORG0030H;定位起始地址
MAIN:
MOVSP,#75H;设置堆栈在75H
MOV21H,#0;21H为功能状态标志单元,
;0为时钟运行态,1为秒调节,2为分调节,3为时调节
)
CLR00H;按键消抖标志初始化为0
CLR02H;02H为显示闪烁标志,1为熄灭,0点亮
MOVR5,#100;计数器赋初始值100
MOVR6,#50;计数器
MOVTMOD,#01H;T0为方式1
MOVTH0,#0D8H;T0赋初值(10ms,fosc=12MHz)
MOVTL0,#0F0H;
MOV6DH,#23;将立即数23送到6DH
MOV6EH,#59;将立即数59送到6EH
MOV6FH,#58;将立即数58送到6FH
(
SETBEA;CPU开中断
SETBET0;T0开中断
SETBTR0;T0启动运行
HERE:
SJMPHERE;等待中断
DISP:
MOVDPTR,#TAB;置共阳字段码首地址
MOVA,70H;读显示数
MOVCA,@A+DPTR;读十位显示符
MOVP0,A;输出至P0
CLR;清零
LCALLD1MS;调用1MS显示子程序
^
SETB;置1
MOVA,71H;读显示数
MOVCA,@A+DPTR;读十位显示符
JB02H,NL;判断标志位为0吗
ANLA,#0EFH;点亮DP
NL:
MOVP0,A;熄灭
CLR;清零
LCALLD1MS;调用1MS显示子程序
SETB;置1
MOVDPTR,#TAB2;读表2
》
MOVA,72H;读显示数
MOVCA,@A+DPTR;读十位显示符
JB02H,NL1;判断标志位为0吗
ANLA,#0FBH;点亮DP
NL1:
MOVP0,A;熄灭
CLR;P25清零
LCALLD1MS;调用1MS显示子程序
SETB;置1
MOVDPTR,#TAB;读表2
MOVA,73H;读显示数
?
MOVCA,@A+DPTR;读十位显示符
MOVP0,A;输出至P0
CLR;清零
LCALLD1MS;调用1MS显示子程序
SETB;置1
RET;推出循环
TAB:
DB014H,0B7H,051H,031H,0B2H
DB038H,018H,0B5H,010H,030H,0FFH;表1
TAB2:
DB014H,0B7H,045H,025H,0A6H
DB02CH,00CH,0B5H,004H,014H,0FFH;表2
;
;fosc=12MHz,1T=1us,1ms=1000T;
D1MS:
MOVR7,#249;1T
DIMSLP:
NOP;2TX249=498T
NOP;
DJNZR7,DIMSLP;2TX249=498T
NOP;1T
RET;2T
INTT0:
MOVTH0,#0D8H;T0重赋初值
MOVTL0,#0F0H;重复初值
DJNZR6,INT01;判断INT01为0
,
MOVR6,#50;计数器赋出值50
CPL02H;取反
INT01:
DJNZR5,INTRET;R5减1等于0,转移,不是,顺序执行
MOVR5,#100;重赋初值100
MOVA,21H;将21H单元数送入累加器A
INC6FH;6FH单元加1
MOVA,6FH;将6FH数送入累加器A
CJNEA,#60,INTRET;判断累加器A中的数等于60
MOV6FH,#0;6FH清0
INC6EH;6EH单元加1
!
MOVA,6EH;将6EH数送入累加器A
CJNEA,#60,INTRET;判断累加器A中的数等于23
MOV6EH,#0;6EH清0
INC6DH;6DH加1
MOVA,6DH;将6DH的数据送入累加器
CJNEA,#24,INTRET;判断累加器A中的数等于23
MOV6DH,#0;清0,
INTRET:
LCALLKEYA;调用键盘
LCALLBIN2BCD;调用2位十进制数显示模块
LCALLXS_FL;调用闪烁模块
.
LCALLDISP;调用显示模块
RETI;结束中断
;=====================================================================
KEYA:
ORLP2,#00FH;置~为输入状态
MOVA,P2;读键值,键闭合相应位为0
CPLA;取反,键闭合相应位为1
ANLA,#00FH;屏蔽高4位,保留有键值信息的低4位
JZGRET1;全0,无键闭合,返回
JB00H,KEYAP;非全0,有键闭合
SETB00H;标志位,为1说明有键操作
:
SJMPGRET;循环
GRET1:
CLR01H;按键功能响应标志
GRET:
RET;结束
KEYAP:
JB,KA1;转KA1键功能程序
JB,KA2;转KA2键功能程序
JB,KA0;转KA0键功能程序
SJMPGRET;继续判断
;====================================================================
KA0:
JB01H,N3;判断标志位等于3
INC21H;21H单元加1
}
MOVA,21H;将21H单元送入累加器A
CJNEA,#3,N3;判断等于3,不等于3
MOV21H,#0;21H单元清0
N3:
CLR00H;标志位,0为下一次按键操作做好准备
SETB01H;按键功能响应标志
SJMPGRET;退出
;====================================================================
KA1:
JB01H,KA1END;转01H标志响应
MOVA,21H;将21H标志送入累加器A
CJNEA,#0,N0;判断键为0,不等于0
!
SJMPKA1END;退出响应
N0:
CJNEA,#1,N1;判断等于1,不等于1
INC6EH;6EH单元加1
MOVA,6EH;将6FH单元送入累加器A
CJNEA,#60,KA1END;判断等于60,不等于60
MOV6EH,#0;6EH清0
SJMPKA1END;退出响应
N1:
CJNEA,#2,KA1END;判断等于2,不等于2
INC6DH;6EH单元加1
MOVA,6DH;将6FH单元送入累加器A
!
CJNEA,#24,KA1END;判断等于60,不等于60
MOV6DH,#0;6DH清0
KA1END:
CLR00H;标志位,0为下一次按键操作做好准备
SETB01H;按键功能响应