DS1302的实时数字钟设计Word格式.docx
《DS1302的实时数字钟设计Word格式.docx》由会员分享,可在线阅读,更多相关《DS1302的实时数字钟设计Word格式.docx(39页珍藏版)》请在冰豆网上搜索。
(2)液晶显示实时时间信息。
(3)键盘设置时间信息。
(4)多组闹钟设置,并有闹钟提示。
(5)倒计时功能。
(6)秒表。
(7)采用直流供电电源,外部直流供电为主,电池为后备辅助电源,并能自动切换。
2.2各模块方案选择和论证
2.2.1主控模块的选择说明
目前在单片机系统中,应用比较广泛的微处理器芯片主要为8XC5X系列单片机。
该系列单片机均采用标准MCS-51内核,硬件资源相互兼容,品类齐全,功能完善,性能稳定,体积小,价格低廉,货源充足,调试和编程方便,所以应用极为广泛。
例如比较常用的AT89C2051单片机,带有2KBFlash可编程、可擦除只读存储器(E2PROM)的低压、高性能8位CMOS微型计算机。
拥有15条可编程I/O引脚,2个16位定时器/计数器,6个中断源,可编程串行UART通道,并能直接驱动LED输出。
仅仅是为了完成时钟设计,应用AT89C2051单片机完全可以实现。
但是本设计中需要更多的I/O引脚,故本设计采用具有32根I/O引脚的STC89C52单片机。
STC89C52单片机是一款低功耗,低电压,高性能CMOS8位单片机,片内含8KB(可经受1000次擦写周期)的FLASH可编程可反复擦写的只读程序存储器,器件采用CMOS工艺和高密度、非易失性存储器(NURAM)技术制造,其输出引脚和指令系统都与MCS-51兼容。
片内的FLASH存储器允许在系统内可改编程序或用常规的非易失性存储器编程器来编程。
因此,STC89C52是一种功能强,灵活性高且价格合理的单片机,可方便的应用在各个控制领域[1]。
工作电压:
3.6V-2.4V,可低至2.4V-1.9V
I/O口:
P0,P1,P2,P3口可以承受5V输入。
P0口不要接到5V系统,只能接3.3V系统,如果接5V系统要接上拉电阻。
A/D转换在P1口,P1.0-P1.7八路。
图1STC89C52管脚图
2.2.2时钟芯片的选择和说明
在电子时钟设计中,常用的实时时钟芯片有DS12887、DS1216、DS1643、DS1302。
每种芯片的主要时钟功能基本相同,只是在引脚数量、备用电池的安装方式、计时精度和扩展功能等方面略有不同。
DS12887与DS1216芯片都有内嵌式锂电池作为备用电池;
X1203引脚少,没有嵌入式锂电池,跟DS1302芯片功能相似,只是相比较之下,X1203与STC89C52搭配使用时占用I/O口较多。
DS1643为带有全功能实时时钟的8K×
8非易失性SRAM,集成了非易失性SRAM、实时时钟、晶振、电源掉电控制电路和锂电池电源,BCD码表示的年、月、日、星期、时、分、秒,带闰年补偿。
同样,DS1643拥有28只管脚,硬件连接起来占用微处理器I/O口较多,不方便系统功能拓展和维护。
故而从性价比和货源上考虑,本设计采用实时时钟日历芯片DS1302。
2.2.2.1DS1302简介
DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟日历芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。
实时时钟可提供秒、分、时、日、星期、月和年,一个月小于31天时可以自动调整,且具有闰年补偿功能。
工作电压宽达2.5~5.5V。
采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。
有主电源和备份电源双引脚,而且备份电源可由大容量电容(>1F)来替代。
需要强调的是,DS1302需要使用32.768KHz的晶振[2]。
2.2.2.2DS1302管脚说明
图2DS1302芯片引脚图
表1DS1302引脚功能说明
引脚号
名称
功能
1
VCC1
备份电源输入
2
X1
32.768KHz晶振输入
3
X2
32.768KHz晶振输出
4
GND
地
5
RST
控制移位寄存器/复位
6
I/O
数据输入/输出
7
SCLK
串行时钟
8
VCC2
主电源输入
2.2.2.3DS1302读写和控制说明
DS1302的数据读写方式有两种,一种是单字节操作方式,一种是多字节操作方式。
每次仅写入或读出一个字节数据称为单字节操作,每次对时钟/日历的8字节或31字节RAM进行全体写入或读出的操作,称其为多字节操作方式。
当以多字节方式写时钟寄存器时,必须按数据传送的次序依次写入8个寄存器。
但是,当以多字节方式写RAM时,不必写所有31字节。
不管是否写了全部31字节,所写的每一个字节都将传送至RAM。
为了启动数据的传输,CE引脚信号应由低变高,当把CE驱动至逻辑1的状态时,SCLK必须为逻辑0,数据在SCLK的上升沿串行输入。
无论是读周期还是写周期,也无论送方式是单字节传送还是多字节传送,都要通过控制字指定40字节中的哪个将被访问。
在开始8个时钟周期把命令字(具有地址和控制信息的8位数据)装入移位寄存器之后,另外的时钟在读操作时输出数据,在写操作时输入数据,所有的数据在时钟的下降沿变化。
所有写入或读出操作都是先向芯片发送一个命令字节。
对于单字节操作,包括命令字节在内,每次为2个字节,需要16个时钟;
对于时钟/日历多字节模式操作,每次为7个字节,需要72个时钟;
而对于RAM多字节模式操作,每次则为32字节,需要多达256个时钟[3]。
2.2.3显示模块的选择和说明
本实验中要显示的信息比较多,选择数码管显示的话需要的数码管数量将会很多,将是线路复杂,PCB布线混乱,因此选择LCD1602作为显示模块。
2.2.3.1LCD1602引脚定义
表2LCD1602引脚功能
引脚编号
引脚符号
功能规格
VSS(输入)
接地,0V
Vdd(输入)
接电源,5V±
5%
V0(输入)
反视度调整,使用可变电阻调节,可改变对比度
RS(输入)
寄存器选择。
1:
选择资料寄存器,0:
选择指令寄存器
(输入)
读写选择,1:
读;
0:
写
E(输入)
使能选择。
LCD可读写。
LCD不可读写
DB0
数据端口的第0位
DB1
数据端口的第1位
9
DB2
数据端口的第2位
10
DB3
数据端口的第3位
11
DB4
数据端口的第4位
12
DB5
数据端口的第5位
13
DB6
数据端口的第6位
14
DB7
数据端口的第7位
15
背光电源正极,5V±
16
背光电源负极,0V
2.2.3.2指令表
表3LCD1602指令表
指令
RS
RW
D7
D6
D5
D4
D3
D2
D1
D0
清屏
光标返回
*
输入模式
I/D
S
显示控制
D
C
B
光标/字符移位
S/C
R/L
DL
N
F
置字符发生器地址
字符发生存贮器地址
置数据存贮器地址
显示数据存贮器地址
读忙标志和地址
BF
计数器地址
写数据到指令7.8所设地址
要写的数据
从指令7.8所设的地址读数据
读出的数据
指令1:
清显示,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移,S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标。
R/L,高向左,低向右。
指令6:
功能设置命令DL:
高电平时为8位总线,低电平时为4位总线N:
低电平时为单行显示,高电
平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
(有些模块是DL:
高电平时为8位总线,低电平时为4位总线)
指令7:
字符发生器RAM地址设置,地址:
字符地址*8+字符行数。
(将一个字符分成5*8点阵,一次写入一行,8行就组成一个字符)
指令8:
置显示地址,第一行为:
80H——8FH,第二行为:
C0H——CFH。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
[4]
2.3最终选择方案
经过方案比较和论证,选择STC89C52作为主控芯片,时钟芯片选择DS1302,显示模块用LCD1602,用四个独立式键盘。
最后选择的方案如下图所示:
图3系统框图
3系统硬件设计及实现
该设计的硬件电路由主控部分(单片机STC89C52)、计时部分(实时时钟芯片DS1302)、显示部分(LCE1602)、按键部分(独立式键盘)、音响部分(直流蜂鸣器)5个部分组成。
各部分之间相互协作,构成一个统一的有机整体,实现数字时钟的功能。
各部分的硬件电路设计如下:
3.1单片机外围电路设计
单片机STC89C52作为主控芯片,控制整个电路的运行。
单片机外围需要一个复位电路,复位电路的功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤消复位信号。
为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
该设计采用含有二极管的复位电路,复位电路可以有效的解决电源毛刺和电源缓慢下降(电池电压不足)等引起的问题,在电源电压瞬间下降时可以使电容迅速放电,一定宽度的电源毛刺也可令系统可靠复位。
复位电路的设计图如图4示:
图4复位电路设计图
3.2DS1302与单片机的接口设计
时钟芯片DS1302与单片机STC89C52的接口是由3条线来完成的,单片机STC89C52的P1.6与时钟芯片的数据传输端相连,P1.5用来作为DS1302输入时钟SCLK控制端,P1.7控制DS1302的复位输入端。
DS1302的第8管脚与一个独立电池连接,2、3管脚接标准32.768KHz石英晶振。
DS1302与单片机的接口电路如图5所示:
图5DS1302与单片机的连接
3.3LCD1602与单片机的接口设计
液晶显示器LCD1602与单片机STC89C52的接口由一组8位数据传输线和3跟控制线完成。
LCD1602的RS、RW、E分别由单片机的P1.2、P1.1、P1.0来控制,数据输入口DB0~DB7由P0.0~P0.7传输数据,因为是接在P0口,所以要接上拉电阻。
LCD1602与单片机的接口电路如图6所示:
图6LCD1602与单片机的连接
3.4按键电路设计
本设计中使用的按键不多,只用到四个按键即可完成所需要的功能,因此用四个独立式按键来完成。
S4、S3、S2、S1分别与P2.0、P2.1、P2.2、P2.3连接,具体功能有:
S4主功能选择;
S3光标移位/开闹钟;
S2数值加/关闹钟;
S1秒表/倒计时。
具体电路图如图7所示:
图7按键电路
3.5闹铃电路设计
闹铃音乐可以直接采用蜂鸣器闹铃,如当前时刻与闹铃时间相同,单片机向蜂鸣器送出高电平,蜂鸣器发声。
采用蜂鸣器闹铃结构简单,控制方便,但是发出的闹铃声音单一。
闹铃的音乐不是本设计中的重点,故采用最简单的方法,占用单片机一根I/O口P1.3,中间用PNP型三极管S9012连接P1.3和蜂鸣器。
当P1.3引脚为低电平时,S9012的发射极和集电极导通,使蜂鸣器发声。
当响铃标志位为“1”时,P2.0送一定频率脉冲,使蜂鸣器发出声音[5]。
如图8所示:
图8闹铃电路
3.6电源设计
时钟芯片DS1302有很宽的工作电压范围,其工作电压为2.5~5.5V。
单片机STC89C52的工作电压范围相对较窄,为4.0~5.5V,所以本设计中,利用USB给电路提供+5V电压,由于USB供电可能不稳定,所以加一个滤波稳压电容,使电路的工作保持很高的可靠性。
在电路中接入一个发光二极管作为指示灯,可以很方便地指示电源与电路是否接通。
该设计的电源部分如图9所示:
图9电源电路
4软件设计
4.1主程序设计
第一次上电,系统先进行初始化,单片机依次开始调用键盘扫描子程序、DS1302子程序、闹铃子程序,经过延时,返回程序开头循环运行。
图10主程序流程图
4.2DS1302子程序的设计
单片机STC89C52对时钟芯片DS1302的控制需要通过程序驱动来实现,程序主要完成两个方面的任务:
①利用单片机实现对DS1302寄存器的地址定义和控制字的写入,②实现对DS1302的数据读取。
初始化DS1302要求
为低电平,SCLK为低电平。
被设置为高电平就启动了一个数据传送的过程。
SCLK的16个方波完成一次数据传送,前8个方波用于输入命令字节,后8个方波用于数据的输出或数据的输入。
在SCLK的上升沿,I/O线上的数据被送入DS1302;
在SCLK的下降沿,DS1302输出数据在I/O线上。
写和读各需要一个程序,写DS1302程序流程图如图11.1所示,读DS1302程序流程图[6]如图11.2所示。
图11.1写DS1302流程图图11.2读DS1302流程图
程序主要实现对DS1302写保护、充电,对年、月、日、时、分、秒等寄存器的读写操作。
在读写操作子程序中都执行了关中断指令,因为在串行通信时对时序要求比较高,而且在此是用I/O口软件模拟串行时钟脉冲,所以在通信过程中最好保证传输的连续性,不要允许中断。
其流程图如图12。
图12实时时钟日历子程序流程图
DS1302每次上电时自动处于暂停状态,必须把秒寄存器的位7置位0,时钟才开始计时。
如果DS1302一直没有掉电,则不存在此问题。
在进行写操作时,需要先解除写保护寄存器的“禁止”状态。
当用多字节模式进行操作时,必须写够8字节[7]。
4.3LCD显示子程序的设计
程序主要实现对信息的显示,包括年、月、日、星期和时间等信息,在这里要注意它的读写控制指令。
其流程图如图13所示。
图13显示子程序流程图
4.4键盘扫描子程序的设计
单片机对键盘扫描的方法有随机扫描方式、定时扫描方式和中断扫描方式。
在随机扫描方式中,CPU完成某特定任务后,即执行键盘扫描程序,以确定键盘有无按键输入,然后根据按键功能转去执行相应的操作。
在执行键盘按键规定的功能中不理睬键盘输入。
定时扫描方式与随机扫描方式基本相同,只是利用CPU内的定时中断,每隔一定时间扫描有无按键被按下,键盘反应速度较快,在处理按键功能过程中,可以通过键盘命令进行干预,如取消、暂停等操作。
前两种扫描方式均会占用CPU大量时间。
不管有没有键入操作,CPU总要在一定的时间内进行扫描,这对于单片机控制系统是很不利的[8]。
由于本设计中STC89C52单片机在系统中的主要任务是接受DS1302的数据并送出显示,完成时钟/日历校对和日期显示控制。
单片机完全有能力完成以上工作,所以采用随机扫描键盘方式,系统也能够正常运行。
单片机扫描完键盘,得到键值,并根据键值转入执行对应任务,以实现按键功能。
如果没有按键按下,则程序扫描到Key=FFH,将键值Key清零,返回主程序。
4.5闹钟子程序的设计
闹铃子程序最主要的任务是不断用时钟分(min)与时(hour)同设定的闹铃分(clk_min)与闹铃时(clk_hour)比较,只要满足min等于clk_min、hour等于clk_hour,响铃启动1分钟。
5系统调试
调试工作分硬件调试和软件调试两部分,调试方法介绍如下:
首先,硬件调试主要是先搭建硬件平台,然后利用万用表等工具对电路检查,最后应用程序进行功能调试。
硬件调试比较费时,需要细心和耐心,也需要熟练掌握电路原理。
然后,可以直接应用一些编辑或仿真软件进行软件调试,比如单片机C51编辑软件Keil。
该软件提供了一个集成开发环境uVision,它包括C编辑器、宏编辑器、连接器、库管理和一个功能强大的仿真调试器。
通过编译、运行,可以检查程序错误。
但应用此方法,仍需要十分了解所使用元器件的工作方式和管脚连接方式。
在软件调试过程中要仔细耐心,即便是多写或少些一两个字符,都无法编译成功。
而有时往往在Keil中编译、运行无错,但烧录到单片机中运行起来就会出错,很可能是编程时管脚或时序编辑得不对。
还有一种方式,即应用仿真软件搭建电路的软件平台,再导入程序进行仿真调试。
如果电路出错,可以在计算机上方便的修改电路,程序出错可以重新编辑程序,这种方法节时、省力,经济、方便。
笔者应用的仿真软件为Proteus。
总之,调试过程是一个软硬件相结合调试的过程,硬件电路是基础,软件是检测硬件电路和实现其功能的关键[9]。
5.1软件调试
软件调试相对比较简单,但是要掌握仿真软件的用法,首先在仿真软件(Proteus)上建立仿真模型(电路图),然后用KeilC编程序和Proteus进行联机仿真调试,分别对显示、按键、时钟等各个部分进行调试,检测电路原理图的正确与否。
5.2硬件调试
单片机基础电路包括电源、单片机、外部时钟震荡电路、复位电路和外部接口电路。
调试过程需要注意以下几点:
(1).检查电源是否完好。
(2).单片机电源要连接正确,并且保证AT89C51的31号引脚接高电平。
AT89C51的31号引脚是外部程序存储器选择信号端,当该引脚为高电平时,单片机会一直从片内程序存储器内取指令。
(3).如果使用P0口做I/O口,要接上拉电阻。
(4).使用万用表排查电路中是否存在断路或者短路情况。
笔者在制作外部接口电路时使用的是排针,焊接时容易出现管脚之间短路,所以在上电以前必须先排查电路。
(5).编辑一个简单程序,上电运行,检查单片机是否正常工作,复位电路是否正确。
5.2.1显示电路调试
由于显示电路中连线比较多,所以应该先使用万用表排除电路中是否存在断路或者短路情况,可别是插针部分,此外特别注意LCD1602的三个控制管脚P1.0、P1.1、P1.2是否与单片机连接上了。
然后编写简单的显示程序运行,检查电路是否正常。
5.2.2DS1302电路调试
该电路包含DS1302芯片、主电源、备用电源、晶振等部分。
在与单片机连接的过程中需要注意以下几点:
(1)清楚DS1302与单片机连接的管脚。
本设计定义为:
DS1302的SCLK连接P1.5,I/O连接P1.6,RST连接P1.7。
(2)注意电源正负极连接。