韩刘宇
(天津工业大学 电子与信息工程学院通信工程专业 300384)
基本设计要求
(1)单片机控制日历时钟芯片实现年份、月份、日期、星期、时间信息的获取。
(2)在LCD上对年份、月份、日期、星期、时间信息进行显示。
(3)可以对年份、月份、日期、星期、时间进行修改。
(4)具有掉电后时间信息不丢失的功能。
发挥部分
(1)具有闹钟功能。可设置闹铃时间,当闹铃时间到时,进行闹铃。通过按键可解除闹铃。
(2)具有整点报时功能。
(3)程序固化到单片机中,并且可直接进行程序下载和更新。
本电子钟由单片机、定时、显示、按键、定时提醒、ISP在线编程6部分组成。产品以AT89S52单片机、DS12C887时钟芯片为核心,显示部分采用LCD1602,使用4个按键和1蜂鸣器,加上ISP在线编程模块。DS12C887时钟芯片产生时钟信号和存放闹铃数据,其精度和可靠性高,在单片机掉电状态下能正确走时、保存闹铃数据长达10年,故能实现停电重起后定时设计不变的关键设计指标。AT89S52单片机实时获取DS12C887的时间和闹铃数据,驱动LCD和蜂鸣器。显示部分的LCD有高亮度,低成本等诸多优点。蜂鸣器作闹铃提示切合实际、直观。按键方面采用软件消抖,减少硬件电路的同时增加了可靠性。本产品完全达到设计要求,辅助的ISP在线编程让产品具有强大的扩展功能,使其不仅仅是一个电子钟,更是一个单片机试验平台。
DS12C887时钟芯片能够产生世纪、年、月、日、时、分、秒等信息,同时 DS12C887时钟芯片中自带有锂电池,外部掉电时,通过锂电池的作用其内部时间信息还能够保持相当长的时间;时间记录分为十二小时制和二十四小时制两种方式。在十二小时制模式中,AM和PM用来分别表示上午和下午;时间的表示方法也有两种,利用二进制数表示或利用BCD码表示;DS12C887时钟芯片带有 128字节的 RAM,其中有113字节通用 RAM用来给用户使用,11字节的RAM是用来存储时间信息的,4字节 RAM是用来存储 DS12C887的控制信息的,被我们称之为控制寄存器。
3.2.1 主要特性
单片机AT89S52是ATMEL公司生产的低电压、高性能COMS 8位单片机,它有128Byte RAM、8KByte可编程FLASH ROM,指令系统与MCS-51系列兼容。采用KEILC51编译软件,PROTUES仿真平台,能方便实现程序的仿真。ISP在线编程,能方便的更新程序。可对选用的单片机特点进行描述,可画出单片机最小系统并描述电路连接。
3.2.2 单片机引脚说明
AT89S52是采用40个引脚封装的双列直接 DIP结构,40个引脚中,外置石英振荡器的时钟线有两根,正电源和地线有两根,还有32个 I/O口,中断口线与P3口线是复用的。我们对引脚的功能加以说明:
·Pin20:是接地脚。
·Pin40:是正电源脚,接+5V电源,用来正常工作或对片内EPROM烧写程序时。
·Pin19:是时钟XTAL1脚,为片内振荡电路输入端。
·Pin18:是时钟XTAL2脚,为片内振荡电路输出端。时钟有两种方式,方式一为片内时钟振荡方式,但需在18和19两个引脚外接石英晶体和振荡电容。方式二为外部时钟方式,即将XTAL1接地,将外部时钟的信号从XTAL2脚输入。
·输入输出 (I/O)Pin32-Pin39引脚是 P0.0-P0.7的输入输出脚,Pin1-Pin8引脚是 P1.0-P1.7的输入输出脚,Pin21-Pin28引脚为 P2.0-P2.7输入输出脚,Pin10-Pin17引脚为P3.0-P3.7输入输出脚,上述的输入输出脚的功能是:
P3口(10脚~17脚):为8位准双向 I/O口,由于高阻状态不能在这种接口输出中产生,输入也不能锁存,故不是真正的双向 I/O口。 P3口能驱动 (吸收或输出电流)4个TTL负载。P除了作为一般的准双向通用I/O口使用外,p3口每个引脚还有第二功能。P3口的八条线都被我们定义有第二功能[6],如表4.1所列。
P2口(21脚~28脚):为8位准双向 I/O口。当我们访问外部存储器时,它可以被我们作为高8位地址总线 送出高8位地址。P2可以驱动(吸收或输出电流)4个TTL的负载。
P1口(1脚~8脚):为 8位准双向 I/O口。P1口能驱动4个TTL负载。
P0口(32脚~39脚):不同于其他的三个端口,它为双向8位三态I/O口,外接存储器与地址总线的低八位及数据的总线进行复用,8个TTL负载能以吸收电流的方式被驱动。
P3引脚第二功能:3.0 RXD(串行口的输入端)
3.1 TXD(串行口的输出端)
3.2 INT0(外部中断0请求输入端,低电平的时候有效)
3.3 INT1(外部中断0请求输入端,低电平的时候有效)
3.4 T0(定时器/计数器0的技数脉冲输入端)
3.5 T1(定时器/计数器0的技数脉冲输入端)
3.6 WR(片外数据存储器写选通信号输出端,低电平的时候有效)
3.7 RD(片外数据存储器写选通信号输出端,低电平的时候有效)
·Pin9:RESET/Vpd为复位信号复用脚,单片机通电时,时钟电路就开始工作,在RESET引脚上产生24个时钟周期以上的高电平,则系统即会初始复位。初始化后,程序计数器 PC会指向 0000H,P0-P3输出口都为高电平时,则堆栈指钟就会写入 07H,而其它专用的寄存器被清“0”。当RESET从高电平下降为低电平后,系统就会从 0000H开始执行程序。然而,初始复位并不使RAM(包括工作寄存器R0-R7)的状态发生变化,当单片机复位后它的状态为:
·P0~P3=FFH,各口可用于输出,也可用于输入;
·SP=07H,第一个入栈内容将写入08H单元;
·IP、IE和 PCON的有效位为 0,各中断源处于低优先级且均被关断,串行通讯的波特率不加倍;
·PSW=00H,当前工作寄存器为0组。
·Pin30:ALE/PROG是访问外部程序器时,ALE输出的用来锁存地址的低位字节。当访问内部程序存储器的时候,ALE端将会有个 以1/6时钟频率为周期的正脉冲信号,此信号是用于识别单片机工作与否的,我们也可以把它当作一个时钟向外输出。还有一个特点就是,当我们访问外部程序存储器,ALE会自动跳过一 个脉冲。而如果单片机是EPROM的话 ,在其编程的时候,PROG会用于输入编程的脉冲。
·Pin29:PESN是访问外部程序存储器时,输出负脉冲选通信号的引脚,PC其16位的地址数据会出现在P0和P2中,外部程序存储器会把其指令数据放到P0口的上面,而CPU负责读入执行。
·Pin31:EA/Vpp是程序存储器内外部选通线,8051和8751单片机中,其内部有 4kB的程序存储器,当EA是高电平而且程序地址不大于4kB时,读取的就是内部程序存储器的指令数据,而超过4kB地址则读取的就是外部指令的数据。但是如果EA是低电平,不管地址的大小,都是读取外部程序存储器的指令。显而易见,对于内部没有程序存储器 8031,EA端就必须要接地。
?
振荡器是数字钟的核心。振荡器的稳定度及频率的精确度决定了数字钟计时的准确程度,通常选用石英晶体构成振荡器电路。石英晶体振荡器的作用是产生时间标准信号。
本电路采用1602LCD,由于数码管只能显示数字数码管显示内容单一,液晶则比较丰富,而这个实验中,要求功能较多,为了使电路显示的更清晰明了,本实验最终决定采用1602LCD 显示。且液晶显示已占居社会主流,优势明显。
鉴于使用中断电路会增加硬件电路的复杂度,本电路采用独立按键的方法,只需在程序中加入扫描程序即可。其中P1.4接按键1,P1.5接按键2,P1.6接按键3,P1.7接按键4。其中按键1为选择键,通过按键1可以将光标移动到要调节的选项;按键2为加键,通过按键2可以调整时间和闹钟的各项数值加一;按键3为减键,通过按键3可以调整时间和闹钟的各项数值减一;按键4为闹钟,通过按键4可以调节闹钟。
void main()//主函数
{
init();//调用初始化函数
while(1)
{
keyscan();//按键扫描
if(flag_ri==1)//当闹钟中断时进入这里
{
di();
delay(100);
di();
delay(500);
}
if(flag==0&&flag1==0)//正常工作时进入这里
{
keyscan();//按键扫描
year=read_ds(9);//读取12C887数据
month=read_ds(8);
day=read_ds(7);
//week=read_ds(6);
shi=read_ds(4);
fen=read_ds(2);
miao=read_ds(0);
if(fen/10==0&&fen%10==0&&miao/10==0&&miao%10==0)di();
week=GetWeekFromDay(year,month,day);
write_sfm(10,miao);//送液晶显示
write_sfm(7,fen);
write_sfm(4,shi);
write_week(week);
write_nyr(3,year);
write_nyr(6,month);
write_nyr(9,day);
}
}
}
本数字时钟采用ISP下载线进行下载和供电。首先将程序下载到AT89S52芯片中。打开开关将看到开机初始画面,左侧四个按键依次设为 K1、K2、K3、K4,按K1键,将会看到光标依次挪动到秒、分、时、日、月、年,当光标移动到某个选项,例如“分”选项:按下K2,该项数值则加一,按下K3,该项数值则减一;若调节年月日选项时,调节完毕后会自动计算出该日为星期几,并且显示在LCD屏幕上。当时钟处于正常运行状态时,按下K4键,界面将转到闹铃调节界面,此时按照时钟的调节方法,设定闹铃。每当有按键按下时,蜂鸣器将会伴随响声,当时中达到整点时,蜂鸣器也将会有提示音(整点报时功能),当时钟的时间到达设定的闹铃时间,蜂鸣器将会发出连续的鸣叫声,直至按下任意键来解除此闹铃。实物效果图:
整体电路图:
[1] 倪云峰.单片机原理与应用【M】.西安:西安电子科技大学出版社,2009.
[2] 梁洁婷.单片机原理与应用【M】.北京:高等教育出版社,2002.
[3] 林国清,李见为,王崇文.一种新型日历时钟芯片[J].国外电子元器件,2002(3):61-62.