在本文中,單片機開發工程師分享了一個基于8051單片機開發的濕度計,這個方案比較簡單,以供單片機初學者學習。
濕度傳感器也稱為濕度計,在本單片機方案中,其電路可以以5%的精度感測20%至95%的相對濕度(RH),濕度信息可以顯示在16×2 LCD顯示屏上。另外,在本單片機方案中,還提供了一個繼電器,也就是說當濕度超過某個跳變點時,該繼電器將被激活,執行某些操作。
一、DHT11濕度傳感器
DHT11是一款低成本的濕度兼溫度傳感器,具有數字輸出。電容法用于感測濕度,而熱敏電阻用于測量溫度。傳感器可以以5%的分辨率感測20%至95%的相對濕度。溫度測量最高可達50°C,分辨率為2°C。與單片機的通信是通過單線進行的。下圖為基本的通信方案:
與DHT11傳感器的來回通信非常容易。DHT11的引腳2連接到單片機的端口引腳。連接方案如下圖所示,DHT11的數據引腳(引腳2)需要一個外部10K上拉電阻。
其通信協議原理如下,單片機首先將寬度為18mS的低電平信號發送到DHT11。收到此信號后,單片機拉起通信線,等待DHT11的響應。它最多需要2到40uS。然后DHT11拉低通訊線,并保持低電平80usS。然后DHT11拉高線路,并保持高電平80uS。然后DHT將線拉低50uS,下一個高脈沖將成為數據的第一位。數據以8位突發發送。脈沖串的每個高脈沖表示一個數據信號。數據位之間的50uS低信號只是間隔。數據位的邏輯通過測量其寬度來確定。26至28uS寬的脈沖表示“低”,而70uS寬的脈沖表示“高”。簡單來說窄于50uS的脈沖可被視為“低”,寬于50us的脈沖可被視為“高”。數據脈沖串的前8位代表相對濕度的整數值,后8位代表相對濕度的十進制值,后8位代表溫度數據的整數值,后8位代表十進制值對于DHT11,十進制值始終為零,我們僅在此方案中測量相對濕度。因此,我們只需要關注數據的前8位,這是相對濕度數據的組成部分。下圖顯示了濕度傳感器的電路圖。后8位代表相對濕度的十進制值,后8位代表溫度數據的整數值,后8位代表溫度數據的十進制值,對于DHT11,十進制值始終為零,我們正在測量僅在此方案中的相對濕度。因此,我們只需要關注數據的前8位,這是相對濕度數據的組成部分。下圖顯示了濕度傳感器的電路圖。后8位代表相對濕度的十進制值,后8位代表溫度數據的整數值,后8位代表溫度數據的十進制值,對于DHT11,十進制值始終為零,我們正在測量僅在此方案中的相對濕度。因此,我們只需要關注數據的前8位,這是相對濕度數據的組成部分。下圖顯示了濕度傳感器的電路圖。因此,我們只需要關注數據的前8位,這是相對濕度數據的組成部分。下圖顯示了濕度傳感器的電路圖。因此,我們只需要關注數據的前8位,這是相對濕度數據的組成部分。下圖為濕度傳感器的電路圖:
濕度傳感器DHT11連接到8051單片機的P3.1。R8拉起DHT11和8051之間的通信線。該繼電器由單片機的P2.0驅動。晶體管Q1切換繼電器。R0是上拉電阻,R7限制Q1的基極電流。D5只是一個續流二極管。LCD顯示器的數據線連接到單片機的端口0。控制線RS,R/E和E分別連接到單片機的P2.7,P2.6和P2.5引腳。R4設置顯示的對比度。R5限制流過背光LED的電流。C9是一個旁路電容器。C8、C10和X1與時鐘電路相關聯。C11、R6和S2構成復位電路。
二、源代碼
RS EQU P2.7
RW EQU P2.6
E EQU P2.5
ORG 000H
MOV DPTR,#LUT
SETB P3.5
CLR P2.0
MOV TMOD,#00100001B
MOV TL1,#00D
ACALL DINT
ACALL TEXT1
MAIN: MOV R1,#8D
SETB P3.5
CLR P3.5
ACALL DELAY1
SETB P3.5
HERE:JB P3.5,HERE
HERE1:JNB P3.5,HERE1
HERE2:JB P3.5,HERE2
LOOP:JNB P3.5,LOOP
RL A
MOV R0,A
SETB TR1
HERE4:JB P3.5,HERE4
CLR TR1
MOV A,TL1
SUBB A,#50D
MOV A,R0
JB PSW.7, NEXT
SETB ACC.0
SJMP ESC
NEXT:CLR ACC.0
ESC: MOV TL1,#00D
CLR PSW.7
DJNZ R1,LOOP
ACALL DINT
ACALL TEXT1
ACALL LINE2
ACALL TEXT2
ACALL HMDTY
ACALL CHECK
ACALL DELAY2
LJMP MAIN
DELAY1: MOV TH0,#0B9H
MOV TL0,#0B0H
SETB TR0
HERE5: JNB TF0,HERE5
CLR TR0
CLR TF0
RET
DELAY2:MOV R1,#112D
BACK:ACALL DELAY1
DJNZ R1,BACK
RET
CHECK:MOV A,R0
MOV B,#65D
SUBB A,B
JB PSW.7,NEXT1
ACALL TEXT3
SETB P2.0
SJMP ESC1
NEXT1:ACALL TEXT4
CLR P2.0
ESC1:CLR PSW.7
RET
CMD: MOV P0,A
CLR RS
CLR RW
SETB E
CLR E
ACALL DELAY
RET
DISPLAY:MOV P0,A
SETB RS
CLR RW
SETB E
CLR E
ACALL DELAY
RET
HMDTY:MOV A,R0
MOV B,#10D
DIV AB
MOV R2,B
MOV B,#10D
DIV AB
ACALL ASCII
ACALL DISPLAY
MOV A,B
ACALL ASCII
ACALL DISPLAY
MOV A,R2
ACALL ASCII
ACALL DISPLAY
MOV A,#“%”
ACALL DISPLAY
RET
TEXT1: MOV A,#“H”
ACALL DISPLAY
MOV A,#“y”
ACALL DISPLAY
MOV A,#“g”
ACALL DISPLAY
MOV A,#“r”
ACALL DISPLAY
MOV A,#“o”
ACALL DISPLAY
MOV A,#“m”
ACALL DISPLAY
MOV A,#“e”
ACALL DISPLAY
MOV A,#“t”
ACALL DISPLAY
MOV A,#“e”
ACALL DISPLAY
MOV A,#“r”
ACALL DISPLAY
RET
TEXT2: MOV A,#“R”
ACALL DISPLAY
MOV A,#“H”
ACALL DISPLAY
MOV A,#“ ”
ACALL DISPLAY
MOV A,#“=”
ACALL DISPLAY
MOV A,#“ ”
ACALL DISPLAY
RET
TEXT3: MOV A,#“ ”
ACALL DISPLAY
MOV A,#“ ”
ACALL DISPLAY
MOV A,#“O”
ACALL DISPLAY
MOV A,#“N”
ACALL DISPLAY
RET
TEXT4:MOV A,#“ ”
ACALL DISPLAY
MOV A,#“O”
ACALL DISPLAY
MOV A,#“F”
ACALL DISPLAY
MOV A,#“F”
ACALL DISPLAY
RET
DINT:MOV A,#0CH
ACALL CMD
MOV A,#01H
ACALL CMD
MOV A,#06H
ACALL CMD
MOV A,#83H
ACALL CMD
MOV A,#3CH
ACALL CMD
RET
LINE2:MOV A,#0C0H
ACALL CMD
RET
DELAY: CLR E
CLR RS
SETB RW
MOV P0,#0FFH
SETB E
MOV A,P0
JB ACC.7,DELAY
CLR E
CLR RW
RET
ASCII: MOVC A,@A+DPTR
RET
LUT: DB 48D
DB 49D
DB 50D
DB 51D
DB 52D
DB 53D
DB 54D
DB 55D
DB 56D
DB 57D
END
評論