带温度显示的万年历

上传人:e****s 文档编号:210332078 上传时间:2023-05-16 格式:DOC 页数:38 大小:764.50KB
收藏 版权申诉 举报 下载
带温度显示的万年历_第1页
第1页 / 共38页
带温度显示的万年历_第2页
第2页 / 共38页
带温度显示的万年历_第3页
第3页 / 共38页
资源描述:

《带温度显示的万年历》由会员分享,可在线阅读,更多相关《带温度显示的万年历(38页珍藏版)》请在装配图网上搜索。

1、单片机课程设计报告题目: 带温度显示的万年历 院系: 电气信息工程系 专业: 通信工程 组长: 学号: 组员1: 学号: 组员2: 学号: 组员3: 学号: 组员4: 学号: 指导教师: 201*年12月18日 带温度显示的万年历 设计报告一、选题目的和意义:二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的创造,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,创造了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机

2、数码计时技术的应用电子万年历,使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式开展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步我国生产的电子万年历有很多种,总体上来说以研究多功能电子万年历为主,使万年历除了原有的显示时间,日期等根本功能外,还具有闹铃,报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断的改良电子万年历的设计,使其更加的具有市场。通过本次课程设计,可以培养我们独立思考综合运用所学有关知识的能力。更好的

3、稳固?单片机原理及接口技术?课程学习的内容。掌握工程软件的设计方法,强化上级动手编程能力。做到理论与实践相结合。更加了解单片机知识的好处和其可用性。同时增加了同学之间的团队合作精神,更加体会的以后在工作中团队合作的重要性和必要性。学生姓名任务分工学生姓名任务分工学生姓名任务分工程序设计搜集资料焊接原件采购制作课件二、主要研究内容:本设计为软件,硬件相结合的一组设计。在软件设计过程中,应对硬件局部有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。根本的要了解一些主要器件的根本功能和作用。本设计以STC89C52单片机为控制核心,将时间数据通过LCD1602显示出来,同时通过相应的按键调

4、整相应的值。通过温度传感器将采集到的温度实时的显示在显示屏上。本设计可分为以下模块进行设计:显示模块,时间计算模块,设置模块,温度采集模块。显示模块采用用液晶显示器LCD1602显示,通过P2.0、P2.1、P2.2和P0给1602送指令和数据来控制想要显示的位置和数据;时间计算模块使用时钟芯片DS1302来进行时间和日期的计算,采用的是SPI总线,单片机通过模拟SPI接口来与它进行通信,他只有三条线与单片机连接,其他接晶振、电源和地线;设置模块为键盘模块,有两个按键分别接到单片机的外部中断,其他三个采用的是键盘扫描,并且在程序中进行了按键消抖,温度采集模块使用的是DS18B20,它直接将模拟

5、的温度量转换为数字量,采用单总线与单片机相连,这样可以省出大量的I/O口,供应其他芯片使用,在电路中还参加了闹钟的功能,闹钟的程序采用定时器控制,这样在显示时间和日期的同时,闹钟同时起作用。三、设计的方法及步骤:1、整个系统由主控模块和显示模块两大模块组成,主控模块包括主控芯片、温度检测、实时时钟电路及键盘接口电路,系统构成框图如下列图(1)所示。LCD液晶显示键盘DS1302时钟芯片DS18B20温度采集STC89C52控制器图(1) 系统框图2、设计步骤1将LCD液晶的数据口接到P0口,P0口接上拉电阻,P2.0、P2.1、P2.2分别接到1602的RS、RW和E端口。2将DS1302的S

6、CLK,I/O,复位键接到P1.0,P1.1,P1.2;3将温度芯片DS18B20接到P2.3。4按键接到P3口上,通过P3.7来控制蜂鸣器的发声,起到闹钟的目的。四、实验设计相关原理框图:1、主程序流程图(2)开始初始化按下h?(y)温度显示(n)时间显示菜单?(y)时间调整图(2) 主程序流程图时间调整局部的设计流程图(3):开始Gongneng是多少2调分1调秒3调时4调号7调分8调时5调月6调年加减减减加加加加加加加减减减减减Gongneng为0 返回时间显示图(3) 时间调整主程序:#include #include #include ds1302.h #include LCD160

7、2.h #include ds18b20.h#define uchar unsigned char#define uint unsigned int sbit gon=P34 ;sbit e=P33 ;sbit xiang=P37;sbit jia=P36 ;sbit jian=P35 ; sbit a1=P13; sbit a2=P14 ; sbit a3=P15 ; sbit a4=P16 ; sbit a5=P17 ; void gong_neng();void dingshi(); void key(); uchar times9; uchar date9; uchar huan;uc

8、har tp=0,temp1=0,temp2=0,temp3=0,temp4=0,temp5=0,neng=0,d_shi=0,d_fen=5,d_shi_g=0, d_fen_g=5,d_shi_s=0,d_fen_s=0,d_flag=0,kai=0,s_flag=0,mingzi=0,temp6=0,temp7=0; uint deng=0; void change() / 时间的转换 times0=time_13022/10+0; times1=time_13022%10+0; times2=:; times3=time_13021/10+0; times4=time_13021%10

9、+0; times5=:; times6=time_13020/10+0; times7=time_13020%10+0; / 日期的转换 date0=time_13026/10+0; date1=time_13026%10+0; date2=-; date3=time_13024/10+0; date4=time_13024%10+0; date5=-; date6=time_13023/10+0; date7=time_13023%10+0; void xiangling(); void Disp_Temperature() display4=temp_data0&0x0f; displa

10、y0=ditabdisplay4+0x30; /查表得小数位的值 display4=(temp_data0&0xf0)4)|(temp_data1&0x0f)9)tp=tp+6;if(tp&0x7f)0x59)tp=0;w_1302(ds1302_second,tp|0x80); if(jian=0) delay(17); if(jian=0) while(!jian);tp=r_1302(0x81); tp-; if(tp=0)tp=0x59; if(tp&0x0f)9)tp=tp-6;s_flag=1;w_1302(ds1302_second,tp|0x80); if(s_flag=1)

11、LCD_init();get_1302(time_1302); change(); gotoxy(2,1); LCD_display(times); gotoxy(2,2); LCD_display(date);s_flag=0; if(neng=2) LCD_write_command(0x80+6);LCD_write_command(0x0f);tp=r_1302(0x81);w_1302(ds1302_second,tp|0x80);if(jia=0) delay(17);if(jia=0) s_flag=1;while(!jia);temp1=r_1302(0x83); temp1+

12、;if(temp1&0x0f)9)temp1=temp1+6;if(temp1&0x7f)0x59)temp1=0; w_1302(ds1302_minute,temp1); if(jian=0) delay(17);if(jian=0)s_flag=1;while(!jian);temp1=r_1302(0x83); temp1-;if(temp1&0x0f)9)temp1=temp1-6;if(temp1=0)temp1=0x59; w_1302(ds1302_minute,temp1); if(neng=3) LCD_write_command(0x80+3);LCD_write_com

13、mand(0x0f);tp=r_1302(0x81);w_1302(ds1302_second,tp|0x80); if(jia=0) delay(17); if(jia=0) s_flag=1;while(!jia);temp2=r_1302(0x85); temp2+;if(temp2&0x0f)9)temp2=temp2+6;if(temp2&0x7f)0x23)temp2=0;w_1302(ds1302_hour,temp2); if(jian=0) delay(17); if(jian=0) while(jian=0); s_flag=1;while(!jian);temp2=r_1

14、302(0x85); temp2-;if(temp2&0x0f)9)temp2=temp2-6;if(temp2=0)temp2=0x23;w_1302(ds1302_hour,temp2); if(neng=4) LCD_write_command(0x80+0x40+9);LCD_write_command(0x0f);tp=r_1302(0x81);w_1302(ds1302_second,tp|0x80);if(jia=0) delay(17);if(jia=0)s_flag=1;while(!jia);temp3=r_1302(0x87); temp3+;if(temp3&0x0f)

15、9)temp3=temp3+6; if(temp3&0x7f)0x31)temp3=0; w_1302(ds1302_day,temp3); if(jian=0) delay(17);if(jian=0)s_flag=1;while(!jian);temp3=r_1302(0x87); temp3-;if(temp3&0x0f)9)temp3=temp3-6;if(temp3=0)temp3=0x31; w_1302(ds1302_day,temp3); if(neng=5) LCD_write_command(0x80+0x40+6);LCD_write_command(0x0f);tp=r

16、_1302(0x81);w_1302(ds1302_second,tp|0x80);if(jia=0) delay(17);if(jia=0)s_flag=1;while(!jia);temp4=r_1302(0x89); temp4+;if(temp4&0x0f)9)temp4=temp4+6;if(temp4&0x7f)0x12)temp4=0; w_1302(ds1302_month,temp4); if(jian=0) delay(17);if(jian=0)s_flag=1;while(!jian);temp4=r_1302(0x89); temp4-;if(temp4&0x0f)9

17、)temp4=temp4-6;if(temp4=0)temp4=0x12; w_1302(ds1302_month,temp4); if(neng=6) LCD_write_command(0x80+0x40+3);LCD_write_command(0x0f);tp=r_1302(0x81);w_1302(ds1302_second,tp|0x80);if(jia=0) delay(17);if(jia=0)s_flag=1;while(!jia);temp5=r_1302(0x8d); temp5+;if(temp5&0x0f)9)temp5=temp5+6; if(temp5&0x7f)

18、0x31)temp5=0; w_1302(ds1302_year,temp5); if(jian=0) delay(17);if(jian=0)s_flag=1;while(!jian);temp5=r_1302(0x8d); temp5-;if(temp5&0x0f)9)temp5=temp5-6;if(temp5=0)temp5=0x99; w_1302(ds1302_year,temp5); if(neng=7) LCD_write_command(0x01);while(neng=7) gotoxy(2,2); LCD_display(fen:); gotoxy(7,2); LCD_w

19、rite_data(d_fen_s+0x30);gotoxy(8,2); LCD_write_data(d_fen_g+0x30); LCD_write_command(0x0c); gong_neng();if(neng!=7)break;if(jia=0) delay(17);if(jia=0)d_flag=1;while(!jia);d_fen+;if(d_fen=60)d_fen=0;d_fen_s=d_fen/10;d_fen_g=d_fen%10; if(jian=0) delay(17);if(jian=0)d_flag=1;while(!jian);d_fen-;if(d_fe

20、n=-1)d_fen=59;d_fen_s=d_fen/10;d_fen_g=d_fen%10; if(d_flag=1) gotoxy(7,2); LCD_write_data(d_fen_s+0x30);gotoxy(8,2); LCD_write_data(d_fen_g+0x30); d_flag=0; if(neng=8) LCD_write_command(0x01); while(neng=8) gotoxy(2,1); LCD_display(shi:); gotoxy(7,1); LCD_write_data(d_shi_s+0x30); gotoxy(8,1); LCD_w

21、rite_data(d_shi_g+0x30); LCD_write_command(0x0c); gong_neng();if(neng!=8)break;if(jia=0) delay(17);if(jia=0)d_flag=1;while(!jia);d_shi+;if(d_shi=24)d_shi=0;d_shi_s=d_shi/10;d_shi_g=d_shi%10; if(jian=0) delay(17); if(jian=0) d_flag=1;while(!jian);d_shi-;if(d_shi=-1)d_shi=23;d_shi_s=d_shi/10;d_shi_g=d

22、_shi%10; if(d_flag=1) gotoxy(7,1); LCD_write_data(d_shi_s+0x30); gotoxy(8,1); LCD_write_data(d_shi_g+0x30); d_flag=0; w_1302(0x8e,0x00);tp=r_1302(0x81);w_1302(ds1302_second,tp&0x7f); w_1302(0x8e,0x80);void gong_neng() if(gon=0) delay(17);if(gon=0)neng+;while(gon=0);if(neng=9) neng=0; LCD_init(); voi

23、d dingshi()if(e=0)kai+;if(kai=2)kai=0; if(kai=0)temp7=r_1302(0x85); temp7=(temp7&0x70)4)*10+(temp7&0x0f ) ;temp6=r_1302(0x83); temp6=(temp6&0x70)4)*10+(temp6&0x0f);if(d_shi=temp7)&(d_fen=temp6)xiang=1;else xiang=0; void temer(void) interrupt 0 huan+;if(huan=3)huan=1;LCD_init();LCD_write_command(0x01

24、);delay_15us(40);mingzi+;if(mingzi=6)mingzi=0; void ta(void) interrupt 1 if(kai=0) if(d_shi=temp7)&(d_fen=temp6) deng+; if(deng30)&(deng60)&(deng90)&(deng150)&(deng180)&(deng210)&(deng240)&(deng300) a1=0; a2=0; a3=0; a4=0; a5=0; if(deng=330) deng=0; else a1=0; a2=0; a3=0; a4=0; a5=0; TH0=(65535-5000

25、)/256; TL0=(65535-5000)%256; TR0=1; void t(void) interrupt 2 while(!e);kai+;if(kai=1)xiang=0;if(kai=2)kai=0; 2、对于时钟芯片DS1302,公历日期时间显示只需从DS1302各存放器读出年、月、日、时、分、秒、星期,再加处理即可。在首次对DS1302进行操作之前,必须进行初始化,然后从中读出数据,经过处理后,送给显示缓冲单元。1302的流程图(4)如下:开始从1302中读出年月日,时分秒初始化13021302开始震荡将读出的数据进行转换图(4) 1302流程图DS1302局部程序:#if

26、ndef _ds1302_h_#define _ds1302_H_#define uchar unsigned char uchar time_13027=0x00,0x00,0x00,0x22,0x12,0x11,0x11;/设置时间初始值数组 / 秒分时号月份星期年 #define ds1302_second 0x80#defineds1302_minute 0x82#defineds1302_hour 0x84#define ds1302_week 0x8a#defineds1302_day 0x86#defineds1302_month 0x88#define ds1302_year

27、0x8csbit T_IO=P11; /与硬件相关的连线clk为DS1302的时钟信号线 sbit T_CLK=P10; /DAT为DS1302的I/O数据线 sbit T_RST=P12; /RST为DS1302的RST信号线 uchar bdata datbyte; sbit datbyte0=datbyte0; sbit datbyte7=datbyte7; void get_1302(uchar time); void write_ds1302(uchar dat); uchar r_1302(uchar add); void w_1302(uchar add,uchar dat);

28、uchar read_ds1302(void); void init_1302(uchar *time); /*= D S 1 3 0 2 初始化 =*/ void init_1302(uchar *time) uchar i, add; add=0x80;/0写入,1读出 w_1302(0x8e,0x00); for(i=0;i7;i+) w_1302(add,*time); add+=2; time+; w_1302(0x8e,0x80); /= / 读取当前时间 /= void get_1302(uchar time) uchar i;uchar add=0x81; w_1302(0x8

29、e,0x00); for(i=0;i4)*10+(timei&0x0f); add+=2; w_1302(0x8e,0x80); /*= DS1302写入一个字节上升沿有效 =*/ void write_ds1302(uchar dat) uchar i; datbyte=dat; for(i=0;i1; /*= DS1302读取一个字节下降沿有效 =*/ uchar read_ds1302(void) uchar i; for(i=0;i1; datbyte7=T_IO; T_CLK=1; T_CLK=0; return(datbyte); /*= 指定位置读取数据 =*/ uchar r_

30、1302(uchar add) uchar temp;/dat1,dat2; T_RST=0; T_CLK=0; T_RST=1; write_ds1302(add|0x01); temp=read_ds1302(); T_CLK=1; T_RST=0; return(temp); void w_1302(uchar add,uchar dat) T_RST=0; T_CLK=0; T_RST=1; write_ds1302(add); write_ds1302(dat); T_CLK=1; T_RST=0; #endif3、DS18B20温度检测流程图(5)如下:初始化DS18B20读取温度

31、温度值转换LCD显示 图(5) DS18B20温度检测流程图DS18B20局部程序:#ifndef _ds18b20_h_#define _ds18b20_H_sbit DQ = P23; /定义DS18B20端口DQ bit stemp;bit sflag;uint temp_value;uchar tempbuffer7;uchar data temp_data2 = 0x00,0x00;uchar data display5 = 0x00,0x00,0x00,0x00,0x00;uchar code ditab16 = 0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04, 0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09;void de

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!