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

下载本文档

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

文档简介

1、带温度的 LCD1602 电子时钟设计实验信息科学与工程学院专业:信息管理与信息系统1 班姓名:张茹帆学号: 201142597姓名:任师师学号: 201142595带温度的 LCD1602 电子时钟设计一、实验目的学习利用AT89C52 进行任务设计,练习使用52 单片机内部的定时器进行计时。学习ds1302 时钟芯片和ds18b20 温度传感器的使用。学习用模块化编程进行较长程序的编写。二、实验要求(1)利用 lcd1602 液晶显示屏作为显示模块,用AT89C52 进行控制,用ds18b02 测量显示即时温度,温度报警,用ds1302时钟芯片为单片机提供时间数据。具有定时功能。(2)要求

2、时间和定时时间可调,并且在闹铃报时的时候可以用按键进行关闭。并且可以用按键关闭打开定时功能。(3)利用 keil uVision4 编译软件进行编译。(4)完成实验要求,写出实验报告。三、软件环境Proteus仿真软件, keil uVision4 编译软件四、工作现象本时钟具有显示年月日时分秒星期、温度和温度报警的功能。实验用时钟芯片ds1302 来提供秒、分、时、星期、日期、月份和年份的数据,显示部分采用液晶显示模块lcd1602,右上方显示星期,左下角显示温度,右下角显示闹铃的开关状态。用温度传感器ds18b20 来测量温度。另外,闹铃用D1(LED-RED) 来报时,用D2(LED-R

3、ED) 做温度报警发声器 ,闹钟开启用D3 来显示。具体各部分功能及操作下面将做介绍:ds1302 给单片机at89c52 提供年、月、日、时、分、秒、星期, ds18b20 采集温度的数据,经单片机的处理送到液晶显示屏lcd1602 上显示,实验设置的报警温度为30*c,由于程序有点长,已达到 52 单片机内存的极限,所以没加调整报警温度的功能,并且在修正时间的过程中只能加,不能减。现在开始介绍具体的操作步骤: key1为调整时间和日期的按键,按下key1键, lcd1602上的光标按时分星期日月年的顺序进行移动,光标所到处按key3键可以调整相应的数据信息。 Key2 键是闹钟调整键,本实

4、验只提供了设置时间来调整闹钟,不设计年月日和星期,按下key2键,光标在时分之间切换,光标所到处按key3调整相应数据。Key3键用来开关闹钟,当闹铃开启时,lcd1602 的右下角会出现“ON”的字样,同时发光二极管D3点亮当闹铃关闭时,lcd1602右下角则出现“OF”的字样。 Key4来关闭正在报时的闹钟,即闹钟响是按key4可关闭闹铃。五、实验电路图六 、程序流程图开始初始化 LCD 及 DS1302判断设置按键是否按下进入调节模式读取DS1302 中的时间、日期显示时间、日期主程序流程图图定时数据写入S2按下LCD1602定时闪烁调分数据写入LCD1602S2按下定分闪烁调时数据写入

5、S2按下LCD1602进入主程序定时流程图将时间/日期写入 DS1302S3按下时调节S3按下分调节时数据写入Ds1302分数据写入Ds1302星期数据写入Ds1302日数据写入Ds1302月数据写入Ds1302年数据写入Ds1302S1按下时闪烁S1按下分闪烁S1按下星期闪烁S1按下日闪烁S1按下月闪烁S1按下年闪烁S1按下进入主程序时间调节流程图S3按下时调节S3按下分调节S3按下星期 调节S3按下日调节S3按下月调节S3按下年调节七、程序代码:1、 delay 延时函数的 .h 函数:#ifndef _DELAY_H_#define _DELAY_H_lcdxcom(0x06) 。lcd

6、xcom(0x0c) 。#define uint unsigned int#define uchar unsigned charvoid lcdxshuju(uchar dat)void lcddelay(uint z) 。void ds18b20delay(uint t) 。e=0。void msdelay(uint z) 。rs=0。rs=1。#endifrw=0 。P0=dat。Delay 函数的 .c 函数:lcddelay(10) 。#include"delay.h"e=1。void lcddelay(uint t)lcddelay(20) 。e=0。uint j

7、,x 。for(x=t 。x>0 。 x-)void lcdx_time(uchar add,uchar date)/写时分 for(j=19 。j>0 。 j-) 。秒函数void ds18b20delay(uint t)uchar shi,ge。shi=date/10。while(t-) 。ge=date%10。lcdxcom(0x80+0x40+add) 。/ 设置显示位置 lcdxshuju(0x30+shi) 。 /送去液晶显示十位void msdelay(uint z) lcdxshuju(0x30+ge) 。 / 显示各位lcdxcom(0x0c) 。 / 设置开始显

8、示,不显示光标 uint x,y 。for(x=z 。 x>0 。x-)for(y=110 。 y>0 。y-) 。void lcdx_day(uchar add,uchar date)/写时分秒函数2、液晶 lcd1602 的 .h 函数:#ifndef _LCD1602_H_uchar shi,ge。#define _LCD1602_H_shi=date/10。ge=date%10。#include<reg52.h>lcdxcom(0x80+add) 。 /设置显示位置 lcdxshuju(0x30+shi) 。 /送去液晶显示十位#define uint unsi

9、gned int lcdxshuju(0x30+ge) 。 / 显示各位#define uchar unsigned char lcdxcom(0x0c) 。 / 设置开始显示,不显示光标3、时钟芯片ds1302 的 .h 函数:#ifndef _DS1302_H_#define _DS1302_H_#include<reg52.h>sbit rs=P20。sbit rw=P21 。sbit e=P22。static unsigned char shi,fen.miao,day 。static unsigned char yue,week,nian 。void lcdxcom(uc

10、har com) 。static uchar m,f,s,t,y,n,x 。void lcdinit() 。static uchar dshi=0,dfen=0,dmiao=0 。void lcdxshuju(uchar dat) 。static uchar b=0 。void lcdx_time(uchar add,uchar date) 。void lcdx_day(uchar add,uchar date) 。sbit sck=P10 。sbit io=P11 。#endifsbit rst=P12 。sbit key1=P34 。液晶 lcd1602 的 .c 函数:sbit key2

11、=P35 。#include<reg52.h>sbit key3=P36 。#include"lcd1602.h"sbit key4=P37 。#include"delay.h"sbit key5=P33 。#include"ds1302.h"sbit p=P15 。sbit a=P13 。void lcdxcom(uchar com)void pd(void) 。e=0。void zhuan(void) 。rs=0。void wr_ds1302byte(uchar dat) 。rw=0 。void wr_ds1302(u

12、char add,uchar dat) 。P0=com。uchar r_ds1302(uchar add)。lcddelay(10) 。 /500usvoid setds1302(void) 。e=1。void ds1302r_time(void) 。lcddelay(20) 。uchar panduan(uchar yue,uint nian) 。e=0。void keyscan(void) 。void setbeep(void) 。void lcdinit()void naozhong(void) 。void ockey(void) 。lcddelay(300) 。lcdxcom(0x38

13、) 。#endiflcddelay(100) 。时钟芯片ds1302 的 .c 函数:lcdxcom(0x38) 。#include"ds1302.h"lcddelay(100) 。#include<intrins.h>lcdxcom(0x38) 。#include"delay.h"lcdxcom(0x38) 。#include"lcd1602.h"lcdxcom(0x08) 。lcdxcom(0x01) 。uchar timedata=10,6,12,31,23,59,50 。 / 年周月日时分秒uchar xiediz

14、hi=0x8c,0x8a,0x88,0x86,0x84,0x82,0x80 。 /写地址数组 uchar dudizhi=0x8d,0x8b,0x89, 0x87,0x85,0x83,0x81 。 /读地址数组uchar table3="ONF" 。value>>=1 。sck=0。void wr_ds1302byte(uchar dat)/写一个字节的if(io)数据value=value|0x80 。sck=1。uchar i 。for(i=0 。 i<8 。 i+)rst=0 。_nop_() 。while(key2=1)miaods18b20del

15、cktimed。if(num=2)ay(8)ta6。if(yuea>>lcdxwhile(key3=1)&&(key1while(1)sck=0huju(table31)=4)|(yue=6)|(yue。=91)|(yue=11)。n=dsfen=timedata5io=dat&0x01。lcdxcom(0x80+5)。ds=1nop。 p=0()。/定do时开标志r=30。if(num=3)。if(ds) if(key2=0)ds18b20shi=timedat>>=1d。atelacdxcom(0x0f)4y(4)。lcdxcom(0xc0+

16、7)。sck=1if(a=1)&&(yue=2)。day=timedata3sck1。lcdxcom(0x0f)。while(!key3)。a|=0x80io=1r=29。num+lcdxcom(0x80+11)。voidyue=timedata2ds1820xbyte(ucharlcdxtime(4,shi)。dat)。ds18b20delay(4)returnvalueif(num=1)lcdxcom(0x0f)。if(a=0)&&(yue=2)while(key3=1)&&(key1=1)wek=timedalcdxnitaime(7,fe

17、n)1n+。 r=28 。while(!key3)ucharnian=timedata。num=if(nian=20)。do。4return、温度a传。感lcdxcom(0xc器ds18b20+4)的 .h。函数:return r 。dat)/ 写#ifndefvoidDS18B20 H。vfoidr(i=0wr_。ds1302(ucharbreaki<8。nian=10。i+) add,uchar。setds1302(void)lcxcom(0x0f)ay+。数据 lcdx_day(5,nian)lcdxcom(0xc0+7)。voiduchar#definekeyscarwendu(

18、void)DS18B20z=panduan(yue,nian)H。voidds=0zhuan(void)。msdelay(300)lcdxcom(0x。f) 。 while(key3=1)&&uchari,j。if(day=(key2=1)z+1)。dsrst=dat&0x01。 while(!key3)ucha#include<reg52for(i=0b,cz。doi<8day=0。.h>i+)。m=timedata6ds18b20delay(4)nop()。while(key1) 。ds1820init() lcdx。_day(11,day) 。u

19、char num=0。#define uint unsigned intf=timedata5ds=1sck=0。fen+。ds1820xbyte(0xcc)atj=timsdellcdxcom(0xcmsdelay(30y(500)i/10。/0跳+4)过。 。roms=timedata4dat>>=1nop()。if(fen=60)。if(k#dds1820xbyte(0x44)timfiny1=0)edatai=timedatai%10ucharlcdxcom(0x0f)unsigned。/char启动。温度。测量t=timedata3rst=1。if(num=7)fen=0

20、。 。 ds18b20delay(300)timedatai=timedatai+j*16while(!key3)。ds18b20delay(4)voidy=timedata2nopnaozhong(vo()。lcdx。time(7,fen)d)。sbitds1820init()ds=P23msdelay(10)。while(key1)。x=tiwrtimedata4=shids1302byte(add)edata1msdelay(300)。ds1820xbyte(0xcc)wrds1302(if(ke1=0)8e,0x00)。dshi+。/去除写保护uchar ds1820rbyte(voi

21、d)if(dshi=24)n=timedatatimedata5=fenwrds130byte(dat)。 。voidds1820xbyte(0xbe)for(i=0ds1820init(void)。i<7。i+)。if(brst=0=1)&&(dshi=shi)&&(dfen=fen)&&(。timedata6=0while(key1)。voidb=ds1820rbyte()ds1820xbyte(uchards1302rime()。if(num=5)。dat) 。void(miao>=0)&&(miucharnop

22、d(void)i,atimedat。a3o<=2)day 。uchac=ds1820rbyte()wrds1820rbyte(void)ds1302(xiedizhii,timedatai)。dshi=0。 。lcdxtime(10,0)。for(i=0io=1。timedata2=yuei<8。i+)。ucharc<<=4rwendu(void)。hile(1)lcdxcom(0x80+8)。slcdxk=1time(10,miao)。a=0timedata0=nian。if(num=3)。c+=(b&0xf0)>>4#endifwrds1302(

23、0x8e,0x0lcdxcom(0x0f)。time(4,dshi)。/加除写保。护 if(f!=fen)。温度传感器 ds18b20 的 .c 函数:ds=0。TR0=1timedata1=week。return c。if(key1=0)msdelay(300) 。lcdx_timsetds1302()(7,fen)lcdxcom(0x80+14)。#inwhile(key3=1)&&(key1=1)dxcom(0xc0+14)clude"ds18b20.h" 。ucharif(s!=shi)rds1302(ucharnum=0lcdxcom(0x0f)。

24、add)。#include"delay.h" owhile(key2=1)。lcdxshuju(table30)mselay(500)。 lcdx_time(4,shi)break。 。voidlcds1820init(void)xshuju(table32)num+ 。whvoiducharif(t!=daockey(void)le(kei,value3=1)&&(key1=1)。void ds1820xbyte(ucharif(num=1)lcdxcoif(num=2)dat)(0x80+8) 。 lcdxrst=0day(11,day)。do。lcdx

25、com(0x0f)。if(key3=0)if(y!=yue)nop()。ucharvoid ds1302ri。_lcdxtime(void)while(!key3)cdxcom(0x80+0x40+4)xc0+7)。lcdxcom(0x80+14)。lcdxsck=0day(8,yue)。for(i=0 。lcdxcom(0x0f)i<8。i+)。 。 if(n!=nian)nop()msdelay(100)。lcdxcom(0x0f)。 。uchar i 。 yue+ 。 lcdxrst=1day(5,nian)。if(key3=0)while(!key3)。ds=0for(i=0。

26、。 i<7if(yue=。i+) 3)。while(key3=1)&&(key2=1)。voidif(x!=week)nopsetbeep(void)()。ds=dat&0x01doyue=0。do。 lcdxwrds1302bytday(14,wif(b=1)wee(add)k+ek)。ds18b20detimedatai=rlay(4)cdxds1302(dday(8,y。ue)dizhii)/16*10+r。_ducharfor(i=0num=0。i<8if(week=8)。i+)ds=1s1302(dudizhii)%16。mslcelay(3 0)

27、xc0+7)。 。lcdxcom(0x80+0x40+4) 。msdelay(50b=0)。week=1/关定时。dat>>=1lcdxcom(0x0f)。 。uchar panduan(ucharif(key2=0)lcdxcom(0xc0+15)day(14,week)yue,uint。nian)。key1)!key3) 。while(!key3)lcdxshuju(table32)msdelay(300)。 。 uchar r,amsdelay(10)。p=1。/定时。关标志uchar n。 shi+ 。 dfen+ 。5、主函数 mian():while(1)#include<reg52.h>#include"lcd1602.c"ds1302r_time() 。七、实验总结:#include"ds18b20.c"

温馨提示

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

评论

0/150

提交评论