C51-溫濕度傳感器DHT11驅動-LCD1602顯示程序_第1頁
C51-溫濕度傳感器DHT11驅動-LCD1602顯示程序_第2頁
C51-溫濕度傳感器DHT11驅動-LCD1602顯示程序_第3頁
C51-溫濕度傳感器DHT11驅動-LCD1602顯示程序_第4頁
C51-溫濕度傳感器DHT11驅動-LCD1602顯示程序_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、DHT11.c 文件#include<reg52.h> #include<Time_Delay.h> /the main only needs to call getDHT11(),then the temperature and huminity was geted in F16T,F16RH as float sbit bit11=P20; unsigned char U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata; /用于最終讀取的溫濕度數據/ read 8 bits onice char COM

2、(void) char i,U8temp,U8comdata; for(i=0;i<8;i+) while(!bit11); /表示 讀取的高電位延時大于20多us則讀取的是1否則讀取的是0 /通過U8FLAG可判斷Delay_us(35); U8temp=0; if(bit11)U8temp=1; while(bit11); U8comdata<<=1; U8comdata|=U8temp; /0 /rof return U8comdata; /- /-溫濕度讀取子程序- /- /-以下變量均為全局變量- /-溫度高8位= U8T_data_H- /-溫度低8位= U8T_

3、data_L- /-濕度高8位= U8RH_data_H- /-濕度低8位= U8RH_data_L- /-校驗8位= U8checkdata- /-調用相關子程序如下- /- Delay();, Delay_10us();,COM(); bit11顯示數據的脈長/- void getDHT11(void) /主機拉低18ms GO1: bit11=0; Delay_ms(20); bit11=1; /總線由上拉電阻拉高 主機延時20us Delay_us(60); /主機設為輸入 判斷從機響應信號/ bit11=1; /判斷從機是否有低電平響應信號 如不響應則跳出,響應則向下運行if(!bi

4、t11) while(!bit11); while(bit11); /數據接收狀態/T ! /wait DHT goto high U8RH_data_H=COM(); U8RH_data_L=COM(); U8T_data_H=COM(); U8T_data_L=COM(); U8checkdata=COM(); bit11=1; /數據校驗if(U8T_data_H+U8T_data_L+U8RH_data_H+U8RH_data_L)!=U8checkdata) check wrong,read again goto GO1; /fi F16T=U8T_data_H+(float)U8T

5、_data_L/256; /change integer to float F16RH=U8RH_data_H+(float)U8RH_data_L/256; /if LCD1602 文件#include<reg52.h> #include <stdio.h> #include <INTRINS.H> #include <Lcd_1602.h> #include <Time_Delay.h> #define LCD_DATA P0 #define uint unsigned int #define uchar unsigned cha

6、r /*只由主函數調用的 有Init_Lcd() LCD_write_str(uchar X,uchar Y,uchar *s) /LCD1602 data transfer define LCD_value(unsigned char x,unsigned char y,float f) */ sbit LCD_RS = P25; sbit RW = P26; sbit LCD_E = P27; /1602 control define /* /顯示開/顯示關#define LCD_CURSOR_ON 0x0A /顯示光標/無光標/有光標,光標閃動/有光標,光標不閃動/進入模式設置指令/新數

7、據后光標右移/新數據后光標左移/畫面可平移/畫面不可平移/設定顯示屏或光標移動方向指令/光標左移1格,且AC值減1 /光標右移1格,且AC值加1 /顯示器上字符全部左移一格,但光標不動/顯示器上字符全部右移一格,但光標不動*/ /注 有主函數調用的函數都已作說明 其他函數一般不由主函數調用 /* *名 *功 稱:Init_Lcd()主函數調用能:Lcd初始化*入口參數:無*出口參數:無*范 例:在主函數中直接調用*/ /LCD初始化 LCD_write_char(0x38,0); Delay_ms(1); LCD_write_char(0x38,0); Delay_ms(1); LCD_wri

8、te_char(0x38,0); Delay_ms(1); LCD_write_char(0x0c,0); Delay_ms(1); LCD_write_char(0x06,0); Delay_ms(1); LCD_write_char(0x0c,0); Delay_ms(1); / /* *名 *功 稱:LCD_write_str(uchar X,uchar Y,uchar *s)主函數調用能:在指定地址寫一個字符串eg:Y=0,1,2,3,4,5,6,7,8,9,10.15。X=0,1。*入口參數:X:橫坐標Y:縱坐標*s:字符串首地址*出口參數:無*范 例: LCD_write_str(

9、1,1,uchar *s) */ void LCD_write_str(unsigned char X,unsigned char Y,unsigned char *s) LCD_write_char(0,' '); /寫地址/寫顯示字符 LCD_write_char( 0, *s ); s +; /* *名 *功 稱:LCD_set_xy( uchar x, uchar y ) 能:指定一個地址the optic sign flash? *入口參數:X:橫坐標Y:縱坐標*出口參數:無*范 例: LCD_set_xy(5,1) *CD_set_xy* */ void LCD_s

10、et_xy( uchar x, uchar y ) /寫地址函數 unsigned char address; if (y = 0) address = 0x80 + x; else address = 0xc0 + x; LCD_write_char( address, 0 ); /* *名 *功 稱:LCD_en_write(void) 能:液晶使能*入口參數:無*出口參數:無*范 例:直接調用*CD_set_xy* */ /液晶使能 _nop_(); LCD_E=1;/EN=1 _nop_(); LCD_E=0;/EN=0 /- /* *名 稱:LCD_write_char(uchar

11、cd,uchar ab) *功 無效能:寫指令或數據 當寫ab時 應使cd=0當cd不為0則寫cd且ab的賦值 *入口參數:cd:指令內容ab:數據內容 指令常量已在上面定義 但一般不用*出口參數:無*范 例: LCD_write_char( 0,f )*CD_set_xy* */ void LCD_write_char(uchar cd,uchar ab) /寫數據 Delay_us(20); if(cd=0) /RS=1,寫顯示內容LCD_byte(ab); else /RS=0,寫命令LCD_byte(cd); /* *名 *功 稱:LCD_byte(abc); 能:寫一個字符到or c

12、alled one byte to LCD中*入口參數:*出口參數:無*CD_set_xy* */ void LCD_byte(unsigned char abc) RW = 0; LCD_E = 0; LCD_DATA = abc; LCD_en_write(); /在液晶中顯示浮點數函數LCD_value(unsigned char x,unsigned char y,float f) /不能定義為char* str,數組長度一定要大于浮點 數的總位數/1表示小數位數 小數太多 自動四舍五入LCD_write_str( x, y, str); return 0; 主函數文件#include

13、 <reg52.h> #include <intrins.h> #include <Lcd_1602.h> #include <Time_Delay.h> #include"DHT11.h" /全局變量聲明void main () Init_Lcd(); LCD_write_str(0,1,"abc"); /液晶預顯示測試LCD_value(0,0,34.345); Delay_ms(2000); Init_Lcd(); while(1) getDHT11(); LCD_write_str(0,0,"T="); /字符"應用轉義格式LCD_write_str(0,1,"RH="); LCD_value(4,1,F16RH); Delay_ms(500); 延時函數文件/以下為延時函數LCD_write_str(9,1,"%"); th

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論