版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于AT89C51单片的DS12C887芯片电子时钟的设计 摘要: 本设计开发了一款具有日期、时间、星期和气温同步显示功能的电子时钟.工作原理是主控MCU读取实时时钟芯片DS12C887,获取时间信息,由全数字单总线结构温度传感器DS18B20读取温度信息,经MCU处理,送LCD显示,关键字: DS12C887 DS18B20 电子时前 言 随着科学技术的不断发展 , 人们对时间计量的要求越来越高 。在当今社会,电子时钟已经得到相当广泛的应用,产品多样,发展更是多元化。本作品是以STC89C51单片机作为主控芯片,使用12MHZ的晶振,使用专用时钟日历芯片DS12C887产生时间信息,时间精确
2、。软件部分以C语言为主体,用1602LCD液晶屏显示输出信息,输出信息量多,更直观、人性化。该时钟可实现人机交互,可通过提供的键盘对其进行调整。系统具有以下功能:年、月、日、时、分、秒显示;12小时/24小时模式切换,在12小时模式中,用AM和PM区分上午和下午;秒表功能;整点闹铃和报时功能,且闹钟可设置多组。本次设计的电子时钟系统由单片机最小系统,1602LCD液晶屏,时钟芯片,调整按键,蜂鸣器,电源五大部分组成。1. 课题分析 随着电子技术的发展,电子技术为人们的生活带来了越来越大的方便.本课题旨在借助实时时钟芯片DS12C887和温度传感器DS18B20 和51单片机设计一个多功能的电子
3、时钟.由于DS12C887芯片内附加锂电池,在上电情况下可以通过电源充电,断电后可以利用内部锂电池供电继续工作,在掉电重新上电后,不影响时间数据,不需重新对时,方便可靠.2. 方案论证方案一、利用单片机内部定时器产生秒信号,通过软件处理得到时间信息,送LCD显示.方案二、利用通用串行实时时钟芯片DS1302产生时间信息,利用MCU读取时间信息,送LCD 显示.方案三、通过实时时钟芯片DS12887,获取时间信息,经MCU处理,送LCD显示.方案一电路结构简单,可控性强,但断电后时间数据完全消失,再次上电后需重新设定,且由于电路本身缺陷和附加干扰较多,时间误差较大.方案二电路结构简单,时间精度较
4、高,由于使用串行数据传输,节省MCU资源,但DS1302无内置电池,掉电后,数据丢失,重新上电后需对时.方案三采用实时时钟芯片DS12C887,其内部具有内置锂电池,在掉电的情况下可以正常工作10年以上,且带有非易失性RAM,可以保证在掉电的情况下,用户的定时信息不会丢失;带有温度补偿,保证时间数据的准确.经过综合考虑,我们认为方案三满足设计需求.2.2温度部分由于只是测量气温,用数字温度传感器单总线结构DS18B20即可满足要求,该器件采用单总线结构,且数字传输,可以与CPU直接接口,电路结构简便,可靠性好.2.3主控部分选用单片微控制器AT89C52作为主控.系统方案方框图如图2.1所示.
5、 图2.1 系统方案3.方案实现31 器件简介(1)AT89C52 AT89C52是ATMEL公司生产的通用低功耗8位CMOS微控器,具有8051内核和8KB的可编程Flash程序存储空间以及256字节RAM.有32个通用IO口线和全双工串口,两个数据指针、两个16位可编程计数器/定时器、8个2级优先级中断源,具有片内时钟电路,通过简单的外接器件即可实现时钟电路.(2)DS12C887引脚结构及其功能如图3.1.图3.1 DS12C887引脚结构AD0-AD7:地址/数据总线NC :空脚MOT :总线模式选择CS :片选信号AS :地址锁存信号R/W :写信号(intel总线模式下)DS :读
6、信号(intel总线模式下)RESET :复位信号IRQ : 中断请求输岀VCC :+5V电源GND :电源地DS12C887是美国DALLAS半导体公司生产的实时时钟芯片.采用24 引脚双列直插式的封装形式.芯片的晶体振荡器、振荡电路、充电电路和可充电锂电池等一起封装在芯片内部,组成一个加厚的集成电路模块.电路通电时,其内部充电电路便自动对其内部电池充电.可保证时钟数据10 年内不会丢失.DS12C887内部设有方便的接口电路,接口设计简便,使其与各种微处理器的接口大大简化.使用时无需外围电路元件,通过对MOT引脚的电平控制,可以实现与不同的计算机总线连接.DS12C887 能够自动存取并更
7、新当前的时间,CPU 可通过读取DS12C887 的内部时标寄存器得到当前的时间和日历,也可通过选择二进制码或BCD 码初始化芯片的10 个时标寄存器.其中114 字节的非易失性静态RAM 可供用户使用,可以在控制器掉电的情况下,保存一些重要的数据.DS12C887 的4 个状态寄存器用来控制和指出DS12C887 模块当前的工作状态,除数据更新周期外,程序可随时读写这4 个寄存器.其内部结构如下图3.2.图3.2 DS12C887内部结构(3)DS18B20DS18B20是美国DALLAS半导体公司生产的可组网数字式温度传感器,在其内部使用了在板(ON-B0ARD)专利技术.全部传感元件及转
8、换电路仅集成在形如三极管的一个集成电路内.DS18B20采用单总线接口方式,与微处理器连接时仅需要一条总线即可实现微处理器与DS18B20的双向通讯;支持多点组网功能,多个DS18B20可以并联在一条总线上,即可实现多点测温;在使用中不需要任何外围元件.测温范围为55125,结果以9位数字量方式串行传送.DS18B20测温原理如图3.3所示.图3.3 DS18B20内部结构图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1.高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入.计数器1和温度寄存器被预置在55所对应的一个基数值.计数器1对
9、低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1 ,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶体振荡器产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度.其内部带有非线性修正,确保温度数据的准确性.DS18B20的测温分辨率为0.5以9位数据格式表示,其中最低有效位(LSB)由比较器进行0.25比较,当计数器1中的余值转化成温度后低于0.25时,清除温度寄存器的最低位(LSB),当计数器1中的余值转化成温度后高于0.25,置位温度寄存器的最低位(LSB),DS18B20温度
10、数据格式如表3.1所示.表3.1 DS18B20温度数据格式DS18B20采用12位二进制数据表示温度,分成两个字节,低字节低四位为小数位,低字节高四位和高字节低四位组成温度信息的8位整数位,其中第一位为符号位,为0表示温度为正值,为1表示温度为负值.当温度为负值时,数据采用补码存放.高字节高四位无效,与符号位保持一致.温度与数据对应关系如表3.2所示. 表3.2 部分温度对应数据3.2硬件电路设计本课题涉及电路原理图和PCB图均由Altium Designer Summer 09绘制. (1)电源部分图3.7 整机电源电路由于电路微控器供电电压为5V,osyno6188供电电压为3V或4.5
11、V,osyno6188对电源电压精度要求不高,决定整机采用5V电源供电,在电源处串联一只1N4003二极管,为osyno6188供电,1N4003为硅管,正向导通压降在0.7V左右,经过二极管后,得到约4.3V电压,为osyno6188供电.电源电路为普通稳压电源电路,由于不是本项目主要方面,不再赘述.(2)AT89C52最小系统电路图3.8 AT89C52单片机最小系统电路由震荡电路,复位电路和单片机构成最小系统.震荡电路为单片机提供工作时钟,由石英晶体和补偿电容构成.由于语音部分需要1200bps波特率,石英晶体选取11.0592MHz,保证波特率零误差,补偿电容选取30pF瓷片电容.复位
12、电路在上电时为单片机提供复位信号,由10uF电容和10K电阻构成的RC充电电路构成,当系统复位上电瞬间,电源通过电阻R为电容充电,在电阻上得到下降的指数充电电压,由高电平经过一段时间到达低电平,提供单片机需要的高脉冲复位信号.电源部分电容为去耦电容.EA拉高,MCU上电后,从内部程序存储器开始执行.(3)osyno6188及外围电路设计.图3.9 osyno6188及外围电路系统采用4.5V电源供电模式,电源VDD由电源电路中VCC串接二极管后获得.电源电路、复位电路以及时钟电路参考osyno6188用户手册.RXD、TXD为串行总线接口,分别连接主控MCU的TXD、RXD端.(4)DS12C
13、887与AT89C52接口电路设计. 图3.10 DS12C887接口电路DS12C887的AD0-AD7为地址数据复用总线,与控制器地址数据总线(P0口)直接连接,R2为上拉电阻;MOT为总线模式选择引脚,接地选择INTEL总线连接方式;R/W在INTEL总线模式下位写使能,接控制器读信号WR(P3.6)端;DS在INTEL总线模式下为读使能信号,接控制器读信号RD(P3.6)端;AS为地址锁存,接控制器地址锁存信号ALE(30脚)端;RST接电源拉高,片选CS直接接地使能。由于液晶显示器、DS18B20与控制器接口比较简单,不再分开论述。整机电路图如图3.11所示.电路板采用单面板制作,电
14、路板图由Altium Designer Summer 09绘制.将PCB文件底层打印到转印纸磨光面上,并按电路板大小留1cm左右边缘裁剪备用.把比电路板略大的覆铜板用细砂纸打磨干净,并将转印纸带墨一面覆盖到覆铜面上,一边用胶带粘牢,然后将粘胶带一边送入转印机转印,转印完成后打孔,放入三氯化铁溶液中腐蚀,大约15分钟左右腐蚀完成,用清水冲洗,将焊盘处用小刀将油墨小心刮开,其余部分油墨不再处理,一是比较美观,二是对铜膜具有保护作用,防止氧化.焊接经过检测过的电子元件,制作完成.3.3 软件设计(1)功能分析 根据课题要求,软件应该能实现以下功能:1)驱动LCD1602显示.2)从DS12C887中
15、读取时间数据,并写入调时信息和闹钟信息.3)扫描键盘,实现人机交互,满足用户调时、定闹的需求.4)实现控制器与DS18B20单总线接口,读取温度信息.(2)设计流程本课题所有程序均由C语言编写.开发环境为keil uvision2. 1)主程序设计 主程序流程图如图所示图3.13 主程序流程图主程序作用是当系统上电后,首先对系统进行初始化(包括MCU的串行通信设置和LCD的初始化)然后读取时间信息和温度信息,检查是否需要更新时间缓冲存储区,如果系统处于正常显示模式,则更新时间缓存区,并同步显示,若系统处于调整时间模式下,则停止对时间缓冲区的更新,显示时间与时间缓存区同步,当退出调时模式时,更新
16、到DS12C887的时标寄存器中.主程序还负责检测当前时间是否为整点或等于设定报时时间,在整点或定时时间调用报时函数,实现整点报时和定时2)DS12C887接口程序.DS12C887与控制器通过总线连接,主控器采取读写外部存储器的方法读取时间信息和写入调时和定时信息.DS12C887的时标寄存器地址为0-13字节,具体分布如图所示. 图3.14 DS12C887存储器结构其中10-13字节分别为寄存器A-D.其中寄存器C、D为只读.寄存器A机构如图所示: 表3.5 DS12C887寄存器A结构UIP为更新标志位,标志芯片是否即将进行更新.当UIP为1时,表明更新即将开始;为0时,表示在至少24
17、4s内芯片不会进行更新,此时可以通过读写相应字节获取时间信息和设置信息.UIP位为只读位且不受复位信号影响,通过把B寄存器中的SET位置1将UIP位清零并禁止时间更新.DV0-DV2用来开关晶体振荡器和复位分频器,本课题中不需设置.RS0-RS3用于控制分频器输出,设置成不同的值可以在SQW引脚得到不同的分频输出或得到周期性的中断(通过控制寄存器B实现).由于本设计不涉及,具体设置值与对应频率请参考DS12C887技术文档,不在列举.寄存器B结构如图所示.表3.6 DS12C887寄存器B结构当SET位为0时,时间正常更新;当SET位置1时,停止更新,此时,MUC可以对DS12C887进行初始
18、化,该位不受复位信号影响.PIE位为周期性中断使能位,该位为1时,周期性中断使能;为0时禁止中断.本课题中此位置0.AIE位为闹钟中断使能位本课题中由于没有使用中断,该位置0.UIE为更新完成中断使能位,本设计中不考虑.SQWE为方波使能信号,本设计不予处理.DM位为数据格式选择位,置1时时间数据以二进制格式存放,清0后,数据以BCD码格式存放.24/12位为时间格式设置位,该位为1时,时间为24小时格式,为0时,时间为12小时格式,该位不受复位信号影响.DSE为夏令时使能位,本设计不予考虑寄存器C结构如图所示.表3.7 DS12C887寄存器C结构其中4个有效位均为中断标志,本设计不予考虑,
19、但当初始化完成并禁止中断时,应将该寄存器读取清0.寄存器D结构如图所示表3.8 DS12C887寄存器D结构VRT位指示片内锂电池状态,当为0时,说明内部锂电池耗尽,不能保证内部RAM中数据和时间数据的正确性.该位只读.3)DS18B20接口程序设计.DS18B20设置寄存器结构如图3.9所示表3.9 DS18B20设置寄存器结构通过设置该寄存器中R1、R0的不同状态,可以得到不同的温度分辨率,分辨率越高,转换所需时间也越长(见图).为简便起见,本课题中采用系统复位后的默认值,即R1R0=11,分辨率为12位数据.其余位为传感器内部使用,不能进行操作. 表3.9 DS18B20控制寄存器R0、
20、R1设置与分辨率对应关系由于DS18B20数据传送采取单总线方式,所以对操作时序和操作步骤有着严格的要求,任何不符合步骤的操作,都可能造成DS18B20不响应.每次在对DS18B20进行操作时,都要进行初始化.初始化时序如图所示: 图3.15 DS18B20初始化时序图首先,控制器将总线拉低并保持480s,释放总线,等待15-60s后,如果复位成功,DS18B20会将总线拉低,产生一个60-240s的低脉冲,控制器通过检测低脉冲信号确定复位是否成功.复位成功后,在上拉电阻的作用下,DS18B20会恢复到高电平静止状态. 在静止状态,总线在内部上拉电阻作用下,保持高电平.当控制器进行读写操作时,
21、先将总线拉低1s以上,DS18B20回应一个高电平应答信号,控制器检测到应答信号后,即可对总线进行操作.向DS18B20读写一位数据时序如图所示:图3.16 DS18B20读写数据时序图写”0”时,控制器将总线拉低30s以上即可,写”1”时,控制器将总线拉低15s,然后释放总线.读数据时,控制器将总线拉低15s,然后释放总线并读取总线上的数据.4)LCD显示驱动程序 a.基本操作时序:读状态: 输入:RS=L,RW=H,E=H 输出:D0-D8=状态字写指令: 输入:RS=L,RW=L,D0-D7=指令码,E=高脉冲 输出:无读数据: 输入:RS=H,RW=H,E=H 输出:D0-D7数据写数
22、据:输入:RS=H,RW=L,D0-D7=数据,E=高脉冲 输出: 无b.状态字说明STA7STA6STA5STA4STA3STA2STA1STA0 D7D6D5D4D3D2D1D0 表3.10 LCD状态字寄存器结构STA0-STA6:当前数据地址指针的数值STA7:读写操作使能 1:禁止,0:允许由于LCD指令集比较简单,不再详细介绍,请参考1602字符型液晶屏资料.c.LCD复位流程如图所示:图3.17 LCD初始化流程图初始化完成后,即可对液晶显示器进行操作,具体程序:汇编程序: ORG 0000H AJMP STARTSTART: ACALL SETTIME;设置初始时间LOOP:
23、ACALL GETTIME;循环读取当前时间 AJMP LOOP;SETTIME: MOV DPTR,#7D0AH;DS12C887的A寄存器MOV A,#20HMOVX DPTR,A;打开DS12C887的内部晶振并使RTC(实时时钟)记录时间INC DPTR;DS12C887的B寄存器MOV A,#08HMOVX DPTR,A;设十进制BCD码,24小时制,不定时MOV DPTR,#7D0DH;DS12C887的D寄存器MOVX A,DPTR;如果D寄存器的第7位为0,表示电池耗尽JNB ACC.7,ERRORMOV DPTR,#7D00H;DS12C887的秒单元MOV A,#00HMO
24、VX DPTR,A;写入秒MOV DPTR,#7D02H;DS12C887分单元MOV A,#21HMOVX DPTR,A;写入分MOV DPTR,#7D04H;DS12C887时单元MOV A,#03HMOVX DPTR,A;写入时MOV DPTR,#7D06H;DS12C887星期单元MOV A,#03HMOVX DPTR,A;写入星期MOV DPTR,#7D07H;DS12C887日单元MOV A,#20HMOVX DPTR,A;写入日MOV DPTR,#7D08H;DS12C887月单元MOV A,#07HMOVX DPTR,A;写入月MOV DPTR,#7D09H;DS12C887年
25、单元MOV A,#05HMOVX DPTR,A;写入年时间ERROR:RETGETTIME: MOV DPTR,#7D0AH MOVX A,DPTR JB ACC.7,GETTIME ;REGISTER A的UIP位=0时才可以读数据 MOV DPTR,#7D00H MOVX A,DPTR MOV R2,A ;SECONDS ACALL DISPLAY MOV DPTR,#7D02H MOVX A,DPTR MOV R1,A ACALL DISPLAY ;MINUTES MOV DPTR,#7D04H MOVX A,DPTR MOV R0,A ;HOURS ACALL DISPLAY ACAL
26、L DELAY RETDISPLAY: MOV DPTR,#TAB MOV SCON,#00H MOV R3,A ANL A,#0FH MOVC A,A+DPTR MOV SBUF,A JNB TI,$ CLR TI MOV A,R3 SWAP A ANL A,#0FH MOVC A,A+DPTR MOV SBUF,A JNB TI,$ CLR TI RETDELAY: MOV R4,#0FH DE1:MOV R5,#0FFH DJNZ R5,$ DJNZ R4,DE1 RET TAB: DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H,11H,0C1H,6
27、3H,85H,61H,71H ENDC语言源程序:#include "reg52.h"#include "absacc.h"#define DSA XBYTE0x7F0A/12c887寄存器A地址#define DSB XBYTE0x7F0B/B地址#define DSD XBYTE0x7F0D/D地址#define DS_H XBYTE0x7F04/时地址#define DS_M XBYTE0x7F02/分地址#define DS_S XBYTE0x7F00/秒地址#define DS_W XBYTE0x7F06/星期地址#define DS_D XB
28、YTE0x7F07/日地址#define DS_Mo XBYTE0x7F08/月地址#define DS_Y XBYTE0x7F09/年地址code unsigned char LED_code_tab= /* 显示段笔划 abcdefgh; 0=亮 */ 0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f, /* 0,1,2,3,4,5,6,7 */ 0x01,0x09,0x11,0xc1,0x63,0x85,0x61,0x71,0xff /* 8,9,A,b,C,d,E,F,全灭 */ ;sbit Set=P10;/设置时间标志位sbit Set_h=P11;/
29、设置小时sbit Set_m=P12;/设置分钟sbit Set_s=P13;/设置秒钟code struct timeint Year;/当前时间 年int Month;/当前时间 月int Day;/当前时间 日int Week;/当前时间 星期int Hour;/当前时间 时int Minutes;/当前时间 分int Seconds;/当前时间 秒int a_Hour;/报警时间 时int a_Minutes;/报警时间 分int a_Seconds;/报警时间 秒;struct time time_n;/保存当前时间的结构体struct time time_t;/保存上次调用显示时的
30、时间的结构体void Init();/程序初始化函数void Init12c887();/初始化12c887的函数void GetTime();/获取当前时间的函数void ShowTime();/显示当前时间(设置)的函数void Display(int temp);/显示传入参数的函数void SetTime();/用户设置时间函数void UpDateTime();/更新12c887中时间的函数(供用户设置时间函数调用)void Init()/程序初始化函数time_n.Seconds=0;time_n.Minutes=0;time_n.Hour=0;time_n.Week=0;time
31、_n.Day=0;time_n.Month=0;time_n.Year=0;time_t=time_n;Set=1;Set_h=1;Set_m=1;Set_s=1;void Init12c887()/初始化12c887控制寄存器DSA=0x20;/打开DS12C887的内部晶振并使RTC(实时时钟)记录时间DSB=0x0E;/设二进制计数(汇编语言可用十进制BCD计数),不定时void GetTime()/获得当前时间函数char temp2;temp2=0x00;temp2=DSA;if(temp2 & 0x80)!=0x00)/判断寄存器12c887控制寄存器A的最高位是否位0(即
32、是否可以读数)return;time_n.Seconds=DS_S;/读取当前时间time_n.Minutes=DS_M;time_n.Hour=DS_H;time_n.Week=DS_W;time_n.Day=DS_D;time_n.Month=DS_Mo;time_n.Year=DS_Y;void UpDateTime()/更新时间的函数char temp;temp=DSB;temp=temp | 0x80;DSB=temp;/暂停走时,为接下来的时间更新作准备DS_S=time_n.Seconds;DS_M=time_n.Minutes;DS_H=time_n.Hour;DS_W=tim
33、e_n.Week;DS_D=time_n.Day;DS_Mo=time_n.Month;DS_Y=time_n.Year;temp=DSB;temp=temp & 0x7f;DSB=temp;/恢复到正常的走时状态void ShowTime()/显示时间函数Display(time_n.Seconds);/显示秒Display(time_n.Minutes);/分Display(time_n.Hour);/时void Display(int temp3)/显示传入参数的函数(串口)int temp4;temp4=temp3;temp4=temp3%10;temp3=temp3/10;SBUF=LED_code_tabtemp4;while(!TI)TI=0;temp4=temp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度一致性技术研发一致行动人协议3篇
- 2024年郑州玻璃岗亭安全性能提升改造合同
- 2025年度文化创意产业园区场地租赁合作协议6篇
- 15可亲可敬的家乡人(说课稿)2024-2025学年统编版道德与法治二年级上册
- 2024酒店KTV租赁合同范本
- 二零二五版标准私房买卖合同中的合同补充协议范本3篇
- 二零二五版出租车公司车辆租赁及管理合同3篇
- 2024版物业服务合同范本
- Starter Unit 3 Welcome Section A Pronunciation1-4 说课稿2024-2025学年人教版英语七年级上册
- 2025年度汽车零部件打磨工程承包协议3篇
- 2025年经济形势会议讲话报告
- 北师大版小学三年级上册数学第五单元《周长》测试卷(含答案)
- 国家安全责任制落实情况报告3篇
- 2024年度顺丰快递冷链物流服务合同3篇
- 六年级下册【默写表】(牛津上海版、深圳版)(汉译英)
- 合同签订培训
- 新修订《保密法》知识考试题及答案
- 电工基础知识培训课程
- 铁路基础知识题库单选题100道及答案解析
- 金融AI:颠覆与重塑-深化理解AI在金融行业的实践与挑战
- 住宅楼安全性检测鉴定方案
评论
0/150
提交评论