




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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的SCLK,I/O,复位键接
6、到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 <reg52.h> #include <intrins.h>#inclu
7、de "ds1302.h" #include "LCD1602.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
8、dingshi(); void key(); uchar times9; uchar date9; uchar huan;uchartp=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=
9、time_13022%10+'0' times2=':' times3=time_13021/10+'0' times4=time_13021%10+'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_130
10、24/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; display0=ditabdisplay4+0x30; /查表得小数位的值 display4=(temp_data0&0xf0)>>4)|(temp_data1&
11、0x0f)<<4); display3=display4/100+0x30; display1=display4%100; display2=display1/10+0x30; display1=display1%10+0x30;if(display3=0x30) /高位为0,不显示 display3=0x20; if(display2=0x30) /次高位为0,不显示 display2=0x20; gotoxy(11,1) ; /在LCD第一行显示LCD_write_data(display3); /百位数显示 gotoxy(12,1) ; LCD_write_data(disp
12、lay2); /十位数显示 gotoxy(13,1) ; LCD_write_data(display1); gotoxy(14,1) ; LCD_write_data(0x2e); /xiao数显示 gotoxy(15,1) ; LCD_write_data(display0);gotoxy(14,2) ; LCD_write_data(0xdf); gotoxy(15,2) ; LCD_write_data('C'); void main() EA=1;EX0=1;IT0=1;EX1=1;IT1=1;ET0=1;TMOD=0X01;TH0=(65535-5000)/256;
13、 TL0=(65535-5000)%256;TR0=1;LCD_init();/LCD初始化 init_1302(time_1302); gotoxy(0,1); LCD_display("s:"); gotoxy(0,2); LCD_display("r:"); times8='0'/ date8='0' huan=1;P3=0xff;xiang=0; if(kai=0) gotoxy(11,1); LCD_write_data(0xef); while(1) while(huan=1) gong_neng();key(
14、);gotoxy(0,1); LCD_display("t:"); gotoxy(0,2); LCD_display("d:"); get_1302(time_1302); change(); gotoxy(2,1); LCD_display(times); gotoxy(2,2); LCD_display(date); if(huan=2)LCD_init();dingshi(); if(!(kai) gotoxy(11,1); LCD_write_data(0xef); else gotoxy(11,1); LCD_write_data(0x20);
15、 while(huan=2) if(mingzi=1) gotoxy(0,1);LCD_display("yu tong"); gotoxy(0,2); LCD_display("he guang hao"); if(mingzi=3) gotoxy(0,1); LCD_display("z m,shaob"); gotoxy(0,2); LCD_display("sun yan xiu"); if(mingzi=5) gotoxy(0,1);LCD_display("xie xie"); go
16、toxy(0,2); LCD_display(" !"); Read_Temperature();Disp_Temperature();delay(2);if(huan=1)LCD_init(); void key() while(neng!=0) gong_neng(); if(neng=1)LCD_write_command(0x80+9);LCD_write_command(0x0f);if(jia=0) delay(17); if(jia=0) while(!jia);w_1302(0x8e,0x00);tp=r_1302(0x81); tp+;s_flag=1;i
17、f(tp&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) LCD_init();get_1302(time_1302); change(); got
18、oxy(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+;if(temp1&0x0f)>9)temp1=temp1+6;if(tem
19、p1&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_command(0x0f);tp=r_1302(
20、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_1302(0
21、x85); 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&am
22、p;0x0f)>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);L
23、CD_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);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)
24、;temp4=r_1302(0x89); temp4-;if(temp4&0x0f)>9)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); t
25、emp5+;if(temp5&0x0f)>9)temp5=temp5+6; if(temp5&0x7f)>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_com
26、mand(0x01);while(neng=7) gotoxy(2,2); LCD_display("fen:"); gotoxy(7,2); LCD_write_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/1
27、0;d_fen_g=d_fen%10; if(jian=0) delay(17);if(jian=0)d_flag=1;while(!jian);d_fen-;if(d_fen=-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
28、(2,1); LCD_display("shi:"); gotoxy(7,1); LCD_write_data(d_shi_s+0x30); gotoxy(8,1); LCD_write_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)
29、 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_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,0x
30、80);void gong_neng() if(gon=0) delay(17);if(gon=0)neng+;while(gon=0);if(neng=9) neng=0; LCD_init(); void 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);i
31、f(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);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(deng<30) a1=0; a2=0;
32、a3=0; a4=0; a5=1; if(deng>30)&&(deng<60) a1=0; a2=0; a3=0; a4=1; a5=0; if(deng>60)&&(deng<90) a1=1; a2=0; a3=0; a4=0; a5=0; if(deng>90)&&(deng<120) a1=0; a2=1; a3=1; a4=0; a5=0; if(deng>150)&&(deng<180) a1=0; a2=0; a3=0; a4=0; a5=0; if(deng>
33、180)&&(deng<210) a1=1; a2=1; a3=1; a4=1; a5=1; if(deng>210)&&(deng<240) a1=0; a2=0; a3=0; a4=0; a5=0; if(deng>240)&&(deng<300) a1=1; a2=1; a3=1; a4=1; a5=1; if(deng>300) 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; TH
34、0=(65535-5000)/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流程图DS1
35、302部分程序:#ifndef _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 d
36、s1302_year 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,u
37、char dat); 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;i<7;i+) w_1302(add,*time); add+=2; time+; w_1302(0x8e,0x80); /= / 读取当前时间 /= void get_1302(uchar time) uchar i;uchar add=0x81; w_1302(0x8e,0x00); for(i=0;i<7;i+) timei=r_1302(add); timei=(timei&0x70)>>4)*10+(timei&0x0f); add+=2; w_1302(0x8e,0x80); /*= DS1302写入一个字节(上升沿有效) =*/ void write_ds1302(uchar dat) uchar i; datbyte=dat; for(i=0;i<8;i+) T_IO=datbyte0;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医生入职笔试题及答案
- 2025年科技互联网行业分析报告:物联网技术在智慧城市照明中的应用
- 2025年教育游戏化在幼儿教育中的实践与教学设计探索
- 2025年工业互联网平台数字签名技术在智能客服系统中的应用报告
- 河南省沁阳市中考数学真题分类(勾股定理)汇编综合训练试题(解析版)
- 生活服务协议的法律分析
- 押题宝典高校教师资格证之《高等教育心理学》通关考试题库含答案详解(预热题)
- 2025年度电商内容营销与SEO优化外包服务合同
- 2025年度事业单位教师岗位聘用合同规范范本
- 2025年车辆零担运输劳务合作协议
- 2025年三支扶陕西试题及答案
- 新生儿持续性肺动脉高压个案护理
- bbc国际音标教学课件
- 2025年新修订《治安管理处罚法》
- 贵州省贵阳市2024-2025学年八年级下学期期末道德与法治试卷(含答案)
- 【政治 云南卷】2025年云南省高考招生统一考试真题政治试卷(含答案)
- 培训班老师规矩管理制度
- 炉窑公司现场管理制度
- 无人车项目计划书范文大全
- PhotoshopCC设计与应用任务教程(第2版)全套课件
- 我给书本穿新衣教案
评论
0/150
提交评论