编号:70
基于51单片机的电子时间显示与室内温度测量系统
功能描述:
本设计由89C52单片机+键盘模块+液晶1602模块+声光报警电路+四段数码管电路+DS1302时钟电路+DS18B20温度检测电路+
1、利用STC89C52单片机
2、利用DS1302时钟芯片,实时显示当前年月日时分秒星期
3、三个按键可设置日期时间
4、利用DS18B20温度传感器采集温度
5、LCD1602显示日期时间星期,四位共阳数码管显示温度。
视频演示链接:
70、基于51单片机的电子时间显示与室内温度测量系统
仿真图:
电路图:
实物图:
程序源码:
/***********************************************
***********************************************/
#include "reg52.h"
#include "intrins.h"
#include "delay.h"
#include "lcd1602.h"
#include "SEG.h"
#include "ds1302.h"
#include "ds18b20.h"
#include "key.h"
bit flag_timer ;
short temprature;
void main(void)
{
unsigned char Byte [7]={0,12,20,24,7,1,17}; //用来存放设置时的小时、分钟的中间值
unsigned int cnt=0;
DS1302_Init(); //DS1302初始化
// DS1302_Set_Time(0x80,&Byte,7); //设置初始时间函数
Lcd1602_Init(); //LCD1602液晶初始化
Smg_Get(0); //显示数值
Timer0Init(); //定时器初始化
while(1)
{
keyset(); //键盘设置
if(cnt++>20)
{
cnt = 0;
temprature=DS18B20_Get_Temp();
if(temprature<0)
temprature=-temprature;
}
delay_ms(50); //间隔几百毫秒
if(flag_timer==1) //赋一次值
{
flag_timer = 0; //清除标志 等待下一次400ms
Smg_Get(temprature);//显示数值
}
DS1302_Get_Time(0x81,time_buf,7); //读取时间
DS1302_Time(); //格式化输出日期时间信息
Lcd1602_String(0,0,myDay);
Lcd1602_String(0,1,myTime);
}
}
void tm0_isr() interrupt 1 using 1
{
static unsigned char cnt=0;
TF0 = 0;
TL0 = 0xCD; //设置定时初值
TH0 = 0xF8; //设置定时初值
Smg_display(); //数码管显示函数
if(cnt++ >= 200) //2ms*200 =400ms
{
cnt = 0;
flag_timer = 1;
}
}
软件免费下载地址:
1、Proteus仿真软件
文件内容:Proteus7.8安装包、Proteus8.6安装包、Proteus.8.10安装包、Proteus Professional 8.11 SP0安装包
链接:https://pan.baidu.com/s/11LNUZ9BJXWvXf1C4dPc3_w
提取码:2756
2、KEIL4 C51软件安装包
链接:https://pan.baidu.com/s/1CTZBqDsPsyIbjCIjI_birA
提取码:sy2a
文件下载:
链接: https://pan.baidu.com/s/1okVNr-IAqNlXQIxTdeUZLQ?pwd=1234
提取码: 1234