1602液晶显示时间和温度
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1602液晶显示时间和温度
院系:机电与信息工程学院
班级:09自动化2班
姓名:***
学号:************
完成时间:2011年11月7日
摘要
本设计是以stc89c52rc为控制核心、以LCD1602为液晶显示的装置,利用ds18b20为温度传感器检测周围温度并实时显示出来,同时利用单片机内部中断实现时间的计时功能,且时间可以通过按钮调整,并且自带闹铃功能和出错自检功能。
本设计可用于日常生活的时间显示和闹铃功能,并随时掌握周边温度的变化情况,其使用方便,成本较低。
本设计完全由个人独立完成,通过看书查资料、网上学习等各种方式掌握并应用于实践,并且应用proteus仿真成功,在最后的测试中性能稳定、可靠,能很好的执行各项功能。
关键词:STC89C52RC、DS18B20、1602、蜂鸣器
(一)系统介绍
本设计是以STC89C52RC为控制核心在1602液晶显示屏上显示时间和温度。时间的初始状态为00:00:00,通过四个独立按键来控制时间的时、分的加减,并显示在1602液晶屏的第一行;外接DS18B20温度传感器实现温度的检测,并在1602液晶屏第二行实时动态显示周围温度的变化,且程序内部自带错误检查功能,若未检测到温度传感器,则显示“Error!Check!”并等待检查错误;此外程序内部设定闹铃功能,声音由蜂鸣器发出,定为07:30:00开始闹铃,闹铃时间测试性的定时5秒。
(二)系统设计
1.系统结构图
图1 系统结构图
2.硬件电路部分
1)按键模块
通过小按键K2、K3、K4、K5来实现小时和分钟的加减,主控器通过识别该模块输出的电平来实现加减的功能。
2) 主控器及显示模块
采用了STC89C52RC单片机作为系统的主控器,通过其与各个模块的硬件连接及配套软件的组合实现系统的各项功能,显示部分采用了LCD1602液晶显示。
图2 stc89c52原理图
图2 LCD1602液晶显示部分
3)数字温度传感器DS18B20
DS18B20数字温度传感器具有独特的单线接口方式,在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯,简化了分布式温度传感应用,且无需外部元件;可用数据总线供电,电压范围为3.0 V至5.5 V,无需备用电源。测量温度范围为-55 ° C至+125° C,精度为±0.5 ° C。本设计利用ds18b20的测温功能进行监测,当周围的温度发生变化时温度传感器能够及时的将温度转化为数字信号并显示输出。
图2 DS18B20数字温度传感器
3.软件部分
1)编程思想及流程
否
2)程序代码
见附录A
(三)系统测试与分析
经过10次测试,各项功能均正常,数据稳定可靠。测试结果如表一:(室温:20.5° C)
编号温度显示(° C)时间显示与标准时间对
比有无误差按键按下是
否改变相应
的数值
闹铃是否准时闹
铃和关闭
1 20.5 是无有有
2 20.5 是无有有
3 20.5 是无有有
4 20.
5 是无有有
5 20.5 是无有有
6 20.5 是无有有
7 20.5 是无有有
8 20.5 是无有有
9 20.5 是无有有
10 20.5 是无有有
表一
实物图片:
附录A
C语言代码
#include
#include
#include
sbit RS=P2^1; //寄存器选择位
sbit RW=P2^2; //读写选择位
sbit E=P2^3; //使能信号位
sbit BF=P0^7; //忙碌标志位
sbit S1=P3^2; //小时加
sbit S2=P3^3; //小时减
sbit S3=P3^4; //分钟加
sbit S4=P3^5; //分钟减
sbit sound=P3^7;
unsigned char code Tem[]={"Time:"}; //说明显示的是时间
unsigned char code Temp[]={"Temp:"}; //说明显示的是温度
unsigned char code Cent[]={"Cent"}; //温度单位
unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字
unsigned char code Error[]={"Error!Check!"}; //说明没有检测到DS18B20 unsigned char count; //定义变量统计中断累计次数
unsigned char s,m,h; //定义变量储存秒、分钟和小时
void key(void); //按键函数定义
void clock(); //闹铃子函数
/*****************************************************
延时1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),约是1毫秒
***************************************************/
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
/*****************************************************
延时若干毫秒
***************************************************/
void delay(unsigned char n)
{
unsigned char i;