版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、具有报时报温功能的电子钟设计报告具有报时报温功能的电子钟设计报告电气工程学院 电气88班 侯欣宇 08041208电气工程学院 电气89班 马欢 08041228一、引言- 3 -二、实验的主要目的和要求分析- 3 -1.目的:- 3 -2.实验要求:- 3 -三、设计说明- 4 -1.设计原理- 4 -2.系统目标- 4 -四、硬件设计-4 -1. 系统总体设计结构框图- 4 -2.温度传感器电路- 5 -1)温度传感器DSl8B20- 5 -2)DS18B20的性能特点- 5 -3)DS18B20的工作原理- 5 -3.DS1302- 7 -1)DS1302原理简述- 7 -2)时间模块电
2、路- 8 -5.按键与显示- 8 -1)按键单元- 8 -2)显示单元- 9 -五、软件设计- 10 -1.程序设计思想简述- 10 -2.程序源代码及注释- 10 -六、实验总结- 21 -七、参考文献- 22 -八、附录- 22 -1.附录A- 22 -2.附录B- 23 -一、 引言电子时钟是实现对年,月,日,时,分,秒数字显示的计时装置,广泛用于个人家庭,车站, 码头,办公室,银行大厅等场所,成为人们日常生活中的必需品。数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。钟表的数字化给人们生产生活带来了极大的方便,在此基础上完成的电子时钟精度高,功能易于扩展
3、。可扩展成为诸如定时自动报警、按时自动打铃、时间程序自动控制、定时 广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等电路。所有这些,都是以钟表数字化为基础的。因此,研究数字时钟及扩大其应用有着非常现实的意义。本设计就是数字时钟简单的扩展应用。1 设计要求本设计准备实现的功能: (1) 显示日期功能(年、月、日、时、分、秒以及) (2) 可通过按键切换年、月、日及时、分、秒的显示状态 (3) 可随时调校年、月、日或时、分、秒 (4) 可每次增减一进行时间调节 (5) 可动态完整显示年份,实现真正的万年历显示 (6) 可显示温度二、 实验主要目的和要求分析1. 目的:(
4、1) 通过查阅相关资料,深入了解温度测量相关知识(2) 学习动态显示方式的实现方法及原理(3) 掌握可视化操作界面设计(4) 设计具有报时报温功能的电子钟的原理图,构建硬件平台(5) 制作出样机并测试达到功能和技术指标要求2. 实验要求:功能说明:1. 具有电子钟基本的实时年月日显示以及时分秒显示功能;2. 通过DS18B20测量温度并将测得的数据传入到AT89C52中;3. 通过八位LED数码管动态显示日期、时间与温度,并通过按键切换;4. 具有校时功能,通过按键切换进行校时;5. 具有定闹功能,通过按键切换进行定闹;三、 设计说明1. 设计原理本系统以单片机AT89C52为核心控制芯片,通
5、过传感器DS18B20采样温度值,将采得的十六进制温度值转换为精度为0.1°的十进制温度,并显示;采用DS1302芯片作为智能显示驱动芯片,将其驱动信号输入单片机AT89C52,并通过八位LED数码管来显示,通过按键的切换来进行时间校准,亦可通过按键来设置闹钟。系统软件部分,采用C语言来进行编写,具有很好的可控性和可读性。2. 系统目标采用温度传感器DS18B20,实时地采集室内的温度,通过按键的切换在屏幕上显示;通过DS1302芯片来实现基本的实时年月日显示以及时分秒实时显示;通过八位LED数码管动态显示日期、时间与温度,并通过按键切换;通过软、硬件结合来实现校时功能,通过按键切换
6、进行校时;通过软、硬件结合来实现定闹功能,并通过按键的切换进行设定闹钟;整个电子钟的设计包括硬件系统与软件系统的设计。四、 硬件设计1. 系统总体设计结构框图基于以上所述的实验要求和系统目标,本实验的具有报时报温功能的电子钟,需要具有定闹、时间校准等功能;而对于温度测量,采用温度传感器DS18B20来测温,而后将测得的结果送到AT89C52中;对于日期与时间,采用时钟芯片DS1302来计时;所有的显示部分采用八位LED数码管显示电路。综上所述,本设计方案形成。总体设计框图如图1:显示电路DS18B20温度采集电路单片机AT89C52DS1302时钟电路设置电路图1 具有报温报时功能的电子钟硬件
7、总体设计框图2. 温度传感器电路1) 温度传感器DSl8B20由美国DALLAS半导体公司生产的DSl8B20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统和大型设备中,例如多路温度测控仪、中央空调、大型冷库、恒温装置等。DSl8B20的电源电压范围均扩展到+3+5.5V,DSl8B20还能对温度分辨力进行编程,选择9位12位模式下工作,在12位模式下的最高分辨力可达0.0625, 被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,业可采用寄生电源方式产生,多个DS18B20可以并联到三根或者两
8、根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。从而可以看出DS18B20可以非常方便的被用于远距离多点温度检测系统。综上,在本系统中我采用温度芯片DS18B20测量温度。该芯片的物理化学性很稳定,它能用做工业测温元件,且此元件线形较好。在0100摄氏度时,最大线形偏差小于1摄氏度。该芯片直接向单片机传输数字信号,便于单片机处理及控制。2) DS18B20的性能特点(1)DSl8B20采用DALLAS公司独特的“单线(1-Wire)总线”专有技术,与单片机通信只要一根I/O线;(2)在测温范围是-55+125时,测量误差不超过
9、77;2,在-10+85范围内,可确保测量误差不超过±0.5;(3)在构成大型温控系统时,允许在单线总线上挂接多片DSl8B20; (4) 低压供电,电源范围从35V,也可以直接从数据线上窃取电源; (5) 数据位可编程912位,转换12位实践为750ms(最大); (6) 用户可自设定报警上下限温度;(7)报警搜索命令可识别和寻址哪个器件的温度超过预定值;3) DS18B20的工作原理DSl8B20的原理与DS1820的原理是一样的。DS18B20继承了DS1820的所有优点。DS18B20采用3脚PR35封装或8脚SOIC封装,引脚排列如图2所示(与实际外形略有差别)。I/O为数
10、据输入输出端(即单线总线),它属于漏极开路输出,外接上拉电阻后,常态下呈高电平。UDD是可供选用的外部+5V电源端,不用时需接地。GND为地,NC为空脚。 (a) PR35封装 (b) SOIC封装图2 DS1820/DS18B20的引脚排列(1)DSl8B20原理DSl8B20内部测温电路框图如图3 所示。低温度系数振荡器用于产生稳定的频率0,高温度系数振荡器则相当于T转换器,能将被测温度t转换成频率信号0图中还隐含着计数门,当计数门打开时,DSl8B20就对低温度系数振荡器产生的时钟脉冲0进行计数,进而完成温度测量。计数门的开启时间由高温度系数振荡器来决定。每次测量前,首先将-55所对应的
11、基数分别置入减法计数器、温度寄存器中。在计数门关闭之前若计数器已减至零,温度寄存器中的数值就增加0.5。然后,计数器依斜率累加器的状态置入新的数值,再对时钟计数,然后减至零,温度寄存器值又增加0.5。只要计数门仍未关闭,就重复上述过程,直至温度寄存值达到被测温度值。这就是DSl8B20的测温原理。斜率累加器能对振荡器的非线性予以补偿,提高测量准确度。 需要指出,温度值本应为9位(其中,符号占一位),但因符号位又被扩展成高8位,故实际以16位补码的形式读出。其中,高8位代表符号,“0”表示t>0,“1”表示t<0;低8位则以0.5LSB。 图3 内部测温电路框图DSl8B20型单线智
12、能温度传感器典型的测温误差在070范围内,DSl8B20的上、下限测温误差分别为+0.5、-0.5,而典型产品的误差仅为±0.25。(2)测温电路图图4 测温电路图分析:如图4所示。DS18B20,与单片机的T0口,即P3.4管脚相连。采用集中外部供电的方式。P3.4管脚送入单片机AT89C52。3. DS13021) DS1302原理简述DS1302是 Dallas 公司生产的一种实时时钟芯片.它通过串行方式与单片机进行数据传送,能够向单片机 提供包括秒,分,时,日,月,年等在内的实时时间信息,并可对月末日期,闰年天数自动进行调整; 它还拥有用于主电源和备份电源的双电源引脚,在主电
13、源关闭的情况下,也能保持时钟的连续运行。另外,它还能提供 31 字节的用于高速数据暂存的 RAM.鉴于上述特点,DS1302 已在许多单片机系统中得 到应用,为系统提供所需的实时时钟信息。DS1302 时钟芯片内主要包括移位寄存器,控制逻辑电路,振荡器,实时时钟电路以及用于高速暂存的31 字节 RAM。DS1302 与单片机系统的数据传送依靠 RST,I/O,SCLK 三根端线即可完成。其工作过 程可概括为:首先系统 RST 引脚驱动至高电平,然后在作用于 SCLK 时钟脉冲的作用下,通过 I/O 引脚 向 DS1302 输入地址/命令字节,随后再在 SCLK 时钟脉冲的配合下,从 I/O 引
14、脚写入或读出相应的数据 字节.因此,其与单片机之间的数据传送是十分容易实现的。2) 时间模块电路图图5 时间模块电路图4. 按键与显示1)按键单元单片机应用系统中除了复位按键有专门的复位电路,以及专一的复位功能外,其它的按键或键盘都是以开关状态来设置控制功能或输入数据。 键开关状态的可靠输入 :它是在检测到有键按下时,执行一个10ms的延时程序后,再确认该键电平是否仍保持闭合状态电平,如保持闭合状态电平则确认为真正键按下状态,从而消除了抖动影响。在本电子钟系统中,按键处理程序首先执行等待按键,并确认有无按键按下的程序段。当确认有按键按下后,下一步就要识别哪一个按键按下。对按键的识别通常有两种方
15、法:一种是常用的逐行扫描查询法;另一种是速度较快的线反转法。本系统共有5个按键(除了复位按键),用于方便设定日期、时间和闹钟时间,以及不同内容显示的切换。具体如下表:表1 按键功能表S1S2S3S4S5S6显示切换1路2路3路设定复位2) 显示单元本电子钟系统为八位显示,使用8个LED动态数码管。当用于显示时间时,前两个为1路,所显示的是小时;第三个为分隔符;第四以及第五个为2路,所显示的是分钟;第六个为分隔符;后两个为3路,所显示的是秒;当用于显示日期时,前四个为1路,所显示的是年;第五个以及第六个为2路,所显示的是月份;后两个为3路,所显示的是日期;当用于显示温度时,中间几个用于显示温度。
16、图6按键电路图图7 显示电路图五、 软件设计1. 程序设计思想简述程序主体由主函数和若干子函数组成温度读写子函数,时间读写子函数,延迟子函数,译码子函数,显示子函数,时间设定子函数,日期设定子函数,闹钟比对子函数。下面分别作简要介绍:1.温度读写:本系统利用DS18B20芯片进行温度的测量,将DS18B20与单片机的P3.4管脚连接来实现对温度读操作。将读入数据进行转换,得到温度符号位、整数位及小数位真值。2. 时间读取:本系统利用DS1302芯片产生时间,将DS1302的5、6、7管脚与单片机AT89C52的P2.0、P2.1、P2.2连接来实现对时间、日期的读、写操作。校时完成后,自动由单
17、片机AT89C52发送读取命令,进而读得时间。3.时间校准:时间的校准、设定通过对按键的检测,进而利用单片机AT89C52的P2.0、P2.1、P2.2与DS1302芯片进行通信,来实现对时间、日期的调节。S5键按下,从主程序中跳出,进入中断程序;不断按下S5,实现在校准时间、日期、星期及闹钟时间之间转换;通过对S2、S3、S4闭合检测计数,实现对当前选定校时对象1、2、3路的数值的校准;当S1闭合时,结束中断程序,返回到主程序中。实时显示调整的结果实时显示。 4. 定闹提醒:当到了闹钟设定的时间,闪烁LED灯,实现闹钟功能。闹钟的时间已经设定好。将DS1302芯片输入的时、分、秒信号和闹钟的
18、时间进行比较,当相等时,交替执行点亮LED灯命令,闹钟功能更得以实现。2. 程序源代码及注释#include<reg52.h>#include<absacc.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int/所有接口声明#define LATCH1 XBYTE0X0C000#define LATCH2 XBYTE0X0A000#define LATCH3 XBYTE0X6000#define jump_ROM 0xCC#define start 0x44#def
19、ine read_RAM 0xBEsbit k1=P10;sbit k2=P11;sbit k3=P12;sbit k4=P13;sbit k5=P32;sbit DQ=P34;sbit sda=P21;sbit clk=P20;sbit rst=P22;/所有数组以及缓存uchar code VOICETABLE=0x00,0x09,0x12,0x1B,0x24,0x2D,0x36,0x3F,0x48,0x51,0x5A,0x63,0x6C,0x75,0x7E,0x87,0x90,0x99,0xA8,0xB7,0xCB,0xDF,0xF3,0xFF;uchar code GONGYIN=0x
20、3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/0到uchar code SPECIAL=0x63,0x39,0x00,0x40;/°C空-uchar code GUANXUAN=1,2,4,8,16,32,64,128;uchar idata temperature4=0,0,0,0;/这里存的真值第一位表示正负,每个元素一位,当成松散的BCDuchar idata time3=19,19,19;/s,min,huchar idata date4=13,5,4,10;/d,m,w,y/day0,day1,month2,month3,
21、week4,year5,year6uchar idata alarmtime3=0,30,6;/second,minute,houruchar idata displaybuffer8;/变量uchar showflag=1;/0闹钟1时间2日期3星期4温度uchar adjustflag=0;uchar timecount=20;/子函数void DelayMS(uint x) uchar i; while(x-) for(i=0;i<120;i+);void yima(uchar flag) reentrant/0闹钟1时间2日期3星期4温度 switch(flag) uchar i
22、; case 0:/e.g 23-10-30 displaybuffer0=GONGYINalarmtime2/10; displaybuffer1=GONGYINalarmtime2%10; displaybuffer2=SPECIAL3; displaybuffer3=GONGYINalarmtime1/10; displaybuffer4=GONGYINalarmtime1%10; displaybuffer5=SPECIAL3; displaybuffer6=GONGYINalarmtime0/10; displaybuffer7=GONGYINalarmtime0%10; break
23、; case 1: displaybuffer0=GONGYIN(time2/10); displaybuffer1=GONGYIN(time2%10); displaybuffer2=SPECIAL3; displaybuffer3=GONGYIN(time1/10); displaybuffer4=GONGYIN(time1%10); displaybuffer5=SPECIAL3; displaybuffer6=GONGYIN(time0/10); displaybuffer7=GONGYIN(time0%10); break; case 2: /10 04 22 displaybuff
24、er0=GONGYIN2; displaybuffer1=GONGYIN0; displaybuffer2=GONGYIN(date3/10); displaybuffer3=GONGYIN(date3%10)|0x80; displaybuffer4=GONGYIN(date1/10); displaybuffer5=GONGYIN(date1%10)|0x80; displaybuffer6=GONGYIN(date0/10); displaybuffer7=GONGYIN(date0%10); break; case 3: /-7/date4=5,1,6,10;/d,m,w,y/ dis
25、playbuffer0=SPECIAL2; for(i=1;i<6;i+) displaybufferi=SPECIAL3; displaybuffer6=GONGYINdate2; displaybuffer7=SPECIAL2; break; case 4: /-15.6°C displaybuffer0=SPECIAL2; displaybuffer1=SPECIALtemperature0+2; displaybuffer2=GONGYINtemperature1; displaybuffer3=GONGYINtemperature2|0x80; displaybuff
26、er4=GONGYINtemperature3; displaybuffer5=SPECIAL0; displaybuffer6=SPECIAL1; displaybuffer7=SPECIAL2; break; default: break; void display() /显示displaybuffer uchar i; for(i=0;i<8;i+) LATCH1=displaybufferi; LATCH2=GUANXUANi; DelayMS(2); LATCH2=0; /-void delay(uchar n) int i; for(i=0;i<n;i+);uchar
27、reset() uchar deceive_ready; DQ=0; delay(29); DQ=1; delay(3); deceive_ready=DQ; delay(25); return(deceive_ready);uchar read_bit() unsigned char i; DQ=0; /总线拉低,启动读 DQ=1;/ 总线拉高,准备读取 for(i=0;i<3;i+); return(DQ);void write_bit(uchar bitval) DQ=0; if(bitval=1) DQ=1; delay(5); DQ=1;void write_byte(ucha
28、r val) uchar i,temp; for(i=0;i<8;i+) temp=val>>i; temp=temp&0x01; write_bit(temp); delay(5); uchar read_byte() uchar i,m,receive_data; m=1; receive_data=0; for(i=0;i<8;i+) if (read_bit() receive_data=receive_data+(m<<i); delay(6); return(receive_data);void read_temp(uchar *p)/读
29、温度存入参量数组 uchar temp1,tmph,tmpl; reset(); display(); write_byte(jump_ROM); display(); write_byte(read_RAM); display(); tmpl=read_byte(); display(); tmph=read_byte(); display(); temp1=(tmph<<4)|(tmpl>>4); *p+=temp1>>7;/读符号位 temp1=temp1&0x7F;/0111 1111,取正值 *p+=temp1/10;/得到的十位真值 *p
30、+=temp1%10;/0000#作为个位,需加小数点 temp1=tmpl&0x0f;/取小数部分# *p=temp1*5/8;/小数真值 display(); reset(); display(); write_byte(jump_ROM); display(); write_byte(start); display();/-/写字节到DS1302中void writeabyte(uchar x) uchar i; for(i=0;i<8;i+) sda=x&1; clk=1;/use positive edge to write clk=0; x>>=1
31、; uchar readabyte() uchar i,b,t; for(i=0;i<8;i+) /b=0000 0000;#000 0000;#00 0000;when i=7,# #0 b>>=1; t=sda;/there is a falling edge after command written b|=t<<7;/t=LSB first,every new bit is added to MSB of b clk=1; clk=0; /BCD to HEX(real value) return b/16*10+b%16;/从DS1302的确定位置读字节
32、uchar readdata(uchar addr) uchar dat; rst=0; clk=0;/-They rst=1; writeabyte(addr);/-are dat=readabyte();/-matched clk=1; rst=0; return dat;/写字节到DS1302中void writedata(uchar addr,uchar dat) clk=0; rst=1; writeabyte(addr); writeabyte(dat); clk=0; rst=0;void set_time() writedata(0x8e,0x00);/addr=8eH -&g
33、t;write protect,dat=00H means cancel WP /真值,要转成BCD给DS1302,依次秒,分,时 writedata(0x80,(time0/10<<4)|(time0%10); writedata(0x82,(time1/10<<4)|(time1%10); writedata(0x84,(time2/10<<4)|(time2%10); writedata(0x8e,0x80);/WPvoid read_time() time0=readdata(0x81);/ss time1=readdata(0x83);/mm ti
34、me2=readdata(0x85);/hhvoid set_date() writedata(0x8e,0x00);/addr=8eH ->write protect,dat=00H means cancel WP /依次日,月,星期,年 writedata(0x86,(date0/10<<4)|(date0%10); writedata(0x88,(date1/10<<4)|(date1%10); writedata(0x8A,(date2/10<<4)|(date2%10); writedata(0x8C,(date3/10<<4)|
35、(date3%10); writedata(0x8e,0x80);/WPvoid read_date() date0=readdata(0x87);/day date1=readdata(0x89);/month date2=readdata(0x8B);/week date3=readdata(0x8D);/year/-void check_alarm() uchar i; if (alarmtime2=time2) if (alarmtime1=time1) if(alarmtime0=time0) for(i=0;i<150;i+) /点亮FLAG(交替) /实现闪烁方式的闹钟提醒
36、 k1=0; DelayMS(50); k1=0;display(); /-void main() read_date(); read_time(); EX0=1; IT0=1;/IT0=1;falling edge trigger ET0=1; TMOD=0x01;/MODE1 16位不自动置数 TL0=0x00; TH0=0x4C; EA=1; TR0=1; while(1) read_time(); if(k1=0) DelayMS(50); if(k1=0) showflag+; if(showflag=5) showflag=0; yima(showflag); display();
37、 check_alarm(); void TIMEADJUST() interrupt 0 /优先级最高 /k5进中断就不再出去了,负责选择adjustflag调整对象 /从左到右共位,分别由k2,k3,k4调节增加 /k1为确认,改写,退出中断 uchar adjustflag=1; bit O_K_=1; while(O_K_) yima(adjustflag);/1时间,日期,星期,闹钟时间 display(); if(k5=0)/调整对象,时间,日期,星期,闹钟时间 DelayMS(50); if(k5=0) adjustflag+; if(adjustflag=4) adjustfl
38、ag=0; if (k2=0)/第一位增加 DelayMS(50); if(k2=0) /时间小时 if(adjustflag=1) time2=(time2+1)%24;/a fantastic skill of % /日历年 if(adjustflag=2) date3=(date3+1)%100; /闹钟小时 if(adjustflag=0) alarmtime2=(alarmtime2+1)%24; if (k3=0)/第二位增加 DelayMS(50); if(k3=0) /时间分钟 if(adjustflag=1) time1=(time1+1)%60; /日历月 if(adjustflag=2) date1=date1+1; if(date1=13) date1=1; /闹钟分钟 if(adjustflag=0) alarmtime1=(alarmtime1+1)%60; if (k4=0)/第三位增加 DelayMS(50); if(k4=0); /时间秒 if(adjustflag=1) time0=(t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度茶叶科研与技术推广服务合同4篇
- 2025年度茶叶品牌授权经营合同模板4篇
- 2025年度产业园区配套服务场承包经营合同样本4篇
- 专业广告策划与推广服务协议样本版A版
- 2025年度智能家居系统产品试用体验合同4篇
- 专业拓展训练服务协议范例版
- 专业保安人员派遣合同合同2024年版版
- 专业储油罐租赁服务协议示例版
- 2024年04月恒丰银行合肥分行2024年社会招考笔试历年参考题库附带答案详解
- 2025年度体育场馆场地租赁安全与赛事运营管理合同4篇
- 当代西方文学理论知到智慧树章节测试课后答案2024年秋武汉科技大学
- GB/T 18488-2024电动汽车用驱动电机系统
- 小学五年级脱式计算题300道-五年级上册脱式计算题及答案
- 铝矾土进口合同中英文
- 最新台湾药事法
- 2022年金矿采选项目可行性研究报告
- 氧气吸入法操作并发症预防及处理规范草稿
- 2022版云南财经大学推免管理办法
- 门诊特定病种待遇认定申请表
- 工伤保险待遇及案例分析PPT课件
- 自控工程识图
评论
0/150
提交评论