技术热线: 4007-888-234

如何使用8051单片机制作一个湿度计

更新时间: 2019-11-14
阅读量:2968

在本文中,英锐恩单片机开发工程师分享了一个基于8051单片机开发的湿度计,这个方案比较简单,以供单片机初学者学习。

湿度传感器也称为湿度计,在本单片机方案中,其电路可以以5%的精度感测20%至95%的相对湿度(RH),湿度信息可以显示在16×2 LCD显示屏上。另外,在本单片机方案中,还提供了一个继电器,也就是说当湿度超过某个跳变点时,该继电器将被激活,执行某些操作。

一、的DHT11湿度传感器

DHT11-pinout.png

DHT11是一款低成本的湿度兼温度传感器,具有数字输出。电容法用于感测湿度,而热敏电阻用于测量温度。传感器可以以5%的分辨率感测20%至95%的相对湿度。温度测量最高可达50°C,分辨率为2°C。与单片机的通信是通过单线进行的。下图为基本的通信方案:

DHT11-communication.png

与DHT11传感器的来回通信非常容易。DHT11的引脚2连接到单片机的端口引脚。连接方案如下图所示,DHT11的数据引脚(引脚2)需要一个外部10K上拉电阻。

DHT11-connection-diagram.png

其通信协议原理如下,单片机首先将宽度为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位,这是相对湿度数据的组成部分。下图为湿度传感器的电路图:

humidity-sensor.png

湿度传感器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


以上就是英锐恩单片机开发工程师分享的使用8051单片机开发的湿度计。英锐恩专注单片机应用方案设计与开发,提供8位单片机、16位单片机、32位单片机。