带温度的LCD1602电子时钟设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

带温度的LCD1602电子时钟设计实验信息科学与工程学院

专业:信息管理与信息系统1班

姓名:张茹帆学号:*********

姓名:任师师学号:*********

带温度的LCD1602电子时钟设计一、实验目的

学习利用AT89C52进行任务设计,练习使用52单片机内部的定时器进行计时。学习ds1302时钟芯片和ds18b20温度传感器的使用。学习用模块化编程进行较长程序的编写。

二、实验要求

(1)利用lcd1602液晶显示屏作为显示模块,用AT89C52进行控制,用ds18b02测量显示即时温度,温度报警,用ds1302时

钟芯片为单片机提供时间数据。具有定时功能。

(2)要求时间和定时时间可调,并且在闹铃报时的时候可以用按键进行关闭。并且可以用按键关闭打开定时功能。

(3)利用keil uVision4编译软件进行编译。

(4)完成实验要求,写出实验报告。

三、软件环境

Proteus仿真软件,keil uVision4编译软件

四、工作现象

本时钟具有显示年月日时分秒星期、温度和温度报警的功能。实验用时钟芯片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可关闭闹铃。

五、实验电路图

六、程序流程图

主程序流程图图

定时流程图

时间调节流程图

七、程序代码:

1、delay延时函数的.h函数:#ifndef __DELAY_H__

#define __DELAY_H__

#define uint unsigned int

#define uchar unsigned char

void lcddelay(uint z);

void ds18b20delay(uint t); void msdelay(uint z);

#endif

Delay函数的.c函数:

#include"delay.h"

void lcddelay(uint t)

{

uint j,x;

for(x=t;x>0;x--)

for(j=19;j>0;j--);

}

void ds18b20delay(uint t)

{

while(t--);

}

void msdelay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

2、液晶lcd1602的.h函数:#ifndef __LCD1602_H__

#define __LCD1602_H__

#include

#define uint unsigned int

#define uchar unsigned char sbit rs=P2^0;

sbit rw=P2^1;

sbit e=P2^2;

void lcdxcom(uchar com);

void lcdinit();

void lcdxshuju(uchar dat);

void lcdx_time(uchar add,uchar date); void lcdx_day(uchar add,uchar date);

#endif

液晶lcd1602的.c函数:

#include

#include"lcd1602.h"

#include"delay.h"

#include"ds1302.h"

void lcdxcom(uchar com)

{

e=0;

rs=0;

rw=0;

P0=com;

lcddelay(10);//500us

e=1;

lcddelay(20);

e=0;

}

void lcdinit()

{

lcddelay(300);

lcdxcom(0x38);

lcddelay(100);

lcdxcom(0x38);

lcddelay(100);

lcdxcom(0x38);

lcdxcom(0x38);

lcdxcom(0x08);

lcdxcom(0x01);

相关文档
最新文档