您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 基于DS12C887时钟芯片的多功能万年历设计
一、系统的结构和工作原理1.系统结构此次课程设计的万年历,以AT89S52单片机为主控核心,由LCD显示屏、DS12C887时钟芯片、温度传感器DS18B20、蜂鸣器、功能键盘、复位电路、晶振、电源模块等组成,系统结构框图如图1所示。AT89S52单片机温度传感器DS18B20DS12C887时钟芯片LCD显示屏(1602)蜂鸣器复位电路功能键盘电源模块图1系统结构框图2.工作原理主控制器每隔一段时间(小于一秒钟)读一次时钟芯片的内部寄存器的值,将读出的时间、星期、温度等值实时显示在LCD液晶屏上。同时,主控制器不断的扫描按键电路和温度测量电路,当有按键按下时,识别出按键的值并调整相应的时间、星期值再写入时钟芯片内部。温度数据由测量电路获得的环境温度值送人显示电路。二、硬件设计1.主控核心—AT89S52单片机AT89S52是一个低功耗,高性能CMOS8位单片机,具有8K在系统可编程Flash存储器。采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。2.DS12C887时钟电路DS12C887与计算机常用的时钟芯片MC146818和DS12887管脚兼容,可直接替换。采用DS12C887芯片设计的时钟电路无需任何外围电路和器件,并且有良好的微机接口。DS12C887芯片内有微功耗,外围接口简单,精度高,工作稳定可靠等优点,广泛用于各种需要较高精度的实时时钟系统中。DS12C887主要功能如下:(1)内含一个锂电池,断电后运行十年以上不丢失数据;(2)计秒、分、时、天、星期、日、月、年、并有闰年补偿功能;(3)二进制数码或BCD码表示时间,日历和定闹;(4)12小时或24小时制,12小时时钟模式带有PM和AM指示,有夏令时功能;(5)Motorola和Intel总线时序选择;(6)有128个字节RAM单元与软件接口,其中14个字节作为时钟和控制寄存器,114字节为通用RAM,所有RAM单元数据都具有掉电保护功能;(7)可编程方波信号输出;(8)中断信号输出(IRQ)和总线兼容、定闹中断、周期性中断、时钟更新周期、结束中断可分别由软件屏蔽,也可分别进行测试;DS12C887时钟芯片和单片机的硬件连接如下图2:EA/VPP31XTAL119XTAL218RESET9P3.7/RD17P3.6/WR16P3.2/INT012P3.3/INT113P3.4/T014P3.5/T115P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P0.039P0.138P0.237P0.336P0.435P0.534P0.633P0.732P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN29ALE/PROG30P3.1/TXD11P3.0/RXD10VCC40GND20U1AT89S52VCC+C1210uFR910KS17Y112MHzC930pFC1030pFP00P01P02P03P04P05P06P07VCCP20P21P22P23P24P25P27P26P10P11P12P04P13P14P15P16P00P17P01P32P02P30P03P31P05P33P06P34P07P35P20P35WRP37P32P34242322212019181716151413121110987654321DS12C887CSASR/WNCDSRESETIRQNCNCNCSQWVCCGNDAD7AD6AD5AD4AD3AD2AD1AD0NCMOTNC123456789RP1RESPACKVCCU3P36P37图2DS12C887与单片机的连接3.DS18B20温度传感器采用数字式温度传感器DS18B20,其仅需一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量范围广等优点。DS18B20特性如下:(1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。(2)在使用中不需要任何外围元件。(3)可用数据线供电,电压范围:+3.0~+5.5V。(4)测温范围:-55~+125℃。固有测温分辨率为0.5℃。(5)通过编程可实现9~12位的数字读数方式。(6)用户可自设定非易失性的报警上下限值。(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。DS18B20芯片的连接如下图3所示:图3DS18B20连接电路4.LCD1602显示屏本设计采用1602字符型LCD,可显示两行,每行16个字符,不能显示汉字,内置含128个字符的ASCII字符集字库,只有并行接口,无串行接口。单片机的P2口与LCD的数据端口连接,用于数字信号的读取,控制端RS、R/W分别与单片机的P3.3和P3.1相连。电路连接如图4所示。P20P21P22P23P24P25P26P2712345678910111213141516VSSVDDV0RSR/WEDB0DB1DB2DB3DB4DB5DB6DB7BLABLKR310KP33P31P30U4VCCLCD1602VCC图41602LCD硬件电路5.其它硬件电路蜂鸣器电路:为了实现闹钟功能,选择蜂鸣器作为闹铃。采用PNP型9015三极管,发射极e脚连接+5V,基极b脚连接10K电阻后接到单片机P1.6口上,c脚连接蜂鸣器。电路如图5所示。VCC10KR2PNPU5BELLP1.6P14VCC5KR1DS18B20123U2图5蜂鸣器电路功能键盘:本设计采用了4个键盘,分别实现万年历时间日期的调整键、闹钟设置键、增加键(也为闹钟开启键)、减小键组成,分别连接P1.0~P1.3口。复位电路:89S52的复位输入引脚RST为其提供了初始化的手段,可以使程序从指定处开始执行,在MCS-52的时钟电路工作后,只要RST引脚上出现超过两个机器周期以上的高电平时,即可产生复位的操作.只要RST保持高电平,则MCS-52循环复位.只有当RST由高电平变低电平以后,MCS-52才从0000H地址开始执行程序.本系统采用按键复位方式的复位电路。电源电路:电路采用5V电源进行供电,为了得到稳定的直流电源,通过电源处理电路进行调理,得到稳定电压。三、软件设计本次系统设计软件部分采用模块化结构,由主程序﹑DS12C887子程序、DS18B20子程序、LCD1602子程序构成。模块程序设计法的主要优点是:单个模块比起一个完整的程序易编写及调试;模块可以共存,一个模块可以被多个任务在不同条件下调用;模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。1.主程序说明及流程图主程序主要实现了从DS12C887各时间单元中读出数据和DS18B20传感器中读取数据,并送到LCD1602中显示的功能,同时检测有没有按键按下,如果有键被按下,则执行按键处理子程序。首先进行DS12C887时钟芯片、DS18B20芯片和LCD1602的初始化函数,然后进行按键扫描,不断地检测按键是否按下,读取DS12C887时钟芯片、DS18B20检测环境温度的数据,并且送到液晶显示器显示;当数据发生变化时候,重新进行扫描写入。主程序流程图如图6。开始模块初始化读/写日期、时间、温度信息分离出日期、时间、温度值日期、时间修改子程序显示自动更新子程序LCD模块显示对应内容定时闹钟设置子程序闹铃响程序返回图6主程序流程图2.DS12C887流程图及初始化程序进入主程序后,DS12C887首先进行初始化设置,若串行口有数据,最后则调用函数从日历时钟芯片获取日历时钟信息,调用显示函数显示日历时钟信息显示出来,重复进行。这部分包括DS12C887某个单元写、读DS12C887某个单元的内容和DS12C887设定时间。DS12C887的流程图如图7所示。图7DS12C887的流程图DS12C887的子程序:#ifndefDS12C887_H#defineDS12C887_H开始DS12C887初始化调用函数获取时钟信息送数据显示#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintsbitfm=P1^4;sbitds_as=P3^5;sbitds_wr=P3^6;sbitds_ds=P3^7;sbitds_cs=P2^0;sbitds_irq=P3^2;charsecond,minute,hour,asecond,aminute,ahour,day,week,month,year;voidds_write(ucharadd,uchardate)//向DS12C887写数据的函数{ds_cs=0;ds_as=1;ds_ds=1;ds_wr=1;P0=add;ds_as=0;ds_wr=0;P0=date;ds_wr=1;ds_as=1;ds_cs=1;}uchards_read(ucharadd)//从DS12C887读数据的函数{uchards_date;ds_as=1;ds_ds=1;ds_wr=1;ds_cs=0;P0=add;ds_as=0;ds_ds=0;P0=0xff;ds_date=P0;ds_ds=1;ds_as=1;ds_cs=1;returnds_date;}voidsettime()//设定时间初始值的函数第一次上电使用,之后可以屏蔽{ds_write(0x0b,0x26);//设置24小时模式,数据二进制格式ds_write(0x0a,0x20);//打开振荡器ds_write(0,55);ds_write(1,0);ds_write(2,59);ds_write(3,0);ds_write(4,23);ds_write(5,0);ds_write(6,5);ds_write(7,1);ds_write(8,1);ds_write(9,9);}voidsetalarm()//将设定的闹钟时间写进DS12C887的函数{ds_write(1,asecond);ds_write(3,aminute);ds_write(5,ahour);}voidbeep()//闹钟的声音函数{fm=0;delay(100);fm=1;delay(20);fm=0;delay(100);fm=1;}#endif3.DS18B20流程图及初始化程序进入主程序后,DS18B20首先进行初始化设置,然后通过对环境温度的检测,,调用显示函数显示温度信息,重复进行。DS18B20的流程图如图8所示。图8DS18B20的流程图DS18B20的子程序:#ifndefDS18B20_H#defineDS18B20_H#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintsbitds18b20=P1^6;ucharflag2/*零下标志位*/;voiddelay1(uintz)//DS18B20延时函数开始DS18B20初始化检测环境温度获取信息送数据显示{uinti;while(z){i=200;while(i0)i--;z--;}}voiddsreset()//发送复位和初始化{uinti;ds18b20=0;i=103;while(i0)i--;ds18b20=1;i=4;while(i0)i--;}bittmpread_bit()//读取数据的一位{uinti;bitdat;ds18b20=0;i++;ds18b20=1;i++;i++;dat=ds18b20;i=8;while(i0)i--;returndat;}uchartmpread_byte()//读一个字节{uchari,j,dat;dat=0;f
本文标题:基于DS12C887时钟芯片的多功能万年历设计
链接地址:https://www.777doc.com/doc-4027693 .html