欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
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.raoushi.com/bbs/)
Powered by Discuz! X3.1