该【带温度的LCD1602电子时钟设计 】是由【wawa】上传分享,文档一共【16】页,该文档可以免费在线阅读,需要了解更多关于【带温度的LCD1602电子时钟设计 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。1带温度的LCD1602电子时钟设计试验信息科学与工程学院专业:信息管理与信息系统1班姓名:张茹帆学号:201142597姓名:任师师学号:2011425953带温度的LCD1602电子时钟设计一、试验目的学习利用AT89C52进行任务设计,练习运用52单片机内部的定时器进行计时。学习ds1302时钟芯片和ds18b20温度传感器的运用。学习用模块化编程进行较长程序的编写。二、试验要求(1)利用lcd1602液晶显示屏作为显示模块,用AT89C52进行限制,用ds18b02测量显示即时温度,温度报警,用ds1302时钟芯片为单片机供应时间数据。具有定时功能。(2)要求时间和定时时间可调,并且在闹铃报时的时候可以用按键进行关闭。并且可以用按键关闭打开定时功能。(3)利用keiluVision4编译软件进行编译。(4)完成试验要求,写出试验报告。三、软件环境Proteus仿真软件,keiluVision4编译软件四、工作现象本时钟具有显示年月日时分秒星期、温度和温度报警的功能。试验用时钟芯片ds1302来供应秒、分、时、星期、日期、月份和年份的数据,显示部分采纳液晶显示模块lcd1602,右上方显示星期,左下角显示温度,右下角显示闹铃的开关状态。用温度传感器ds18b20来测量温度。另外,闹铃用D1(LED-RED)来报时,用D2(LED-RED)做温度报警发声器,闹钟开启用D3来显示。详细各部分功能及操作下面将做介绍:3ds1302给单片机at89c52供应年、月、日、时、分、秒、星期,ds18b20采集温度的数据,经单片机的处理送到液晶显示屏lcd1602上显示,试验设置的报警温度为30*c,由于程序有点长,已达到52单片机内存的极限,所以没加调整报警温度的功能,并且在修正时间的过程中只能加,不能减。现在起先介绍详细的操作步骤:key1为调整时间和日期的按键,按下key1键,lcd1602上的光标按时分星期日月年的依次进行移动,光标所到处按key3键可以调整相应的数据信息。Key2键是闹钟调整键,本试验只供应了设置时间来调整闹钟,不设计年月日和星期,按下key2键,光标在时分之间切换,光标所到处按key3调整相应数据。Key3键用来开关闹钟,当闹铃开启时,lcd1602的右下角会出现“ON”的字样,同时发光二极管D3点亮当闹铃关闭时,lcd1602右下角则出现“OF”的字样。Key4来关闭正在报时的闹钟,即闹钟响是按key4可关闭闹铃。4五、试验电路图5六、程序流程图起先初始化LCD及DS1302进入调整模式推断设置按键是否按下将时间/日期写入DS1302读取DS1302中的时间、日期显示时间、日期主程序流程图图定时闪耀S2按下定分闪耀S2按下S3按下时调整S3按下分调整定时数据写入LCD1602调分数据写入LCD1602进入主程序调时数据写入LCD1602S2按下定时流程图6年调整S3按下S3按下年数据写入Ds1302月数据写入Ds1302日数据写入Ds1302星期数据写入Ds1302进入主程序S1按下日调整月调整星期调整年闪耀S1按下月闪耀S1按下日闪耀S1按下时闪耀S1按下分闪耀S1按下星期闪耀S3按下时调整S3按下分调整时数据写入Ds1302分数据写入Ds1302S3按下S3按下S1按下时间调整流程图8七、程序代码:sbitrs=P2^0;sbitrw=P2^1;sbite=P2^2;();voidlcdinit();voidlcdxshuju(uchardat);voidlcdx_time(ucharadd,uchardate);voidlcdx_day(ucharadd,uchardate);#:#include<>#include""#include""#include""(){e=0;rs=0;rw=0;;lcddelay(10);//500use=1;lcddelay(20);e=0;}voidlcdinit(){lcddelay(300);(0x38);lcddelay(100);(0x38);lcddelay(100);(0x38);(0x38);(0x08);(0x01);1、:#ifndef__DELAY_H__#define__DELAY_H__#defineuintunsignedint#defineucharunsignedcharvoidlcddelay(uintz);voidds18b20delay(uintt);voidmsdelay(uintz);#:#include""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、:#ifndef__LCD1602_H__#define__LCD1602_H__#include<>#defineuintunsignedint#defineucharunsignedchar8staticunsignedcharshi,,day;staticunsignedcharyue,week,nian;staticucharm,f,s,t,y,n,x;staticuchardshi=0,dfen=0,dmiao=0;staticucharb=0;sbitsck=P1^0;sbitio=P1^1;sbitrst=P1^2;sbitkey1=P3^4;sbitkey2=P3^5;sbitkey3=P3^6;sbitkey4=P3^7;sbitkey5=P3^3;sbitp=P1^5;sbita=P1^3;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);#:#include""#include<> #include""#include""uchartimedata[]={10,6,12,31,23,59,50};//年周月日时分秒ucharxiedizhi[]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; //写地址数组uchardudizhi[]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//读地址数组(0x06);(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;(0x80+0x40+add);//设置显示位置lcdxshuju(0x30+shi);//送去液晶显示十位lcdxshuju(0x30+ge);//显示各位(0x0c);//设置起先显示,不显示光标}voidlcdx_day(ucharadd,uchardate)//写时分秒函数{ucharshi,ge;shi=date/10;ge=date%10;(0x80+add);//设置显示位置lcdxshuju(0x30+shi);//送去液晶显示十位lcdxshuju(0x30+ge);//显示各位(0x0c);//设置起先显示,不显示光标}3、:#ifndef__DS1302_H__#define__DS1302_H__#include<>#defineuintunsignedint#defineucharunsignedchar 9value>>=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;}wr_ds1302(0x8e,0x00);//去除写爱护for(i=0;i<7;i++){wr_ds1302(xiedizhi[i],timedata[i]);}wr_ds1302(0x8e,0x00);//加除写爱护(0xc0+14);lcdxshuju(table3[0]);lcdxshuju(table3[2]);}voidds1302r_time(void){uchari;for(i=0;i<7;i++){timedata[i]=r_ds1302(dudizhi[i])/16*10+r_ds1302(dudizhi[i])%16;}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++){
带温度的LCD1602电子时钟设计 来自淘豆网m.daumloan.com转载请标明出处.