标题:
C51单片机温湿度显示(DHT11)仿真程序
[打印本页]
作者:
keill5zuo
时间:
2025-3-31 10:08
标题:
C51单片机温湿度显示(DHT11)仿真程序
仿真+代码
51hei图片_20250331100701.png
(103.57 KB, 下载次数: 0)
下载附件
仿真
2025-3-31 10:07 上传
单片机源程序如下:
#include "DHT11.h"
#include "LCD1602.h"
//灯、蜂鸣器、按键引脚定义
sbit led1 = P1^1; //正常指示灯
sbit led2 = P1^2; //超限指示灯
sbit buzz = P2^1; //蜂鸣器
sbit key_set = P3^2; //设置键
sbit key_jia = P3^3; //加键
sbit key_jian= P3^4; //减键
//变量定义
uchar temp_up=35,temp_down=10;//存储温度上、下限值
uchar humi_up=80,humi_down=40;//存储湿度上、下限值
uchar set_f; //设置选择标记,=0非设置,=1设置湿度上限,=2设置湿度下限
// =3设置温度上限,=4设置温度下限,=5设置照度上限,=6设置照度下限
uchar Flash; //闪烁信号
uchar U8FLAG;
uchar Temp_H,Temp_L,Humi_H,Humi_L,Check_data;//温度整数位,小数位;湿度整数位
//显示固定内容
void fix_display()
{
LCD_ShowString(1,1,"Humidity: ");//humidity
LCD_ShowString(2,1,"Temperature: ");//temperature
LCD_ShowString(1,13,"%");
LCD_ShowString(2,16,"C");
}
//显示当前测出的内容
void now_display()
{
if(temp_up<Temp_H||temp_down>Temp_H||humi_up<Humi_H||humi_down>Humi_H)//当温湿度超过界限时
{
//蜂鸣器响,超限指示灯亮
buzz=0;
led1=1;
led2=0;
}
else //蜂鸣器不响,正常指示灯亮
{
buzz=1;
led1=0;
led2=1;
}
//显示实测的照度与温湿度
LCD_ShowNum(1,11,Humi_H,2);
LCD_ShowNum(2,14,Temp_H,2);
}
//显示设置时的内容
void set_display()
{
LCD_ShowString(1,1,"Humi:Up");
LCD_ShowString(2,1,"Temp:Up");
LCD_ShowString(1,10,"Down");
LCD_ShowString(2,10,"Down");
//利用定时器设置Flash闪烁值以达到闪烁效果
if(Flash==1&&set_f==1){LCD_ShowString(1,8," ");} //当Flash等于1则清零,等于0则显示
else{LCD_ShowNum(1,8,humi_up,2);} //当set_f标记键分别等于1,2,3,4时,设置不同位置
if(Flash==1&&set_f==2){LCD_ShowString(1,14," ");}
else{LCD_ShowNum(1,14,humi_down,2);}
if(Flash==1&&set_f==3){LCD_ShowString(2,8," ");}
else{LCD_ShowNum(2,8,temp_up,2);}
if(Flash==1&&set_f==4){LCD_ShowString(2,14," ");}
else{LCD_ShowNum(2,14,temp_down,2);}
}
//按键扫描
void scan()
{
if(key_set==0) //当设置键摁下时
{
Delay_ms(7);
if(key_set==0)
{
buzz=1; //蜂鸣器关闭,所有LED熄灭
led1=1;
led2=1;
if(set_f==0) //进入设置模式
{
LCD_WriteCommand(0x01); //清屏
Delay_ms(10);
}
set_f++; //每摁一次key_f设置键,set_f标记键便加1
if(set_f==5) //当循环6次,即摁下key_set设置键6次时,把set_f标记键置0
{
set_f=0;
LCD_WriteCommand(0x01); //清屏
Delay_ms(10);
fix_display(); //显示固定内容
}
}
while(!key_set); //当摁下key_sey设置键松手时,完成一次操作
}
if(key_jia==0&&set_f!=0) //加法键
{
Delay_ms(7);
if(set_f==1){humi_up++;}
if(set_f==2){humi_down++;}
if(set_f==3){temp_up++;}
if(set_f==4){temp_down++;}
}
if(key_jian==0&&set_f!=0) //减法键
{
Delay_ms(7);
if(set_f==1){humi_up--;}
if(set_f==2){humi_down--;}
if(set_f==3){temp_up--;}
if(set_f==4){temp_down--;}
}
}
void main()
{
TMOD &= 0x00; //设置定时器模式
TMOD |= 0x10; //设置定时器模式
TL1 = 0x18; //设置定时初值
TH1 = 0xFC; //设置定时初值
TF1 = 0; //清除TF0标志
TR1 = 1; //定时器0开始计时
ET1=1;
EA=1;
led1=1;
led2=1;
LCD_Init(); //LCD初始化
fix_display(); //显示固定内容
Delay_ms(100);
while(1)
{
scan(); //按键扫描
if(set_f==0) //表示并未进入设置操作
{
EA=0; //关闭中断
DHT11_read(); //DHT11读取温湿度值
now_display(); //显示实测内容
EA=1; //打开中断
}
else
set_display(); //显示设置内容
}
}
void Timer1_Rountine() interrupt 3 //中断程序
{
static unsigned int T1Count;
TL1 = 0x18; //设置初值
TH1 = 0xFC;
T1Count++;
if(T1Count>=500) //每隔500ms,即0.5秒
{
T1Count=0;
Flash=!Flash; //Flash翻转
}
}
复制代码
下载:
C51_温湿度显示(DHT11).7z
(181.58 KB, 下载次数: 0)
2025-4-1 20:13 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1