基于AT89C51单片机的数字时钟设计.docx
《基于AT89C51单片机的数字时钟设计.docx》由会员分享,可在线阅读,更多相关《基于AT89C51单片机的数字时钟设计.docx(15页珍藏版)》请在冰豆网上搜索。
基于AT89C51单片机的数字时钟设计
摘要
本文是基于AT89C51单片机数字时钟的设计,阐述了数字时钟的设计思路,详细叙述了系统硬软件设计的具体过程。
数字时钟的设计过程在硬件与软件方面进行同步设计。
硬件部分主要由AT89C51单片机,LCD显示电路,复位电路,时钟电路,晶振电路以及报时电路。
采用AT89C51作为主控器件,用DS1302实现时钟功能,用LCD1602为显示器件。
通过DS1302直接读取时间和星期。
具有整点报时的功能。
关键词:
数字时钟,AT89C51,LCD1602,DS1302
一系统总体方案
采用数字芯片DS1302计算日期,输出信号全数字化。
采用AT89C51单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。
用LCD1602液晶显示芯片进行显示再加之键盘及报时等。
总体方案框图如下:
二系统硬件设计
2.1控制器
本部分采用AT89C51作为主控制器。
AT89C51单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。
这样,既能做到经济合理又能实现预期的功能。
在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。
程序可分为闹钟的声音程序、显示程序、闹钟显示程序、调时显示、定时程序。
运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。
[1]
下面介绍主要引脚功能功能如下:
1I/O接口
MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布请参照----单片机引脚图2。
P0.0~P0.7P0口8位双向口线;P1.0~P1.7P1口8位双向口线;P2.0~P2.7P2口8位双向口线;P3.0~P3.7P2口8位双向口线。
其中P0口有三个功能:
外部扩展存储器时,当做数据总线;外部扩展存储器时,当作地址总线;不扩展时,可做一般的I/O使用,但内部无上拉电阻,作为输入或输出时应在外部接上拉电阻。
P1口只做I/O口使用:
其内部有上拉电阻。
P2口有两个功能:
扩展外部存储器时,当作地址总线使用;做一般I/O口使用,其内部有上拉电阻。
P3口有两个功能:
除了作为I/O使用外(其内部有上拉电阻),还有一些特殊功能,由特殊寄存器来设置。
[2]
2ALE/PROG地址锁存控制信号
在系统扩展时,ALE用于控制把P0口的输出低8位地址送锁存器锁存起来,以实现低位地址和数据的隔离。
ALE有可能是高电平也有可能是低电平,当ALE是高电平时,允许地址锁存信号,当访问外部存储器时,ALE信号负跳变(即由正变负)将P0口上低8位地址信号送入锁存器。
当ALE是低电平时,P0口上的内容和锁存器输出一致。
在没有访问外部存储器期间,ALE以1/6振荡周期频率输出(即6分频),当访问外部存储器以1/12振荡周期输出(12分频)。
[3]
3PROG为编程脉冲的输入端
程序通过编程脉冲输入才能写进去的,这个脉冲的输入端口就是PROG。
4PSEN为外部程序存储器读选通信号
在读外部ROM时PSEN低电平有效,以实现外部ROM单元的读操作。
5RST复位信号
当输入的信号连续2个机器周期以上高电平时即为有效,用以完成单片机的复位初始化操作,当复位后程序计数器PC=0000H,即复位后将从程序存储器的0000H单元读取第一条指令码。
[4]
6XTAL1和XTAL2
外接晶振引脚。
当使用芯片内部时钟时,此二引脚用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
[5]
7VCC:
电源+5V输入
8VSS:
GND接地。
2.2时钟电路
采用DS1302时钟芯片实现时钟设计如图3所示,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM作为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。
同时在外加电源和外加晶振电路下,掉电后走时准确。
[6]
图3时钟电路图
2.3键盘部分
本部分采用独立式键盘通过键盘对时钟预置时间、星期,设计如图4。
独立式键盘是一键一线,各键相互独立,每个按键各接一条I/O口线,通过检测I/O输入线的电平状态,可以很容易地判断哪个按键被按下。
这种键盘电路简单,各条检测线独立,识别按下的按键的软件编程简单。
适用于键盘按键数目较少的场合,故此处选用独立式键盘。
图4按键电路图
2.4显示电路
此处采用LCD液晶显示器对时间、星期进行显示设计图如下所示。
LCD1602第一行显示星期,第二行显示时、分、秒。
通过对液晶模块的地址设置使数字显示在屏幕的正中央以达到美观的效果。
LCD1602采用标准的14或16脚接口,个引脚说明如表1
表1LCD1602功能引脚说明
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
显示电路如图5
图5显示电路图
2.5蜂鸣器部分
使得时钟具有整点报时功能,其图6:
图6蜂鸣器电路图
2.6晶振电路
晶振电路两端分别接单片机的XTAL1和XTAL2两口
XTAL2
XTAL1
图7晶振电路图
2.7复位电路
AT89C51的外部复位电路通过按键电平复位电路来实现。
通过RST端经电阻与电源VCC接通来实现,具体电路图如图8:
RST
图8复位电路图
2.8电源电路
电源电路设计如图9
图9电源电路图
三系统软件设计
3.1主程序流程图
主程序的功能是负责时间的实时显示,读出并处理DS1302的计数的当前时间值,每40ms读一次DS1302的时间,其程序流程图如图10:
3.2DS1302实时时间流程图
对DS1302进行操作前都必须先初始化,在这里设置了DS1302,并概括性地介绍了如何读出DS1302的时间数据。
具体情况如图11所示。
3.2LCD流程图
LCD的驱动是初始化、清零。
然后打开左半屏,输入左半屏的内容,关掉左半屏,打开右半屏,输入右半屏的内容。
其流程图如下所示。
结论
本设计介绍的是利用AT89C51单片机作为控制器,配有专用时钟芯片DS1302实现时钟功能,最终由LCD1602液晶显示器进行显示的智能电子数字钟设计。
在本设计中,详细介绍了系统软硬件的设计方案。
目的在于通过键盘预置时间、星期,并通过LCD液晶显示星期、时、分、秒,同时具有整点报时功能,方便实用。
在设计的几天里,查找资料使得自己在涉及有关所做课程设计方面的知识日益增加。
刚拿到自己的课程设计时,真是烦恼了一段时间。
感觉上课和自己设计还是有一定距离的。
上课时,只要一本教材和一支笔就万事OK了。
然而,做设计就没那么轻松了,要拿的不仅仅是教材和笔,还要再加上好多的图书,有时还要上网查找资料。
坐在一堆书本中或是泡在电脑前几个小时,有时还真让人苦恼,尤其是起初看过之后还一点思路都没有,就感觉好麻烦,有时就干脆放下。
但是,设计必定是要做的,就在这样做做停停的模式下,开始有了起色。
突然就有种小小的成就感。
当然并不是任何时候都让人心情愉悦,可随着时间的推移,设计也有了一定的眉目时,就感觉一切都是值得的。
因为在这次的设计过程中,增加的不只是我的知识,更是对自己内心的一种磨练,它会给我以后的生活带来不可忽视的作用。
我觉得现在的任何经历都会成为自己人生中一笔不小的财富的。
参考文献
[1]白延敏.51单片机典型系统开发实例精讲[M].北京:
电子工业出版社,2009
[2]罗强等.基于单片机的嵌入式工程开发详解[M].北京:
电子工业出版社,2009
[3]刘湘等.单片机原理与应用[M].北京:
电子工业出版社,2006
[4]王义军等.单片机原理及应用习题与实验指导书[M].北京:
中国电力出版社,2006
[5]楼然苗,李光飞.单片机课程设计指导[M].北京航空航天出版社,2007
[6]简宁电子时钟的仿真实现企业科技与发展,2010年第16期
附录1:
总电气原理图
附录2:
程序代码如下
DS1302_WRB:
MOV40H,#8
MOVA,B
RRCA
MOVB,A
MOVDS1302_IO,C
SETBDS1302_CLK
CLRDS1302_CLK
DJNZ40H,LPW
RET
DS1302_RDB:
MOV40H,#8
LPR:
MOVC,DS1302_IO
RRCA
SETBDS1302_CLK
CLRDS1302_CLK
DJNZ40H,LPR
RET
DS1302_READSEC:
CLRDS1302_RST
CLRDS1302_CLK
SETBDS1302_RST
MOVB,#81H
CALLDS1302_WRB
CALLDS1302_RDB
MOV30H,A
SETBDS1302_CLK
CLRDS1302_RST
RET
LCD1602_WRC:
CLRLCD1602_RW
CLRLCD1602_RS
CLRLCD1602_RW
MOVP0,A
CALLDELAY
SETBLCD1602_E
CALLDELAY
CLRLCD1602_E
CALLDELAY
RET
LCD1602_INIT:
MOVA,#01H
CALLLCD1602_WRC
MOVA,#38H
CALLLCD1602_WRC
MOVA,#08H
CALLLCD1602_WRC
MOVA,#06H
CALLLCD1602_WRC
MOVA,#0cH
CALLLCD1602_WRC
RET
LCD1602_WRD:
SETBLCD1602_RS
CLRLCD1602_RW
CLRLCD1602_E
MOVP0,A
CALLDELAY
SETBLCD1602_E
CALLDELAY
CLRLCD1602_E
RET