基于DS12C887时钟芯片的多功能万年历设计

上传人:cn****1 文档编号:546188284 上传时间:2023-12-11 格式:DOC 页数:12 大小:88KB
返回 下载 相关 举报
基于DS12C887时钟芯片的多功能万年历设计_第1页
第1页 / 共12页
基于DS12C887时钟芯片的多功能万年历设计_第2页
第2页 / 共12页
基于DS12C887时钟芯片的多功能万年历设计_第3页
第3页 / 共12页
基于DS12C887时钟芯片的多功能万年历设计_第4页
第4页 / 共12页
基于DS12C887时钟芯片的多功能万年历设计_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《基于DS12C887时钟芯片的多功能万年历设计》由会员分享,可在线阅读,更多相关《基于DS12C887时钟芯片的多功能万年历设计(12页珍藏版)》请在金锄头文库上搜索。

1、一、系统的结构和工作原理1.系统结构 此次课程设计的万年历,以AT89S52单片机为主控核心,由LCD显示屏、DS12C887时钟芯片、温度传感器DS18B20、蜂鸣器、功能键盘、复位电路、晶振、电源模块等组成,系统结构框图如图1所示。图1 系统结构框图2.工作原理主控制器每隔一段时间(小于一秒钟)读一次时钟芯片的内部寄存器的值,将读出的时间、星期、温度等值实时显示在LCD液晶屏上。同时,主控制器不断的扫描按键电路和温度测量电路,当有按键按下时,识别出按键的值并调整相应的时间、星期值再写入时钟芯片内部。温度数据由测量电路获得的环境温度值送人显示电路。二、硬件设计1.主控核心AT89S52单片机

2、AT89S52是一个低功耗,高性能CMOS8位单片机,具有8K 在系统可编程Flash 存储器。采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。2.DS12C887时钟电路DS12C887与计算机常用的时钟芯片MC146818和DS12887管脚兼容,可直接替换。采用DS12C887芯片设计的时钟电路无需任何外围电路和器件,并且有良好的微机接口。DS12C887芯片内有微功耗,外围接口简单,精度高,工作稳定可靠等优点,广泛用于各种需要较高精度的实时时钟系统中。DS12C887主要功能如下:(1)内含一个锂电池,断电后运行十年以上不丢失数据;(

3、2)计秒、分、时、天、星期、日、月、年、并有闰年补偿功能;(3)二进制数码或BCD码表示时间,日历和定闹;(4)12小时或24小时制,12小时时钟模式带有PM和AM指示,有夏令时功能;(5)Motorola和Intel总线时序选择;(6)有128个字节RAM单元与软件接口,其中14个字节作为时钟和控制寄存器,114 字节为通用RAM,所有RAM单元数据都具有掉电保护功能;(7)可编程方波信号输出;(8)中断信号输出(IRQ)和总线兼容、定闹中断、周期性中断、时钟更新周期、结束 中断可分别由软件屏蔽,也可分别进行测试;DS12C887时钟芯片和单片机的硬件连接如下图2 :图2 DS12C887与

4、单片机的连接3.DS18B20温度传感器采用数字式温度传感器DS18B20,其仅需一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量范围广等优点。DS18B20特性如下:(1) 独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处 理器与DS18B20的双向通讯。(2)在使用中不需要任何外围元件。(3)可用数据线供电,电压范围:+3.0+5.5V。(4)测温范围:-55+125。固有测温分辨率为0.5。(5)通过编程可实现912位的数字读数方式。(6)用户可自设定非易失性的报警上下限值。

5、(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。 DS18B20芯片的连接如下图3所示:图3 DS18B20连接电路4.LCD1602显示屏本设计采用1602字符型LCD,可显示两行,每行16个字符,不能显示汉字,内置含128个字符的ASCII字符集字库,只有并行接口,无串行接口。 单片机的P2口与LCD的数据端口连接,用于数字信号的读取,控制端RS 、R/W分别与单片机的P3.3和P3.1相连。电路连接如图4所示。图4 1602LCD硬件电路5.其它硬件电路蜂鸣器电路:为了实现闹钟功能,选

6、择蜂鸣器作为闹铃。采用PNP型9015三极管,发射极e脚连接+5V,基极b脚连接10K电阻后接到单片机P1.6口上,c脚连接蜂鸣器。电路如图5所示。图5 蜂鸣器电路功能键盘:本设计采用了4个键盘,分别实现万年历时间日期的调整键、闹钟设置键、增加键(也为闹钟开启键)、减小键组成,分别连接P1.0P1.3口。复位电路:89S52的复位输入引脚RST为其提供了初始化的手段,可以使程序从指定处开始执行,在MCS-52的时钟电路工作后,只要RST引脚上出现超过两个机器周期以上的高电平时,即可产生复位的操作.只要RST保持高电平,则MCS-52循环复位.只有当RST由高电平变低电平以后,MCS-52才从0

7、000H地址开始执行程序.本系统采用按键复位方式的复位电路。电源电路:电路采用5V电源进行供电,为了得到稳定的直流电源,通过电源处理电路进行调理,得到稳定电压。三、软件设计本次系统设计软件部分采用模块化结构,由主程序DS12C887子程序、DS18B20子程序、LCD1602子程序构成。模块程序设计法的主要优点是:单个模块比起一个完整的程序易编写及调试;模块可以共存,一个模块可以被多个任务在不同条件下调用;模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。1.主程序说明及流程图主程序主要实现了从DS12C887各时间单元中读出数据和DS18B20传感器中读取数据,并送到LCD1602

8、中显示的功能,同时检测有没有按键按下,如果有键被按下,则执行按键处理子程序。首先进行DS12C887时钟芯片、DS18B20芯片和LCD1602的初始化函数,然后进行按键扫描,不断地检测按键是否按下,读取DS12C887时钟芯片、DS18B20检测环境温度的数据,并且送到液晶显示器显示;当数据发生变化时候,重新进行扫描写入。主程序流程图如图6。图6 主程序流程图2.DS12C887流程图及初始化程序进入主程序后,DS12C887首先进行初始化设置,若串行口有数据,最后则调用函数从日历时钟芯片获取日历时钟信息,调用显示函数显示日历时钟信息显示出来,重复进行。这部分包括DS12C887某个单元写、

9、读DS12C887某个单元的内容和DS12C887设定时间。DS12C887的流程图如图7所示。开始 DS12C887初始化 调用函数获取时钟信息 送数据显示 图7 DS12C887的流程图DS12C887的子程序:#ifndef DS12C887_H #define DS12C887_H #include#include#define uchar unsigned char#define uint unsigned intsbit fm=P14;sbit ds_as=P35;sbit ds_wr=P36;sbit ds_ds=P37;sbit ds_cs=P20;sbit ds_irq=P3

10、2;char second,minute,hour,asecond,aminute,ahour,day,week,month,year;void ds_write(uchar add,uchar date) /向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;uchar ds_read(uchar add) /从DS12C887读数据的函数uchar ds_date;ds_as=1;ds_ds=1;ds_wr=1;ds_cs=0;P0=add

11、;ds_as=0;ds_ds=0;P0=0xff;ds_date=P0;ds_ds=1;ds_as=1;ds_cs=1;return ds_date;void settime() /设定时间初始值的函数第一次上电使用,之后可以屏蔽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_wr

12、ite(8,1);ds_write(9,9);void setalarm() /将设定的闹钟时间写进DS12C887的函数ds_write(1,asecond);ds_write(3,aminute);ds_write(5,ahour); void beep() /闹钟的声音函数 fm=0;delay(100);fm=1;delay(20);fm=0;delay(100);fm=1;#endif3.DS18B20流程图及初始化程序 进入主程序后,DS18B20首先进行初始化设置,然后通过对环境温度的检测,调用显示函数显示温度信息,重复进行。DS18B20的流程图如图8所示。开始 DS18B20

13、初始化 检测环境温度获取信息 送数据显示 图8 DS18B20的流程图 DS18B20的子程序:#ifndef DS18B20_H#define DS18B20_H#include#include#define uchar unsigned char#define uint unsigned intsbit ds18b20=P16;uchar flag2/*零下标志位*/;void delay1(uint z) /DS18B20 延时函数uint i;while(z)i=200;while(i0)i-;z-;void dsreset() /发送复位和初始化uint i;ds18b20=0;i=

14、103;while(i0)i-;ds18b20=1;i=4;while(i0)i-;bit tmpread_bit() /读取数据的一位uint i;bit dat;ds18b20=0;i+;ds18b20=1;i+;i+;dat=ds18b20;i=8;while(i0)i-;return dat;uchar tmpread_byte() /读一个字节uchar i,j,dat;dat=0;for(i=1;i=8;i+)j=tmpread_bit();dat=(j1);return dat;void tmpwrite(uchar dat) /写一个字节uint i;uchar j;bit testb;for(j=

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 国内外标准规范

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号