带温度的LCD1602电子时钟设计Word格式文档下载.docx
- 文档编号:15877490
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:29
- 大小:613.54KB
带温度的LCD1602电子时钟设计Word格式文档下载.docx
《带温度的LCD1602电子时钟设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《带温度的LCD1602电子时钟设计Word格式文档下载.docx(29页珍藏版)》请在冰豆网上搜索。
(3)利用keiluVision4编译软件进行编译。
(4)完成实验要求,写出实验报告。
三、软件环境
Proteus仿真软件,keiluVision4编译软件
四、工作现象
本时钟具有显示年月日时分秒星期、温度和温度报警的功能。
实验用时钟芯片ds1302来提供秒、分、时、星期、日期、月份和年份的数据,显示部分采用液晶显示模块lcd1602,右上方显示星期,左下角显示温度,右下角显示闹铃的开关状态。
用温度传感器ds18b20来测量温度。
另外,闹铃用D1(LED-RED)来报时,用D2(LED-RED)做温度报警发声器,闹钟开启用D3来显示。
具体各部分功能及操作下面将做介绍:
ds1302给单片机at89c52提供年、月、日、时、分、秒、星期,ds18b20采集温度的数据,经单片机的处理送到液晶显示屏lcd1602上显示,实验设置的报警温度为30*c,由于程序有点长,已达到52单片机内存的极限,所以没加调整报警温度的功能,并且在修正时间的过程中只能加,不能减。
现在开始介绍具体的操作步骤:
key1为调整时间和日期的按键,按下key1键,lcd1602上的光标按时分星期日月年的顺序进行移动,光标所到处按key3键可以调整相应的数据信息。
Key2键是闹钟调整键,本实验只提供了设置时间来调整闹钟,不设计年月日和星期,按下key2键,光标在时分之间切换,光标所到处按key3调整相应数据。
Key3键用来开关闹钟,当闹铃开启时,lcd1602的右下角会出现“ON”的字样,同时发光二极管D3点亮当闹铃关闭时,lcd1602右下角则出现“OF”的字样。
Key4来关闭正在报时的闹钟,即闹钟响是按key4可关闭闹铃。
五、实验电路图
六、程序流程图
主程序流程图图
定时闪烁
S2按下
定分闪烁
S3按下
时调节
分调节
定时数据写入
LCD1602
调分数据写入
进入主程序
调时数据写入
定时流程图
时闪烁
S1按下
分闪烁
星期闪烁
时数据写入
Ds1302
分数据写入
时间调节流程图
1、delay延时函数的.h函数:
#ifndef__DELAY_H__
#define__DELAY_H__
#defineuintunsignedint
#defineucharunsignedchar
voidlcddelay(uintz);
voidds18b20delay(uintt);
voidmsdelay(uintz);
#endif
Delay函数的.c函数:
#include"
delay.h"
voidlcddelay(uintt)
{
uintj,x;
for(x=t;
x>
0;
x--)
for(j=19;
j>
j--);
}
voidds18b20delay(uintt)
while(t--);
voidmsdelay(uintz)
uintx,y;
for(x=z;
for(y=110;
y>
y--);
2、液晶lcd1602的.h函数:
#ifndef__LCD1602_H__
#define__LCD1602_H__
#include<
reg52.h>
sbitrs=P2^0;
sbitrw=P2^1;
sbite=P2^2;
voidlcdxcom(ucharcom);
voidlcdinit();
voidlcdxshuju(uchardat);
voidlcdx_time(ucharadd,uchardate);
voidlcdx_day(ucharadd,uchardate);
液晶lcd1602的.c函数:
lcd1602.h"
ds1302.h"
voidlcdxcom(ucharcom)
e=0;
rs=0;
rw=0;
P0=com;
lcddelay(10);
//500us
e=1;
lcddelay(20);
voidlcdinit()
lcddelay(300);
lcdxcom(0x38);
lcddelay(100);
lcdxcom(0x08);
lcdxcom(0x01);
七、程序代码:
lcdxcom(0x06);
lcdxcom(0x0c);
voidlcdxshuju(uchardat)
{
rs=1;
P0=dat;
}
voidlcdx_time(ucharadd,uchardate)//写时分秒函数
ucharshi,ge;
shi=date/10;
ge=date%10;
lcdxcom(0x80+0x40+add);
//设置显示位置
lcdxshuju(0x30+shi);
//送去液晶显示十位
lcdxshuju(0x30+ge);
//显示各位
//设置开始显示,不显示光标
voidlcdx_day(ucharadd,uchardate)//写时分秒函数
lcdxcom(0x80+add);
3、时钟芯片ds1302的.h函数:
#ifndef__DS1302_H__
#define__DS1302_H__
staticunsignedcharshi,fen.miao,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);
时钟芯片ds1302的.c函数:
intrins.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_();
rst=1;
wr_ds1302byte(add);
wr_ds1302byte(dat);
io=1;
ucharr_ds1302(ucharadd)
uchari,value;
value>
if(io)
value=value|0x80;
sck=1;
returnvalue;
voidsetds1302(void)
uchari,j;
for(i=0;
j=timedata[i]/10;
timedata[i]=timedata[i]%10;
ti
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 温度 LCD1602 电子 时钟 设计