05论文正文.docx
《05论文正文.docx》由会员分享,可在线阅读,更多相关《05论文正文.docx(24页珍藏版)》请在冰豆网上搜索。
![05论文正文.docx](https://file1.bdocx.com/fileroot1/2023-2/23/fc4feb9a-41a8-4dd9-9cb2-3e6c3c981493/fc4feb9a-41a8-4dd9-9cb2-3e6c3c9814931.gif)
05论文正文
前言
时钟,自从它被发明的那天起,就成为人类的朋友。
随着时间的推移,随着科学技术的不断发展,随着生活水平的提高,人们越来越追求人性化的事物,对时间计量的精度要求越来越高,应用也越来越广泛,这些都导致传统的时钟已不能满足人们的需求。
现代生活的人们越来越重视了时间观念,可以说是时间和金钱划上了等号。
对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦,所以以数码管为显示器的时钟比指针式的时钟表现了更大的优势。
数码管显示的时间简单明了,而且读数快、时间准确显示到秒。
现代的实时时钟不仅需要数字电路技术而且需要模拟电路技术和单片机技术,增加了调时的功能。
其电路可以由实时时钟模块、人机接口模块、数码管显示模块等部分组成。
利用软件编程尽量做到硬件电路简单稳定,减小电磁干扰和其他环境干扰,充分发挥软件编程的优点,减小因元器件精度不够引起的误差,但是数字钟还是可以改进和提高如选用更精密的元器件。
但与机械式时钟相比已经具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,因此得到了广泛的使用。
目前,单片机正朝着高性能和多品种方向发展趋势将是进一步向着CMOS化、低功耗、小体积、大容量、高性能、低价格和外围电路内装化等几个方面发展。
单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。
从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。
这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。
利用单片机实现的电子时钟具有编程灵活、精确度高等特点,并且便于电子计时器的扩充,即可用该高精度计时器发出各种控制信号,同时可以用该计时器发出各种控制信号。
高精度计时器是采用数字电路实现对时、分、秒及数字显示的计时装置,广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
本课题研究的主要目的就是设计一个基于单片机的日历时钟系统。
能够准确的显示出当前的时间信息。
当时间显示不准确时调整出准确的时间信息。
1高精度计时器功能及总体介绍
1.1高精度计时器功能
1.1.1基本功能
要求:
计时器使用1602LCD液晶显示屏显示时间。
格式:
为"20--"、":
:
"。
1.1.2扩展功能
要求:
按键控制初始时间的输入;可以设置闹钟;使用蜂鸣器报警。
1.2总体介绍
对于系统设计的总体思路如下图所示:
图1-1总体框图
fig.1-1Theoverallblockdiagram
利用AT89S52单片机和时钟芯片DS12C887进行终端定时,配合软件延时实现年、月、日、时、分、秒的计时。
该方案节省硬件成本,并且能使读者在高精度计时器的使用、中断及程序设计方面得到锻炼和提高,对单片机的指令系统能有更深入的了解。
1.2.1计时方案
此系统所选用的时钟芯片可以依靠内置锂电池自动计时,我们只需要利用单片机输入一个计时起点,时钟芯片即可完成计时工作。
对于计时起点的输入我们可以通过单片机外接按键得以实现。
液晶显示数据可以通过延时函数使我们的肉眼可以看见时间显示,通过单片机对时钟芯片计时数据的读取、控制液晶的数据显示两方面的共同作用下,时间得到正确的显示。
1.2.2闹钟方案
我们要对某个未来的时间进行设定,当计时器到达这个时间点的时刻会有蜂鸣器报警。
对于时间的设定我们可以结合计时方案中的按键实现,在此基础上我们也可以通过按键来查看已经设置好的闹钟。
对于蜂鸣器报警,当计时器的时间与已经设置好的时间吻合时,我们给蜂鸣器一个电平信号使得蜂鸣器工作报警。
当蜂鸣器完成报时功能后我们需要给其一个相反电平信号使得蜂鸣器结束警报。
2计时器的硬件设计
2.1控制芯片的选择
2.1.1单片机AT89S52的功能与特点
(1)AT89S52为ATMEL所生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flsah存储器。
(2)在单片机的应用系统中,单片机作为一种较为简单的计算机是嵌入到系统内部,作为系统电路的一部分,作为系统实现数字化和智能化的关键部件。
AT89S52主要功能列举如下:
①拥有灵巧的8位CPU和在系统可编程Flash
②晶片内部具时钟振荡器(传统最高工作频率可至12MHz)
③内部程序存储器(ROM)为8KB
④内部数据存储器(RAM)为256字节
⑤32个可编程I/O口线
⑥8个中断向量源
⑦三个16位定时器/计数器
⑧三级加密程序存储器
⑨全双工UART串行通道
2.1.2单片机AT89S52的内部结构
单片机为实现其基本功能,内部必需要有配置输入输出(I/O口)、储存器(RAM或ROM)、运算和控制单元(CPU)等相应的功能电路,电路内部结构如图2-1所示:
图2-1AT89S52的内部结构
Fig.2-1TheinternalstructureofAT89S52
2.1.3单片机AT89S52引脚的功能说明
单片机AT89S52有40个引脚,引脚图如图2-2所示:
图2-2单片机引
Fig.2-2Thepindiagramofthesinglechipmicrocomputer
(1)VCC:
AT89S52电源正端输入,接+5V。
(2)VSS:
电源地端。
(3)XTAL1:
单芯片系统时钟的反相放大器输入端。
(4)XTAL2:
系统时钟的反相放大器输出端,一般在设计上只要在XTAL1和XTAL2上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一20PF的小电容,可以使系统更稳定,避免噪声干扰而死机。
(5)RESET:
AT89S52的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。
(6)EA/Vpp:
"EA"为英文"ExternalAccess"的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。
因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。
如果是使用8751内部程序空间时,此引脚要接成高电平。
此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。
(7)ALE/PROG:
ALE是英文"AddressLatchEnable"的缩写,表示地址锁存器启用信号。
AT89S52可以利用这支引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0~A7)锁进锁存器中,因为AT89S52是以多工的方式送出地址及数据。
平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。
此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。
(8)PSEN:
此为"ProgramStoreEnable"的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。
AT89S52可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址范围。
(9)PORT0(P0.0~P0.7):
端口0是一个8位宽的开路汲极(OpenDrain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。
其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当做I/O用时可以推动8个LS的TTL负载。
如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。
设计者必须外加一锁存器将端口0送出的地址栓锁住成为A0~A7,再配合端口2所送出的A8~A15合成一完整的16位地址总线,而定址到64K的外部存储器空间。
(10)PORT2(P2.0~P2.7):
端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。
P2除了当做一般I/O端口使用外,若是在AT89S52扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当做I/O来使用了。
(11)PORT1(P1.0~P1.7):
端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LSTTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。
如果是使用8052或是8032的话,P1.0又当做定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发脚位。
(12)PORT3(P3.0~P3.7):
端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。
其引脚分配如下:
①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,外部数据存储器的读取信号。
2.1.4存储器的配置
存储器是单片机里面的重要功能部件,分为程序存储器(ROM)和数据存储器(RAM)。
51系列单片机将程序存储器和数据存储器分开寻址,这样就有4个在物理上相互独立的存储器空间:
片内、外的ROM和片内、外的RAM。
在逻辑上只设有3个存储器寻址空间。
程序存储器的某些单元被保留用于特定程序入口地址:
(1)复位(0000H),
(2)外部中断0(0003H),(3)定时器T0溢出中断(000BH),(4)外部中断1(0013H),(5)定时器T1溢出中断(001BH),(6)串行口中断(0023H),(7)定时器T2中断(002BH)。
2.2时钟芯片介绍
2.2.1时钟芯片DS12C887引脚介绍
时钟芯片DS12C887,其引脚分布图如下图2-3所示:
图2-3DS12C887引脚图
fig.2-3ThepindiagramofDS12C887
MOT(1脚):
总线时序模式选择脚。
接高电平,选择MOTOROLA总线时;序;接低电平或悬空,择选择INTEL总线时序。
NC(2,3,16,20,21,22脚):
悬空脚。
AD0~AD7(4~11脚):
地址/地址数据复用总线引脚。
CS(13脚):
片选脚,低电平有效。
AS(14脚):
地址锁存输入脚。
下降沿时,地址被锁存,紧接着的上升沿来时地址被清除。
R/W(15脚):
读/写输入脚。
在选择MOTOROLA总线时序模式时,此引脚用于指示当前的读写周期,高电平指示当前为读周期,低电平指示当前为写周期;选择INTEL中线时序模式时,此引脚为低电平有效的输入脚,相当于通用RAM的写使能信号(/WE)
DS(17脚):
选择MOTOROLA总线时序模式时,此引脚为数据锁存脚;选择INTEL总线时序模式时,此引脚为读输入脚,低电平有效,相当于典型的内存的输出使能信号(/OE)
RESET(18脚):
复位脚,低电平有效,复位不会影响到时钟、日历和RAM。
IRQ(19脚):
中断申请输出脚,低电平有效,可作为微处理器的中断输入。
SQW(23脚):
方波信号输出脚。
可通过设置寄存器位SQWE关断此信号输出,此信号的输出频率也可通过对芯片内部的寄存器编程予以改变。
VCC(24脚):
+5v电源端。
2.2.2时钟芯片DS12C887内存空间介绍
图2-4时钟、日历和闹钟数据模式--BCD模式(DM=0)
fig.2-4Thedatamodelofclock、calendarandalarmclock--thedatamodelofBCD(DM=0)
图2-5时钟、日历和闹钟数据模式--二进制模式(DM=1)
fig.2-5Thedatamodelofclock、calendarandalarmclock--thedatamodelofbinary(DM=1)
2.2.3四个控制寄存器介绍
DS12C887有4个控制寄存器,在任何时间都可以进行访问,即使处于更新周期。
寄存器A字节的内容如下:
MSBLSB
UIP
DV2
DV1
DV0
RS3
RS2
RS1
RS0
UIP:
更新标志位。
为只读位且不受复位操作的影响,为1时,表示即将发生的数据更新;为0时,表示至少244US不会更新数据。
当UIP为0时,可以获得所有时钟、日历、闹钟信息。
将寄存器B中的SET位置1可以限制任何数据更新操作,并且清除UIP位。
DV2、DV1、DV0:
此3位为010时将打开晶振,并开始计时。
RES3、RES2、RES1、RES0:
用于设置周期性中断产生的时间周期和输出方波的频率。
寄存器B字节的内容如下:
MSBLSB
SET
PIE
AIE
UIE
SQWE
DM
24/12
DSE
SET:
设置位,可读写,不受复位操作影响。
为0时,不处于设置状态,芯片进行正常时间数据更新;为1时,抑制数据更新,可以通过程序设定时间和日历信息。
PIE:
周期性中断使能位,可读写,复位时清除此位。
为1时,允许寄存器C中的周期中断标志位PF,驱动/IRQ引脚为低产生中断信号输出,中断信号产生的周期由RS3~RE0决定。
AIE:
闹钟中断使能位,可读写。
为1时,允许寄存器C中的闹钟中断标志位AF、闹钟发生时就会通过/IRQ引脚产生中断输出。
UIE:
数据更新结束中断使能位,可读写。
复位或者SET位为1时清除此位。
为1时允许寄存器C中的更新结束标志UF,更新结束时就会通过/IRQ引脚产生中断输出。
SQWE:
方波使能位,可读写,复位时清除此位。
为0时,SQW引脚保持低电平;为1时,SQW引脚输出方波信号,其频率由RS3~RS0决定。
DM:
数据模式位,可读写,不受复位操作影响。
为0时,设置时间、日历信息为二进制数据;为1时,设置为BCD码数据。
24/12:
时间模式设置为,可读写,不受复位操作影响。
为0时,设置为12小时模式;为1时,设置为24小时模式。
DSE:
为1时,会引起两次特殊的时间更新;4月的第一个星期日凌晨1:
59:
59会直接更新到3:
00:
00,10月的最后一个星期日凌晨1:
59:
59会直接更新到1:
00:
00;为0时,时间信息正常更新,此位可读写,不受复位操作影响。
寄存器C字节内容如下:
MSBLSB
IRQF
PF
AF
UF
0
0
0
0
IQRF:
中断申请标志位。
为1时,/IRQ引脚为低,产生中断申请。
当PF、PIE为1时或者AF、ATE为1或者UF、UIE为1时,此位为1,否则置0.
PF:
中期中断标志位。
为1时,它是只读位,和PIE位状态无关,由复位操作或者寄存器C操作清除。
AF:
闹钟中断标志位。
为1时,表示当前时间和闹钟设定时间一至,由复位操作或读寄存器C操作清除。
UF:
数据更新结束中断标志位。
每个更新周期后此位都会置1,当UIE位位置1时,UF若为1就会引起IRQF置1,将驱动/IRQ引脚为低电平,申请中断。
此位由复位操作或读寄存器C操作清除。
寄存器D字节的内容如下:
MSBLSB
0
0
0
0
0
0
0
0
VRT;RAM和时间有效位。
用于指示和VBAT引脚连接的电池状态。
此位不可写,也不受操作为影响,正常情况下读取时总去为1,如果出现读取为0的情况,则表示电池耗尽,时间数据和RAM中的数据就会出现问题。
芯片DS12CR887的113字节普通RAM空间为非易失性RAM空间,他不专门用于某些特别功能,而是可以在未处理器程序中作为非易失性内存空间使用。
2.31602LCD液晶显示屏
2.3.11602字符型LCD简介
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,本设计采用16列*2行的字符型LCD1602带背光的液晶显示屏。
1602LCD主要技术参数如下:
1、显示容量:
16×2个字符
2、芯片工作电压:
4.5—5.5V
3、工作电流:
2.0mA(5.0V)
4、模块最佳工作电压:
5.0V
5、字符尺寸:
2.95×4.35(W×H)mm
2.3.21602LCD引脚功能说明
各引脚接口说明如表所示:
表2-11602LCD引脚功能说明
Tab.2-1The1602LCDpinfunctiondescription
编号
符号
引脚说明
编号
符号
引脚说明
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
背光源负极
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
2.3.31602LCD的指令说明及时序
1602液晶模块内部的控制器共有11条控制指令,如表2-2所示:
表2-2字符控制命令
Tab.2-2charactercontrolcommand
序号
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清显示
0
0
0
0
0
0
0
0
0
1
2
光标返回
0
0
0
0
0
0
0
0
1
*
3
置输入模式
0
0
0
0
0
0
0
1
I/D
S
4
显示开/关控制
0
0
0
0
0
0
1
D
C
B
5
光标或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符发生存贮器地址
0
0
0
1
字符发生存贮器地址
8
置数据存贮器地址
0
0
1
显示数据存贮器地址
9
读忙标志或地址
0
1
BF
计数器地址
10
写数到CGRAM或DDRAM)
1
0
要写的数据内容
11
从CGRAM或DDRAM读数
1
1
读出的数据内容
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标。
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
芯片时序表如下:
表2-3芯片时序表
Tab.2-3chiptimingtable
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
输入
RS=L,R/W=L,D0—D7=指令码,E=高脉冲
输出
无
读数据
输入
RS=H,R/W=H,E=H
输出
D0—D7=数据
写数据
输入
RS=H,R/W=L,D0—D7=数据,E=高脉冲
输出
无
基本操作时序表
读写操作时序如图2-6和2-7所示:
图2-6读操作时序
Fig.2-6readtiming
图2-7写操作时序
tab.2-7writeoperationsequence
2.3.41602LCD的RAM地址映射及标准字库表
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图2-8是1602的内部显示地址。
图2-8液晶内部显示地址
Fig.2-8LCDinternaldisplayaddress
例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?
这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。
每次输入指令前都要判断液晶模块是否处于忙的状态。
2.3.51602LCD的一般初始化(复位)过程
1、延时15mS
2、写指令38H(不检测忙信号)
3、延时