|
這個裝置中51單片機(jī)讀取溫濕度傳感器模塊的數(shù)值,然后通過串口發(fā)送給vb上位機(jī)
0.png (44.61 KB, 下載次數(shù): 37)
下載附件
2018-1-21 17:14 上傳
AM2301溫濕度的下位機(jī)單片機(jī)源碼:
- #include <reg52.h>
- unsigned char tmp;
- void send_char(unsigned char txd);
- void send_str();
- void delayms(unsigned char ms);
- void send_char(unsigned char txd);
- void delay_us(unsigned int i);
- void dht_init();
- unsigned char read_byte();
- void read_hum_temp();
- void zhuanhuan();
- unsigned int hum,temp; //定義濕度、溫度(全局)
- unsigned char hum_h,hum_l,temp_h,temp_l,check; //濕度高、低8位,溫度高、低8位,校驗位
- unsigned char bai,shi,ge,bai1,shi1,ge1;
- sbit dht=P1^1;
- int main()
- {
- TMOD = 0x20; // 定時器1工作于8位自動重載模式, 用于產(chǎn)生波特率
- TH1 = 0xFD; // 波特率9600
- TL1 = 0xFD;
- SCON = 0x50; // 設(shè)定串行口工作方式
- PCON &= 0xef; // 波特率不倍增
-
- TR1 = 1; // 啟動定時器1
- IE = 0x0; // 禁止任何中斷
- dht_init();
- while(1)
- {
- read_hum_temp();
- zhuanhuan();
- send_str();
- delayms(255);
- delayms(255);
- }
- }
- //傳感器初始化
- void dht_init()
- {
- dht=0;
- delay_us(50); //拉低延時500微秒,發(fā)送開始信號
- dht=1; //釋放總線,延時30微秒
- delay_us(4);
- while(!dht); //拉低等待
- while(dht); // 拉高等待,即將傳送數(shù)據(jù)
- }
- //讀取一個字節(jié)數(shù)據(jù)
- unsigned char read_byte()
- {
- unsigned char n,byte=0,dat;
- for(n=0;n<8;n++)
- {
- while(!dht);
- delay_us(4); //理論上28us<延時<70us,此處寫2--6都可以
- dat=0;
- if(dht)
- dat=1;
- while(dht);
- byte<<=1;
- byte|=dat;
- }
- return byte;
- }
- //讀取40位數(shù)據(jù)
- void read_hum_temp()
- {
- dht_init();
- hum_h=read_byte(); //讀濕度
- hum_l=read_byte();
- temp_h=read_byte(); //讀溫度
- temp_l=read_byte();
- check=read_byte(); //讀校驗
- while(!dht); // 等待低電平結(jié)束
- dht=1; //最后拉高總線
- }
- //數(shù)據(jù)轉(zhuǎn)換,提取各位數(shù)字
- void zhuanhuan()
- {
- unsigned char a;
- a=hum_h+hum_l+temp_h+temp_l;
- if(a==check)
- {
- hum=temp=0;
- hum=((hum|hum_h)<<8)|hum_l;
- temp=((temp|temp_h)<<8)|temp_l;
- bai=temp/100+0x30;
- shi=temp%100/10+0x30;
- ge=temp%10+0x30;
- bai1=hum/100+0x30;
- shi1=hum%100/10+0x30;
- ge1=hum%10+0x30;
- }
- else bai=shi=ge=bai1=shi1=ge1=0;
- }
- // 傳送一個字符
- void send_char(unsigned char txd)
- {
- SBUF = txd;
- while(!TI); // 等特數(shù)據(jù)傳送
- TI = 0; // 清除數(shù)據(jù)傳送標(biāo)志
- }
- // 傳送字串
- void send_str()
- {
- send_char(bai);
- send_char(shi);
- send_char('.');
- send_char(ge);
- //delay_us(200);
- send_char(bai1);
- send_char(shi1);
- send_char('.');
- send_char(ge1);
- }
- //延時
- void delay_us(unsigned int i)
- {
- while(i--);
- }
- // 延時子程序
- void delayms(unsigned char ms)
- {
- unsigned char i;
- while(ms--)
- {
- for(i = 0; i < 255; i++);
- }
- }
復(fù)制代碼
藍(lán)牙,電腦端進(jìn)行實時顯示
全部資料51hei下載地址:
溫濕度.zip
(33.98 KB, 下載次數(shù): 121)
2018-1-21 16:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|