當前位置:偏方大全网 - 藥品查詢 - 藥物濕度超過限值

藥物濕度超過限值

# include & ltreg52.h & gt

# include & ltintrins.h & gt

#定義uchar無符號字符

#定義uint無符號整數

typedef無符號字符unint8//unint8替換未指定的char以提高可移植性

typedef無符號char unint 16;

無符號字符str 1[]= { " " };

無符號字符str 2[]= { " " };

無符號char碼dis 1[]= { " Xh RH:" };//定義壹個數組

無符號字符代碼dis 2[]= { " DO T:" };

sbit buz=p1^0;

sbit TRH = p1^7;//溫濕度傳感器DHT11的數據訪問

sbit LCD _ RS = p1^1;

sbit LCD _ rw = p1^2;

sbit LCD _ en = p1^3;

unint8 TH_data,TL_data,RH_data,RL_data,CK _ data;

unint8 TH_temp,TL_temp,RH_temp,RL_temp,CK _ temp;

unint8 com_data,untemp,temp

unint8響應;

void initcom()

{

TMOD = 0x 20;

th 1 = 0x FD;

TL 1 = 0x FD;

tr 1 = 1;

任= 1;

SM0 = 0;

sm 1 = 1;

EA = 1;

ES = 1;

}

void send(無符號字符溫度)

{

//發送彪子

SBUF = temp

而(!TI);

TI = 0;

}

void sendwd()

{

//發送杜文

uint w _ d;

w _ d = TH _ data+128;

SBUF = w _ d;

而(!TI);

TI = 0;

}

void發送d()

{

//發送杜詩

SBUF = RH _ data

而(!TI);

TI = 0;

}

/*********************************************************************************/

void delay nop()///delay

{

_ nop _();

_ nop _();

_ nop _();

_ nop _();

}

/*********************************************************************************/

/*********************************************************************************/

//毫秒延遲子程序

/*********************************************************************************/

void delay_ms(無符號整數毫秒)

{

無符號字符I;

當(毫秒)

{

for(I = 0;我& lt150;i++)

{

_ nop _();

_ nop _();

_ nop _();

_ nop _();

}

}

}

/*********************************************************************************/

/*********************************************************************************/

//5us類延遲程序

/*********************************************************************************/

void delay_us()

{

unint 8 I;

I-;

I-;

I-;

I-;

I-;

I-;

}

/********************************************************************************/

/********************************************************************************/

//測試LCD的忙碌狀態。

//當//lcd_busy()為1時,忙並等待。lcd_busy()為0時,空閑,可以寫指令和數據。

/********************************************************************************/

位lcd_busy()

{

位結果;

LCD _ RS = 0;

LCD _ RW = 1;

LCD _ EN = 1;

delay nop();

結果=(位)(P0 & amp0x 80);

LCD _ EN = 0;

返回(結果);

}

/*******************************************************************************/

/*******************************************************************************/

//將命令數據寫入LCD。

/*******************************************************************************/

void lcd_wcmd(無符號字符命令)

{

while(LCD _ busy());

LCD _ RS = 0;

LCD _ RW = 0;

LCD _ EN = 0;

_ nop _();

_ nop _();

P0 = cmd

delay nop();

LCD _ EN = 1;

delay nop();

LCD _ EN = 0;

}

/*****************************************************************************/

/*****************************************************************************/

//將顯示數據寫入LCD。

//RS=高電平,RW=低電平,E=高脈沖,D0-D7=數據。

/*****************************************************************************/

void lcd_wdata(無符號字符數據)

{

while(LCD _ busy());

LCD _ RS = 1;

LCD _ RW = 0;

LCD _ EN = 0;

P0 = dat

delay nop();

LCD _ EN = 1;

delay nop();

LCD _ EN = 0;

}

/****************************************************************************/

/****************************************************************************/

//LCD初始化設置

/****************************************************************************/

void lcd_init()

{

delay _ ms(15);

LCD _ wcmd(0x 38);//16*2顯示,5*7點陣,8位數據

delay _ ms(5);

LCD _ wcmd(0x 38);

delay _ ms(5);

LCD _ wcmd(0x 38);

delay _ ms(5);

LCD _ wcmd(0x0c);//打開和關閉顯示光標。

delay _ ms(5);

LCD _ wcmd(0x 06);//移動光標

delay _ ms(5);

//LCD _ wcmd(0x 01);//清除LCD的顯示內容。如果屏幕太暗,這兩句可以刪掉。

//delay _ ms(5);

}

/****************************************************************************/

/****************************************************************************/

//設置LCD顯示位置。

/****************************************************************************/

void lcd_dis_pos(無符號字符位置)

{

LCD _ wcmd(pos | 0x 80);//數據指針=80+地址變量

}

/****************************************************************************/

/****************************************************************************/

//收發器信號檢測,數據讀取

/****************************************************************************/

字符接收()

{

unint 8 I;

com _ data = 0;

for(I = 0;我& lt=7;i++)

{

respond = 2;

而((!TRH)& amp;& amprespond++);

delay _ us();

delay _ us();

delay _ us();

中頻(TRH)

{

temp = 1;

respond = 2;

while((TRH)& amp;& amprespond++);

}

其他

temp = 0;

com _ data & lt& lt=1;

com _ data | = temp

}

return(com _ data);

}

/****************************************************************************/

/****************************************************************************/

//濕度讀數子程序

//溫度高8位== TL_data

//8位低溫== TH_data

//濕度高8位== RH_data

//濕度低8位== RH_data

//校驗8位= = CK _數據

//被調用的程序有delay();,Delay _ 5us();,RECEIVE();

/***************************************************************************/

void read_TRH()

{

//主機下拉18ms。

TRH = 0;

delay _ ms(18);

TRH = 1;

//上拉電阻上拉//數據總線,使主機延遲增加20us。

delay _ us();

delay _ us();

delay _ us();

delay _ us();

//delay _ us();

//delay _ us();delay _ us();delay _ us();delay _ us();

//主機被設置為輸入從機響應信號。

TRH = 1;

//判斷DHT11是否有低電平響應信號。如果它沒有反應,就會跳出來,反應往下跑。

如果(!TRH)

{

respond = 2;

//判斷DHT11是否發出80us低電平響應信號。

而((!TRH)& amp;& amprespond++);

respond = 2;

//判斷從機是否發出80us的高電平,如果是,則進入數據接收狀態。

而(TRH & amp& amprespond++);

//數據接收狀態

RH _ temp = receive();

RL _ temp = receive();

TH _ temp = receive();

TL _ temp = receive();

CK _臨時=接收();

TRH = 1;

//數據檢查

untemp =(RH _ temp+RL _ temp+TH _ temp+TL _ temp);

if(untemp==CK溫度)

{

RH _ data = RH _ temp

RL _ data = RL _ temp

TH _ data = TH _ temp

TL _ data = TL _ temp

CK _數據= CK _溫度;

}

}

//濕度的整數部分

str 1[0]=(char)(0x 30+RH _ data/10);

str 1[1]=(char)(0x 30+RH _ data % 10);

str 1[2]= 0x2e;//小數點

//濕度的小數部分

str 1[3]=(char)(0x 30+RL _ data/10);

str 1[5]= 0x 25;//"%"

str 1[6]= 0x 52;//"R "

str 1[7]= 0x 48;//"H "

//溫度的整數部分

str 2[0]=(char)(0x 30+TH _ data/10);

str 2[1]=(char)(0x 30+TH _ data % 10);

str 2[2]= 0x2e;//小數點

//溫度的小數部分

str 2[3]=(char)(0x 30+TL _ data/10);

str 2[5]= 0x 27;//"'"

str 2[6]= 0x 43;//"C "

}

/****************************************************************************/

//冬夏溫度濕度適宜。

//濕度:30%-80% 30%-60%

//溫度:18℃-25℃,23℃-28℃

/****************************************************************************/

Void baoj()//報警功能

{

if(RH _ data & gt;=80) //濕度上限80%

{

buz = 0;

delay _ ms(200);

buz = 1;

delay _ ms(10);

}

else if(RH _ data & lt;= 30)//濕度下限30%

{

buz = 0;

delay _ ms(200);

buz = 1;

delay _ ms(10);

}

else if(TH _ data & gt;= 25)//溫度上限為25℃

{

buz = 0;

delay _ ms(200);

buz = 1;

delay _ ms(10);

}

else if(TH _ data & lt;= 18)//溫度下限18℃

{

buz = 0;

delay _ ms(200);

buz = 1;

delay _ ms(10);

}

其他

{

buz = 1;

}

}

/****************************************************************************/

//主函數

//th,TL,RH,RL分別代表溫度和濕度的整數和小數部分。

/****************************************************************************/

void main()

{

LCD _ init();

initcom();

delay _ us();

while(1)

{

無符號字符I,n=0x40,m;

read _ TRH();

//寫字符

for(I = 0;我& lt=7;i++)

{

lcd_dis_pos(壹);//顯示字符

LCD _ wdata(dis 1[I]);

LCD _ dis _ pos(n+I);//顯示字符

LCD _ wdata(dis 2[I]);

}

//寫入濕度數據

m = 0x08

for(I = 0;我& lt=7;i++)

{

LCD _ dis _ pos(m);

LCD _ wdata(str 1[I]);

m++;

}

//寫入溫度數據

m = 0x48

for(I = 0;我& lt=7;i++)

{

LCD _ dis _ pos(m);

LCD _ wdata(str 2[I]);

m++;

}

//延遲

delay _ ms(500);

baoj();//報警

發送(0x ff);//wsd標誌

//delay _ ms(10);

send wd();

//delay _ ms(10);

sendsd();

//delay _ ms(10);

}

}

  • 上一篇:在讓人羨慕的故宮工作,是壹種怎樣的體驗?
  • 下一篇:誰有海南旅遊自助遊線路及詳情
  • copyright 2024偏方大全网