久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機的DHT11溫濕度測量報警系統設計
[打印本頁]
作者:
luoxiaoqi123456
時間:
2018-12-17 20:16
標題:
51單片機的DHT11溫濕度測量報警系統設計
溫濕度測量系統
單片機源程序如下:
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
#include <intrins.h>
typedef bit BOOL ;
sbit io = P1^1 ;//(口線定義)
sbit bee=P1^0;
sbit rs = P2^5 ;
sbit rw = P2^6 ;
sbit ep = P2^7 ;
bit flag_300ms ;
sbit K1=P1^2;
sbit K2=P1^3;
sbit K3=P1^4;
uchar yemian=0;//(定義變量)
uchar flat=1;
uchar data_byte;
uchar RH,RL,TH,TL;
uchar WenDu,ShiDu;//報警的溫度和濕度
#include "eeprom52.h"
/****************************延時程序****************************/
void delay(uchar ms)
{ // 延時子程序
uchar i ;
while(ms--)
{
for(i = 0 ; i<250;i++) ;
}
}
void delay1()//延時10us
{
uchar i;
i--;
i--;
i--;
i--;
i--;
i--;
}
void longdelay(uchar s) //長延時
{
while(s--)
{
delay(20) ;
}
}
/******************把數據保存到單片機內部eeprom中******************/
void write_eeprom()
{
SectorErase(0x2000);
byte_write(0x2000, WenDu);
byte_write(0x2001, ShiDu);
byte_write(0x2060, a_a);
}
/******************把數據從單片機內部eeprom中讀出來*****************/
void read_eeprom()
{
WenDu = byte_read(0x2000);
ShiDu = byte_read(0x2001);
a_a = byte_read(0x2060);
}
/**************開機自檢eeprom初始化*****************/
void init_eeprom()
{
read_eeprom(); //先讀
if(a_a != 2) //新的單片機初始單片機內問eeprom
{
WenDu = 30;
ShiDu = 80;
a_a = 2;
write_eeprom();
}
}
/********************報警程序部分*******************/
void warn() //報警函數
{
if(TH>=WenDu) //檢測的溫度高于設定溫度報警值
{
bee=0; //報警
}
if(RH>=ShiDu) //檢測的濕度高于設定的濕度值
{
bee=0; //報警
}
if( TH<WenDu && RH<ShiDu )
{
bee=1; //停止報警
}
}
/************************LCD模塊******************************************/
BOOL lcd_bz()//測試LCD忙碌狀態
{
BOOL result ;
rs = 0 ;
rw = 1 ;
ep = 1 ;
result = (BOOL)(P0 & 0x80) ;
ep = 0 ;
return result ;
}
void write_cmd(uchar cmd)// 寫指令
{
while(lcd_bz()) ;
rs = 0 ;
rw = 0 ;
ep = 0 ;
P0 = cmd ;
ep = 1 ;
ep = 0 ;
}
void write_addr(uchar addr)//寫地址
{
write_cmd(addr|0x80) ;
}
void write_byte(uchar dat)//寫字節
{
while(lcd_bz()) ;
rs = 1 ;
rw = 0 ;
ep = 0 ;
P0 = dat ;
ep = 1 ;
ep = 0 ;
}
void lcd_init()// 初始化
{
write_cmd(0x38) ;
delay(1);
write_cmd(0x08) ;
delay(1);
write_cmd(0x01) ;
delay(1);
write_cmd(0x06) ;
delay(1);
write_cmd(0x0c) ;
delay(1);
}
void display(uchar addr, uchar q)//在某一地址上顯示一字節
{
delay(1) ;
write_addr(addr) ;
write_byte(q) ;
delay(1) ;
}
/*********************** DHT11測試模塊***************************************/
void start()//開始信號
{
io=1;
delay1();
io=0;
delay(20);//>18ms
io=1;
delay1();//20-40us
delay1();
delay1();
delay1();
delay1();
}
uchar receive_byte()//接收一個字節
{
uchar i,temp,count;
for(i=0;i<8;i++)
{
temp=0;
delay1();delay1();delay1();delay1();
if(io==1)temp=1;
count=2;
while((io)&&count++);
if(count==1)break;
data_byte<<=1;
data_byte|=temp;
}
return data_byte;
}
void receive()//接收數據
{
uchar T_H,T_L,R_H,R_L,check,num_check;
uchar count;
start();//開始信號
io=1;
if(!io)//讀取DHT11響應信號
{
while((io)&&count++);
R_H=receive_byte();
R_L=receive_byte();
T_H=receive_byte();
T_L=receive_byte();
check=receive_byte();
io=0;//拉低延時50us
delay1();delay1();delay1();delay1();delay1();
io=1;
num_check=R_H+R_L+T_H+T_L;
if(num_check=check)
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
check=num_check;
}
}
}
void showw() // 問候語函數
{
lcd_init(); //初始化
delay(10);
display(0x05,'W');
display(0x06,'e');
display(0x07,'l');
display(0x08,'c');
display(0x09,'o');
display(0x0a,'m');
display(0x0b,'e');
delay(250); //短暫延時
delay(250);
delay(250);
/*********************************/
/*
display(0x40,' ') ;
display(0x41,'h');
display(0x42,'e');
*/
}
/*************定時器0初始化程序***************/
void time_init()
{
EA = 1; //開總中斷
TMOD = 0X01; //定時器0、定時器1工作方式1
ET0 = 1; //開定時器0中斷
TR0 = 1; //允許定時器0定時
}
void key() //按鍵程序 選擇菜單模式
{
if(!K1)
{
delay(20);
if(!K1)
{
while(!K1)
;
yemian++;
flat++;
if(yemian>=3) { yemian=0; }
}
}
}
shezhi() //對里面的數值進行修改
{
if(!K2)
{
delay(50);
if(!K2)
{
;
if(yemian==1)
{
WenDu+=1;
if(WenDu>99) { WenDu=99; } //濕度上限加
}
if(yemian==2)
{
ShiDu+=1;
if(ShiDu>99) { ShiDu=99; } //濕度下限加
}
write_eeprom(); //保存數據
}
}
if(!K3)
{
delay(50);
if(!K3)
{
;
if(yemian==1)
{
WenDu-=1; //濕度下限減
if(WenDu<1) {WenDu=1; }
}
if(yemian==2)
{
ShiDu-=1; //濕度下限減
if(ShiDu<1) { ShiDu=1; }
}
write_eeprom(); //保存數據
}
}
}
/***************************主程序*********************************/
void main()
{
init_eeprom(); //讀eeprom數據
time_init(); //初始化定時器
showw(); //顯示問候語 和名字
while(1)
{
key();
//====================yemian==0時 進入工作狀態=================================
if(yemian==0)
{
if(flat==1)
{
flat=0;
lcd_init(); //初始化
display(0x00,'T') ; //Temp
display(0x01,'e');
display(0x02,'m');
display(0x03,'p');
display(0x04,':');
display(0x08,0xdf); // 度
display(0x09,'C');
display(0x40,'H') ; //Humi
display(0x41,'u');
display(0x42,'m');
display(0x43,'i');
display(0x44,':');
display(0x47,'%');
display(0x48,'R');
display(0x49,'H');
display(0x0c,'T');
display(0x0d,':');
display(0x0e,WenDu/10+0x30); //報警溫度
display(0x0f,WenDu%10+0x30);
display(0x4c,'H');
display(0x4d,':');
display(0x4e,ShiDu/10+0x30); //報警濕度
display(0x4f,ShiDu%10+0x30);
}
if(flag_300ms == 1)
{
flag_300ms = 0;
receive();
display(0x05,TH/10+0x30); //溫度顯示
display(0x06,TH%10+0x30);
display(0x45,RH/10+0x30); //濕度顯示
display(0x46,RH%10+0x30);
warn();
}
}
//====================yemian==1 溫度設置===========================
if(yemian==1) //溫度
{
if(flat==1)
{
flat=0;
bee=1;
lcd_init(); //初始化
display(0x06,'T');
display(0x07,'e');
display(0x08,'m');
display(0x09,'p');
}
shezhi();
display(0x47,WenDu/10+0x30); //溫度
display(0x48,WenDu%10+0x30);
}
//====================yemian==1濕度設置==========================
if(yemian==2) //濕度設置
{
if(flat==1)
{
flat=0;
bee=1;
lcd_init(); //初始化
display(0x06,'H');
display(0x07,'u');
display(0x08,'m');
display(0x09,'i');
}
shezhi();
display(0x47,ShiDu/10+0x30); //濕度
display(0x48,ShiDu%10+0x30);
}
}
}
/*************定時器0中斷服務程序***************/
void time0_int() interrupt 1
{
static uchar value;
TH0 = 0x3c;
TL0 = 0xb0; // 50ms
if(value % 6 == 0)
{
flag_300ms = 1; //300ms
value = 0;
}
}
復制代碼
所有資料51hei提供下載:
程序.rar
(48.58 KB, 下載次數: 29)
2018-12-17 20:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2018-12-18 01:49
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
中文字幕一区二区三区在线观看
|
日韩五月天
|
偷拍第一页
|
福利一区二区在线
|
男女国产视频
|
欧美国产精品一区二区
|
国产乱码精品一区二区三区中文
|
一区二区视频在线
|
久久久性
|
免费一级黄色
|
www.国产精
|
亚洲一区 中文字幕
|
国产精品婷婷
|
欧美精品网站
|
亚洲国产一区二区视频
|
国产午夜精品一区二区三区在线观看
|
国产精品美女久久久久aⅴ国产馆
|
国产成人jvid在线播放
|
欧美精品乱码久久久久久按摩
|
日韩av在线一区
|
av一区二区三区四区
|
欧美精品一区二区三区在线
|
h在线
|
少妇特黄a一区二区三区88av
|
精品国产乱码久久久久久图片
|
日韩精品免费视频
|
毛片在线免费播放
|
深爱激情综合
|
精品国产乱码久久久久久闺蜜
|
国产精品大片
|
国产在线一区二区三区
|
亚洲欧美日韩精品久久亚洲区
|
一级黄色片美国
|
免费一区二区在线观看
|
国产福利91精品
|
午夜精品一区二区三区在线
|
日本在线视频不卡
|
精品九九九
|
国产亚洲一区精品
|
亚洲一区二区视频
|
久草在线免费资源
|