欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
我設計一個溫室檢測,但是單片機程序無法讓蜂鳴器報警和控制繼電器,求大佬指點
[打印本頁]
作者:
皮皮蝦不p
時間:
2019-4-21 12:52
標題:
我設計一個溫室檢測,但是單片機程序無法讓蜂鳴器報警和控制繼電器,求大佬指點
TH 和RH是300ms檢測一次得到的數據,Data1和2是自己通過按鍵可以調整的閥值,這兩個數據都能在lcd1602上正確顯示,但是就是那個報警函數warn(),燒寫后跟不不按照預定想法來實行。怎么樣都不會報警,我把控制蜂鳴器的管腳連接led也沒用。不知道是不是我程序寫的有問題,希望大佬們幫我看一下。
單片機源程序如下:
#include"reg52.h"
#include"dht11.h"
#include "lcd1602.h"
#include"keypros.h"
#include"i2c.h"
sbit beep=P1^4;
sbit switch1=P1^5;
sbit switch2=P1^6;
extern uint RH,TH;
extern uint rec_dat1[2]; //用于顯示的接收數據數組
extern uint rec_dat2[2];
extern uint Data1,Data2;
extern uchar menu,flat;
uchar DHT11;
uchar i;
uchar menu1_1[]={"Temp: C T:"},menu1_2[]={"Humi: %RH H:"},menu2[]={"Temp"},menu3[]={"Humi"};
void time_init()
{
EA = 1; //開總中斷
TMOD = 0X01; //定時器0、定時器1工作方式1
ET0 = 1; //開定時器0中斷
TR0 = 1; //允許定時器0定時
}
void warn() //報警函數
{
if(Data1<=TH) //檢測的溫度高于設定溫度報警值
{
beep=1; //報警
switch1=1;
}
if(Data2<=RH) //檢測的濕度高于設定的濕度值
{
beep=1;
switch2=1; //報警
}
if( Data1<=TH && Data2<=RH )
{
beep=0; //停止報警
switch1=0;
switch2=0;
}
}
void main()
{
Data1=At24c02Read(1);
delay(10);
Data2=At24c02Read(2);
time_init();
while(1)
{
Key(); //通過按鍵1來選擇模式 模式1顯示數據 模式二 調整溫度閥值 模式三調整濕度閥值
if(menu==0)
{
if(flat==1)
{
flat=0;
LcdWriteCom(0x38); //開顯示
LcdWriteCom(0x0c); //開顯示不顯示光標
LcdWriteCom(0x06); //寫一個指針加1
LcdWriteCom(0x01);
LcdWriteCom(0x80);
for(i=0;i<14;i++)
LcdWriteData(menu1_1[i]);
LcdWriteCom(0x87);
LcdWriteData(0xdf);
LcdWriteCom(0x40+0x80);
for(i=0;i<14;i++)
LcdWriteData(menu1_2[i]);
LcdWriteCom(0x0e+0x80);
LcdWriteData((Data1/10)+0x30);
LcdWriteCom(0x0f+0x80);
LcdWriteData((Data1%10)+0x30);
LcdWriteCom(0x4e+0x80);
LcdWriteData((Data2/10)+0x30);
LcdWriteCom(0x4f+0x80);
LcdWriteData((Data2%10)+0x30);
}
if(DHT11==1)
{
DHT11=0;
DHT11_receive();
warn();
LcdWriteCom(0x85);
LcdWriteData(rec_dat2[0]);
LcdWriteCom(0x86);
LcdWriteData(rec_dat2[1]);
LcdWriteCom(0x45+0x80);
LcdWriteData(rec_dat1[0]);
LcdWriteCom(0x46+0x80);
LcdWriteData(rec_dat1[1]);
}
}
if(menu==1)
{
if(flat==1)
{
flat=0;
LcdInit1(); //初始化 函數
LcdWriteCom(0x86);
for(i=0;i<4;i++)
LcdWriteData(menu2[i]);
}
shezhi(); //此函數是通過按鍵增加溫度閥值
LcdWriteCom(0x47+0x80);
LcdWriteData((Data1/10)+0x30);
LcdWriteCom(0x48+0x80);
LcdWriteData((Data1%10)+0x30);
}
if(menu==2)
{
if(flat==1)
{
flat=0;
LcdInit1();
LcdWriteCom(0x86);
for(i=0;i<4;i++)
LcdWriteData(menu3[i]);
}
shezhi(); ////此函數是通過按鍵增加濕度閥值
LcdWriteCom(0x47+0x80);
LcdWriteData((Data2/10)+0x30);
LcdWriteCom(0x48+0x80);
LcdWriteData((Data2%10)+0x30);
}
}
}
void time0_int() interrupt 1
{
static uchar i;
TH0 = 0x3c;
TL0 = 0xb0; // 50ms
i++;
if(i==6)
{
i = 0;
DHT11=1; //300ms
}
}
復制代碼
作者:
SURUBU1976
時間:
2019-4-23 20:23
蜂鳴器選型選對了沒?
作者:
wushiye54
時間:
2019-4-24 20:01
void warn() //報警函數
{
if(
Data1<=TH
) //檢測的溫度高于設定溫度報警值
{
beep=1; //報警
switch1=1;
}
if(
Data2<=RH
) //檢測的濕度高于設定的濕度值
{
beep=1;
switch2=1; //報警
}
if(
Data1<=TH && Data2<=RH
)
{
beep=0; //停止報警
switch1=0;
switch2=0;
}
}
你判斷邏輯都有問題
作者:
Wuhen_123456789
時間:
2019-4-24 23:25
前面兩個IF語句應該是大于等于,你的邏輯有點小問題
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1