基于51单片机的数字时钟设计文档格式.docx
《基于51单片机的数字时钟设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机的数字时钟设计文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏.
采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示.
方案三:
采用LED数码管进行静态显示,LED数码管价格适中,对于显示数字最合适,而且采用静态显示法和单片机连接时,占用的单片机口线少(采用十二小时制显示,以P0、P1、P2口分别作为分、十分、小时位显示段码输出,而十小时位只需要显示1或者不显示,故只要用到P3口的两个引脚P3.1和P3.2作为显示段码输出即可)。
共阳极8段数码管引脚图
所以采用了LED数码管作为显示。
2.3时钟芯片的选择方案和论证
采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,精度也较高,工作电压2.5V~5.5V范围内,功耗也较低,但价格比较贵,且目前市场上采购不到
直接采用单片机定时计数器提供秒信号,使用程序实现时、分、秒计数。
采用此种方案实现虽然有一定的时间误差,但可减少少芯片的使用,节约成本,易于实现,符合初学者实验选用。
所以采用方案二。
综上各方案所述,对此次作品的方案选定:
采用AT89S51作为主控制系统;
通过软件编程采用定时器定时实现秒.分.时计时;
LED数码管静态显示时间。
三系统的硬件设计和实现
3.1电路设计框图
3.2主要单元电路的设计
3.2.1晶体振荡电路
晶体振荡器电路给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定。
不管是指针式的电子钟还是数字显示的电子钟都使用了晶体荡器电路。
本设计中的震荡电路如图3.1所示
图3.1晶振电路
3.2.2分频器电路
分频器电路将高频方波信号经分频后得到1Hz的方波信号供秒计数器进行计数,分频器实际上也就是计数器。
3.2.3时间计数器电路
时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器而根据设计要求,时个位和时十位计数器为12进制计数器。
3.2.4内部时钟电路
内部时钟电路如图3.2所示,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。
定时元件通常石英晶体和电容组成的并联谐振回路,晶体振荡器选择12MHZ,电容采用30PF。
图3.2内部时钟电路
3.2.5复位电路
MCS-51单片机的复位是由外部的复位电路来实现的。
复位引脚RST通过一个斯密特触发器和复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。
上电复位:
上电复位电路是—种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。
上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。
为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。
图3.3复位电路RC
上电自动复位是通过外部复位电路的电容充电来实现的。
只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。
电路如图3.3所示。
3.2.6按键部分
本设计总的用了五个按扭开关作为键盘,用于调整时间和设置状态。
电路如图3.4所示。
图3.4按键电路
3.2.7声光报警电路
利用单片机的IO口控制一个8550的三极管,三极管控制蜂鸣器的电源通断。
从而实现输出声音。
声光报警电路如图3.5所示。
图3.5声光报警电路
四、电路原理分析
4.1显示原理
电原理图见附图1。
由6个共阴极的数码管组成时、分、秒的显示。
P0口的8条数据线P0.0至P0.7分别和两个CD4511译码的ABCD口相接,P2口的P2.0至P2.2分别通过电阻R10至R13和VT1至VT3的基极相连接。
这样通过P0口送出一个存储单元的高位、低位BCD显示代码,通过P2口送出扫描选通代码轮流点亮LED1至LED6,就会将要显示的数据在数码管中显示出来。
从P0口输出的代码是BCD码,从P2口输出的就是位选码。
这是扫描显示原理。
4.2键盘及读数原理
键盘是人和微机打交道的主要设备,按键的读取容易引起误动作。
可采用软件去抖动的方法处理,软件的触点在闭合和断开的时候会产生抖动,这时触点的逻辑电平是不稳定的,如不采取妥善处理的话,将引起按键命令错误或重复执行,在这里采用软件延时的方法来避开抖动,延时时间20ms.
4.3连击功能的实现
按下某键时,对应的功能键解释程序得到执行,如操作者没有释放按键,则对应的功能会反复执行,好象连续执行,在这里我们采用软件延时250ms,当按键没释放则执行下一条对应程序。
利用连击功能,能实现快速调时操作。
五、程序设计思想和相关指令介绍
本系统的主程序主要完成时间显示和定时输出判断功能。
而年月日显示和各时间单元进位,时间设定时,调定时间设定时等功能全部在中断服务程序中完成。
5.1数据和代码转换
由前述可知,从P2口输出位选码,从P0口输出段选码,LED就会显示出数字来。
但P0口的输出的数据是要BCD码,各存储单元存储的是二进制数,也就是和要显示出的字符表达的含义是不一致的。
可见,将要显示的存储单元的数据直接送到P0口去驱动LED数码管显示是不能正确表达的,必须在系统内部将要显示的数据经过BCD码行转换后,将各个单元数据的段选代码送入P0口,给CD4511译码后去驱动数码管显示。
具体转换过程如下:
我们先将要显示的数据装入累加器A中,再将A中的数据转换成高低两位的BCD码,再放回A中,然后将A中的值输出。
如:
有一个单元存储了45这样一位数,则需转换成四位的BCD码:
(0100)(0101)然后放入A中。
A中BCD码,高位四位代表4低四位代表5同时送给两个译码器中,译码后45字就在两个LED中显示出来。
5.2计时功能的实现和中断服务程序
时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。
计数器T0打开后,进入计时,满100毫秒后,重装定时。
中断一次,满一秒后秒进位,满60秒后即为1分钟,分钟单元进位,60分到了后,时单元进位,24小时满后,天单元进位。
这样然后根据进率,得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LED中显示出来,实现时钟计时功能。
累加是用指令INC来实现的。
进入中断服务程序以后,执行PUSHPSW和PUSHA将程序状态寄存器PSW的内容和累加器A中的数据保存起来,这便是所谓的保护现场,以保护现场和恢复现场时存取关键数据的存储区叫做堆栈。
在软件的控制之下,堆栈可在片内RAM中的任一区间设定,而堆栈的数据存取和一般的RAM存取又有区别,对它的操作,要遵循后进先出¡
的原则。
5.3时间控制功能和比较指令
系统的另一功能就是实现对执行设备的定时开关控制,其主要控制思想是这样的:
先将执行设备开启的时间和关闭时间置入RAM某一单元,在计时主程序当中执行几条比较指令,如果当前计时时间和执行设备的设定开启时间相等,就执行一条CLR指令,将对应的那路P3置为高电位,开启;
如果当前计时时间和执行设备设定的关闭时间相等,就执行SETB对应的P3置低电位,二极管截止,。
实现此控制功能用到的比较指令为CJNEA,#direct,rel,其转移条件是累加器A中的值和立即数不等则转移。
六、系统的软件设计
整体流程图如下:
图-A
整体程序流图
6.1主程序部分
主程序流程图如图-B示,主要有设置堆栈;
清计数器;
设置定时器,设置中断等。
图-B主程序流程图
6.2计时显示中断子程序部分
图-C计时中断子程序流程图
6.3调时功能流程图
图-C计时中断子程序流程图
6.4程序
SECEQU32H;
秒即时时间\伪指令
MINEQU31H;
分
HOUREQU30H;
时
DAYEQU35H;
日
MONEQU34H;
月
YEAREQU33H;
年
MIN_1EQU41H;
分定时器1路、开存储单元
HOUR_1EQU42H;
DAY_1EQU43H;
MON_1EQU44H;
YEAR_1EQU45H;
MIN_11EQU40H;
分定时器1路、关存储单元
HOUR_11EQU46H;
DAY_11EQU47H;
MON_11EQU48H;
YEAR_11EQU49H;
;
***********************
ORG0000H
ljmpMAIN
ORG0003H;
中断转换显示年月日、INT0(SB4键)
LJMPSHOW
ORG000BH;
计数中断T0、方式1
LJMPTIME
ORG0013H
LJMPCHANGE;
调整时间、定时、INT1(SB0键)
------主程序
ORG0030H
MAIN:
--------初始化付值
MOVYEAR,#02
MOVMON,#05
MOVDAY,#01
MOVHOUR,#00
MOVMIN,#00
MOVSEC,#00
CLR40H;
定时单元1路清零
CLR41H
CLR42H
CLR43H
CLR44H
CLR45H
CLR46H
CLR47H
CLR48H
CLR49H
-------开中断
MOVTMOD,#01H;
计数、模式1、T0
MOVTL0,#0B0H;
100SM计数定时
MOVTH0,#3CH;
clrp3.0
MOV20H,#0A