1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 基于51单片机的时钟闹钟温度计LCD1602显示proteus仿真原理图PCB

基于51单片机的时钟闹钟温度计LCD1602显示proteus仿真原理图PCB

时间:2021-09-06 02:20:11

相关推荐

基于51单片机的时钟闹钟温度计LCD1602显示proteus仿真原理图PCB

功能介绍:

0.本系统采用STC89C52作为单片机

1.LCD1602液晶实时显示时间/当前温度

2.按键可进行闹钟设置和温度上下限设置

3.到达闹钟时间或温度超过阈值范围,蜂鸣器报警

4.到达闹钟时间,蜂鸣器将报警30s,可手动提前停止报警

5.采用DC002作为电源接口可直接输入5V给整个系统供电

原理图:

PCB :

主程序:

#define __MAIN_C#include <reg52.h>#include "main.h"enum DISP_MODE_DF DispMode; //显示模式unsigned char setIndex = 0; //设置位置标志unsigned char alarmTime[3] = {21, 0, 0}; //闹钟时间bit dispFlag = 1; //显示标志bit setFlag = 0; //设置标志bit alarmSwitch = 0; //闹钟开关bit buzzerFlag1 = 0; //蜂鸣器报警标志1bit buzzerFlag2 = 0; //蜂鸣器报警标志2unsigned char buzzerDelay = 0; //蜂鸣器报警倒计时int tempBuf = 0; //温度float f_temperature = 0.0; //温度int minTemp = 15; //温度阈值下限int maxTemp = 35; //温度阈值上限void main(){//初始化DispMode = NORMAL;setFlag = 0;Timer0_Init();LCD_Init();DS1302_Init();DelayMs(20);if (!KEY_ENTER) //启动过程中确定键按下,初始化时间{DelayMs(10);if (!KEY_ENTER){DS1302_WriteTime(); //写入时间}}//开机显示LCD_DispStr(0, 0, " Welcome! ");DS18B20_Start(); DS18B20_GetTemp(&tempBuf);f_temperature = (float)tempBuf * 0.0625;DelayS(2);LCD_Clear();while(1){// LCD1602液晶显示if ((dispFlag == 1) && (setFlag == 0)){dispFlag = 0;DS1302_ReadTime(); //读取时间//检测温度DS18B20_Start(); DS18B20_GetTemp(&tempBuf);f_temperature = (float)tempBuf * 0.0625;if (DispMode == NORMAL){DispNormal(setIndex);}if (alarmSwitch == 1) //闹钟开关打开{if (alarmTime[0] == timeBufDec[4] && alarmTime[1] == timeBufDec[5] && alarmTime[2] == timeBufDec[6]){buzzerFlag1 = 1;buzzerDelay = 120; //报警30s 250ms*120//buzzerDelay = 20; //报警5s 250ms*20}}if (f_temperature < minTemp || f_temperature > maxTemp){buzzerFlag2 = 1;buzzerDelay = 20; //报警5s 250ms*20}else{buzzerFlag2 = 0;}if (buzzerFlag1 == 1 || buzzerFlag2 == 1){if (buzzerDelay != 0){BUZZER = ON;buzzerDelay--;}else{BUZZER = OFF;}}else{BUZZER = OFF;}}KeyProcess(); //按键处理}}void Timer0_Init(void){TMOD &= 0xF0;TMOD |= 0x01;TL0 = 0x00;//设置定时初始值TH0 = 0x4C;//设置定时初始值 50msTR0 = 1; //启动T0计时ET0 = 1; //打开T0中断EA = 1; //打开总中断}void Timer0_Intterupt(void) interrupt 1{static unsigned char time50ms = 0;TL0 = 0x00;//设置定时初始值TH0 = 0x4C;//设置定时初始值 50mstime50ms++;if (time50ms >= 5) //250ms刷新一次状态{time50ms = 0;dispFlag = 1;}}

仿真演示视频:

/video/BV1hD4y117vQ/

实物演示视频:

/video/BV1hP411J78B/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。