带温度的LCD1602电子时钟设计_第1页
带温度的LCD1602电子时钟设计_第2页
带温度的LCD1602电子时钟设计_第3页
带温度的LCD1602电子时钟设计_第4页
带温度的LCD1602电子时钟设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

带温度的带温度的LCD1602电子时钟设计实验#带温度的LCD1602电子时钟设计一、实验目的学习利用AT89C52进行任务设计,练习使用52单片机内部的定时器进行计时。学习ds1302时钟芯片和ds18b20温度传感器的使用。学习用模块化编程进行较长程序的编写。二、实验要求(1)利用lcd1602液晶显示屏作为显示模块,用AT89C52进行控制,用ds18b02测量显示即时温度,温度报警,用ds1302时钟芯片为单片机提供时间数据。具有定时功能。(2)要求时间和定时时间可调,并且在闹铃报时的时候可以用按键进行关闭。并且可以用按键关闭打开定时功能。(3)利用keiluVision4编译软件进行编译。(4)完成实验要求,写出实验报告。三、软件环境Proteus仿真软件,keiluVision4编译软件四、工作现象本时钟具有显示年月日时分秒星期、温度和温度报警的功能。实验用时钟芯片ds1302来提供秒、分、时、星期、日期、月份和年份的数据,显示部分采用液晶显示模块lcd1602,右上方显示星期,左下角显示温度,右下角显示闹铃的开关状态。用温度传感器ds18b20来测量温度。另外,闹铃用DI(LED-RED)来报时,用D2(LED-RED)做温度报警发声器,闹钟开启用D3来显示。具体各部分功能及操作下面将做介绍:ds1302给单片机at89c52提供年、月、日、时、分、秒、星期,ds18b20采集温度的数据,经单片机的处理送到液晶显示屏lcd1602上显示,实验设置的报警温度为30*c,由于程序有点长,已达到52单片机内存的极限,所以没加调整报警温度的功能,并且在修正时间的过程中只能加,不能减。现在开始介绍具体的操作步骤:keyl为调整时间和日期的按键,按下key1键,lcd1602上的光标按时分星期日月年的顺序进行移动,光标所到处按key3键可以调整相应的数据信息。Key2键是闹钟调整键,本实验只提供了设置时间来调整闹钟,不设计年月日和星期,按下key2键,光标在时分之间切换,光标所到处按key3调整相应数据。Key3键用来开关闹钟,当闹铃开启时,lcd1602的右下角会出现“ON”的字样,同时发光二极管D3点亮当闹铃关闭时,lcd1602右下角则出现“OF”的字样。Key4来关闭正在报时的闹钟,即闹钟响是按key4可关闭闹铃。五、实验电路图_Lr口,I-导应AL”匚一1」G1C1::二XTAL2X28.___..?厂MY3rLOQvcc-j一u.=-:AT匿2trrETrr"ikhmhyR558R6nffiXTy-cEST用ENALE51Fl.Inz3.-AMX3.qpi.5EUZIBiizzmZEq.‘si3,^§3.HAD23.3.3.m3.MAD53空号3.7苕7百士£2222•一P1省DB.僖S2司□,WJP3.尊sg阂37部amER日Bdpn:12;.,D2A『m--H^u5SiEXTvTTSTF2013'2'702■IWTMOF5K2,「嗑.岩IT廿生

一--AT

sss^-♦胜.K4■口,冰塞———6I,二E艺D3装中皿."lEXTU六、程序流程图主程序流程图图定时流程图七、程序代码:1、delay延时函数的.h函数:#ifndef__DELAY_H__#define__DELAY_H__#defineuintunsignedint#defineucharunsignedcharvoidlcddelay(uintz);voidds18b20delay(uintt);voidmsdelay(uintz);#endifDelay函数的.c函数:#include"delay.h"voidlcddelay(uintt){uintj,x;for(x=t;x>0;x--)for(j=19;j>0;j--);}voidds18b20delay(uintt){while(t--);}voidmsdelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}2、液晶lcd1602的.h函数:#ifndef__LCD1602_H__#define__LCD1602_H__#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharsbitrs=P2A0;sbitrw=P2A1;sbite=P2A2;voidlcdxcom(ucharcom);voidlcdinit();voidlcdxshuju(uchardat);voidlcdx_time(ucharadd,uchardate);voidlcdx_day(ucharadd,uchardate);#endif液晶lcd1602的.c函数:#include<reg52.h>#include"lcd1602.h"#include"delay.h"#include"ds1302.h"voidlcdxcom(ucharcom){e=0;rs=0;rw=0;P0=com;lcddelay(10);//500use=1;lcddelay(20);e=0;}voidlcdinit(){lcddelay(300);lcdxcom(0x38);lcddelay(100);lcdxcom(0x38);lcddelay(100);lcdxcom(0x38);lcdxcom(0x38);lcdxcom(0x08);lcdxcom(0x01);lcdxcom(0x06);lcdxcom(0x06);lcdxcom(0x0c);}voidlcdxshuju(uchardat){e=0;rs=0;rs=1;rw=0;P0=dat;lcddelay(10);e=1;lcddelay(20);e=0;}voidlcdx_time(ucharadd,uchardate)//写时分秒函数{ucharshi,ge;shi=date/10;ge=date%10;lcdxcom(0x80+0x40+add);//设置显示位置lcdxshuju(0x30+shi);//送去液晶显示十位lcdxshuju(0x30+ge);//显示各位lcdxcom(0x0c);//设置开始显示,不显示光标}voidlcdx_day(ucharadd,uchardatey/写时分秒函数{ucharshi,ge;shi=date/10;ge=date%10;lcdxcom(0x80+add);//设置显示位置lcdxshuju(0x30+shi);//送去液晶显示十位lcdxshuju(0x30+ge);//显示各位lcdxcom(0x0c);//设置开始显示,不显示光标}3、时钟芯片ds1302的.h函数:#ifndef__DS1302_H__#define__DS1302_H__#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharstaticunsignedcharshi,fen.miao,day;staticunsignedcharyue,week,nian;staticucharm,f,s,t,y,n,x;staticuchardshi=0,dfen=0,dmiao=0;staticucharb=0;sbitsck=P1A0;sbitio=P1A1;sbitrst=P1A2;sbitkey1=P3A4;sbitkey2=P3A5;sbitkey3=P3A6;sbitkey4=P3A7;sbitkey5=P3A3;sbitp=P1A5;sbita=P1A3;voidpd(void);voidzhuan(void);voidwr_ds1302byte(uchardat);voidwr_ds1302(ucharadd,uchardat);ucharr_ds1302(ucharadd);voidsetds1302(void);voidds1302r_time(void);ucharpanduan(ucharyue,uintnian);voidkeyscan(void);voidsetbeep(void);voidnaozhong(void);voidockey(void);#endif时钟芯片ds1302的.c函数:#include"ds1302.h”#include<intrins.h>#include"delay.h"#include"lcd1602.h”uchartimedata口={10,6,12,31,23,59,50};//年周月日时分秒ucharxiedizhi口={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//写地址数组uchardudizhi口={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//读地址数组uchartable3[]="ONF";voidwr_ds1302byte(uchardat)//写一个字节的数据{uchari;for(i=0;i<8;i++){sck=0;io=dat&0x01;dat>>=1;sck=1;}}voidwr_ds1302(ucharadd,uchardat)//写数据{rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();wr_ds1302byte(add);wr_ds1302byte(dat);rst=0;_nop_();io=1;sck=1;}ucharr_ds1302(ucharadd){uchari,value;rst=0;_nop_();sck=0;_nop_();rst=1;_nop_();wr_ds1302byte(add);for(i=0;i<8;i++){value>>=1;sck=0;if(io)value=value|0x80;sck=1;}rst=0;_nop_();sck=0;_nop_();sck=1;io=1;returnvalue;}voidsetds1302(void){uchari,j;for(i=0;i<8;i++){j=timedata[i]/10;timedata[i]=timedata[i]%10;timedata[i]=timedata[i]+j*16;}01_451302(0*80,0*00);//去除写保护for(i=0;i<7;i++){wr_ds1302(xiedizhi[i],timedata[i]);}wr_ds1302(0x8e,0x00);//力口除写保护lcdxcom(0xc0+14);lcdxshuju(table3[0]);lcdxshuju(table3⑵);}voidds1302r_time(void){uchari;for(i=0;i<7;i++){timedata[i]=r_ds1302(dudizhi[i])/16*10+r_ds1302(dudizhi[i])%16;}miao=timedata[6];fen=timedata[5];shi=timedata[4];day=timedata[3];yue=timedata[2];week=timedata[1];nian=timedata[0];}voidzhuan(void){m=timedata[6];f=timedata[5];s=timedata[4];t=timedata[3];y=timedata[2];x=timedata[1];n=timedata[0];}voidpd(void){lcdx_time(10,miao);if(f!=fen)lcdx_time(7,fen);if(s!=shi)lcdx_time(4,shi);if(t!=day)lcdx_day(11,day);if(y!=yue)lcdx_day(8,yue);if(n!=nian)lcdx_day(5,nian);if(x!=week)lcdx_day(14,week);}ucharpanduan(ucharyue,uintnian){ucharr,a;a二((nian%400)==0||((nian%100!=0)&&(nian%4==0)));if((yue==1)||(yue==3)||(yue==5)||(yue==7)||(yue==8)||(yue==10)||(yue==12))r=31;if((yue==4)||(yue==6)||(yue==9)||(yue==11))r=30;if((a==1)&&(yue==2))r=29;if((a==0)&&(yue==2))r=28;returnr;}voidkeyscan(void){ucharz;ucharnum=0;msdelay(500);if(key1==0){msdelay(10);if(key1==0){ds1302r_time();lcdx_time(10,0);while(1){if(key1==0){msdelay(500);num++;if(num==1){lcdxcom(0x80+0x40+4);lcdxcom(0x0f);while((key3==1)&&(key1==1));do{lcdxcom(0x80+0x40+4);lcdxcom(0x0f);while(!key3){shi++;if(shi==24)shi=0;lcdx_time(4,shi);msdelay(300);}}while(key1);}if(num==2){lcdxcom(0xc0+7);lcdxcom(0x0f);while((key3==1)&&(key1==1));do{lcdxcom(0xc0+7);lcdxcom(0x0f);while(!key3){fen++;if(fen==60)fen=0;lcdx_time(7,fen);msdelay(300);}}while(key1);}if(num==3){lcdxcom(0x80+14);lcdxcom(0x0f);while((key3==1)&&(key1==1));do{lcdxcom(0x80+14);lcdxcom(0x0f);while(!key3){week++;if(week==8)week=1;lcdx_day(14,week);msdelay(300);}}while(key1);}if(num==4){lcdxcom(0x80+11);lcdxcom(0x0f);while((key3==1)&&(key1==1));do{lcdxcom(0x80+11);lcdxcom(0x0f);while(!key3){day++;z=panduan(yue,nian);if(day==(z+1))day=0;lcdx_day(11,day);msdelay(300);}}while(key1);}if(num==5){lcdxcom(0x80+8);lcdxcom(0x0f);while((key3==1)&&(key1==1));do{lcdxcom(0x80+8);lcdxcom(0x0f);while(!key3){yue++;if(yue==13)

yue=0;lcdx_day(8,yue);msdelay(300);}}while(key1);}if(num==6){lcdxcom(0x80+5);lcdxcom(0x0f);while((key3==1)&&(key1==1));do{lcdxcom(0x80+5);lcdxcom(0x0f);while(!key3){nian++;if(nian==20)nian=10;lcdx_day(5,nian);msdelay(300);}}while(key1);}if(num==7){timedata[4]=shi;timedata[5]=fen;timedata[6]=0;timedata[3]=day;timedata[2]=yue;timedata[0]=nian;timedata[1]=week;setds1302();num=0;break;}}}}}}voidsetbeep(void){ucharnum=0;msdelay(500);if(key2==0){msdelay(10);if(key2==0){lcdx_time(4,dshi);lcdx_time(7,dfen);lcdx_time(10,0);while(1){if(key2==0)num++;if(num==1){lcdxcom(0xc0+4);lcdxcom(0x0f);while((key3==1)&&(key2==1));do{lcdxcom(0xc0+4);lcdxcom(0x0f);while(!key3){dshi++;if(dshi==24){dshi=0;}lcdx_time(4,dshi);msdelay(300);}}while(key2==1);}if(num==2){lcdxcom(0xc0+7);lcdxcom(0x0f);while((key3==1)&&(key2==1));do{lcdxcom(0xc0+7);lcdxcom(0x0f);while(!key3){dfen++;if(dfen==60){dfen=0;}lcdx_time(7,dfen);msdelay(300);}}while(key2==1);}if(num==3){lcdx_time(4,shi);lcdx_time(7,fen);num=0;break;}msdelay(300);}}}}lcdxshuju(table3[1]);p=0;//定时开标志}}}}4、温度传感器ds18b20的.h函数:#ifndef__DS18B20_H__#define__DS18B20_H__#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharvoidnaozhong(void){sbitds=P2A3;voidds1820init(void);if((b==1)&&(dshi==shi)&&(dfen==fen)&&((miao>=0)&&(miao<=2))){a=0;TR0=1;}}voidds1820xbyte(uchardat);uchards1820rbyte(void);ucharrwendu(void);#endif温度传感器ds18b20的.c函数:#include"ds18b20.h”#include"delay.h"voidds1820init(void)voidockey(void){if(key3==0){msdelay(100);if(key3==0){if(b==1){b=0;//关定时lcdxcom(0xc0+15);lcdxshuju(table3⑵);p=1;//定时关标志}else{b=1;〃开定时lcdxcom(0xc0+15);voidds1820xbyte(uchardat){uchari;for(i=0;i<8;i++){ds=0;ds=dat&0x01;ds18b20delay(4);ds=1;dat>>=1;}{ucharn;ds=1;ds18b20delay(8);ds=0;ds18b20delay(80);ds=1;

ds18b20delay(8);n=ds;ds18b20delay(8);n=ds;ds18b20delay(4);}voidds1820xbyte(uchardat){uchari;for(i=0;i<8;i++){ds=0;ds=dat&0x01;ds18b20delay(4);ds=1;dat>>=1;}ds18b20delay(4);}uchards1820rbyte(void){uchari,a;for(i=0;i<8;i++){ds=0;ds=1;if(ds)a|=0x80;ds18b20delay(4);}returna;}ucharrwendu(void){ucharb,c;ds1820init();ds1820xbyte(0xcc);/^^romds1820xbyte(0x44);//启动温度测量ds18b20delay(300);ds1820init();ds1820xbyte(0xcc);ds1820xbyte(0xbe);b=ds1820rbyte();c=ds1820rbyte();c<<=4;c+=(b&0xf0)>>4;returnc;}5、主函数mian():while(1)#include<reg52.h>{#include"lcd1602.c”ds1302r_time();

温馨提示

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

评论

0/150

提交评论