Program Test1936
Const Char6x8 As Byte[570] = (
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,
0x00, 0x00, 0x07, 0x00, 0x07, 0x00,
0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,
0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,
0x00, 0x62, 0x64, 0x08, 0x13, 0x23,
0x00, 0x36, 0x49, 0x55, 0x22, 0x50,
0x00, 0x00, 0x05, 0x03, 0x00, 0x00,
0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,
0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,
0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,
0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,
0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,
0x00, 0x08, 0x08, 0x08, 0x08, 0x08,
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
0x00, 0x20, 0x10, 0x08, 0x04, 0x02,
0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,
0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,
0x00, 0x42, 0x61, 0x51, 0x49, 0x46,
0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,
0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,
0x00, 0x27, 0x45, 0x45, 0x45, 0x39,
0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,
0x00, 0x01, 0x71, 0x09, 0x05, 0x03,
0x00, 0x36, 0x49, 0x49, 0x49, 0x36,
0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,
0x00, 0x00, 0x36, 0x36, 0x00, 0x00,
0x00, 0x00, 0x56, 0x36, 0x00, 0x00,
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
0x00, 0x14, 0x14, 0x14, 0x14, 0x14,
0x00, 0x00, 0x41, 0x22, 0x14, 0x08,
0x00, 0x02, 0x01, 0x51, 0x09, 0x06,
0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,
0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,
0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,
0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,
0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,
0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,
0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,
0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,
0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,
0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,
0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,
0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,
0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,
0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,
0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,
0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,
0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,
0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,
0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,
0x00, 0x46, 0x49, 0x49, 0x49, 0x31,
0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,
0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,
0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,
0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,
0x00, 0x63, 0x14, 0x08, 0x14, 0x63,
0x00, 0x07, 0x08, 0x70, 0x08, 0x07,
0x00, 0x61, 0x51, 0x49, 0x45, 0x43,
0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,
0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,
0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,
0x00, 0x04, 0x02, 0x01, 0x02, 0x04,
0x00, 0x40, 0x40, 0x40, 0x40, 0x40,
0x00, 0x00, 0x01, 0x02, 0x04, 0x00,
0x00, 0x20, 0x54, 0x54, 0x54, 0x78,
0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,
0x00, 0x38, 0x44, 0x44, 0x44, 0x20,
0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,
0x00, 0x38, 0x54, 0x54, 0x54, 0x18,
0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,
0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,
0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,
0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,
0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,
0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,
0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,
0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,
0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,
0x00, 0x38, 0x44, 0x44, 0x44, 0x38,
0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,
0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,
0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,
0x00, 0x48, 0x54, 0x54, 0x54, 0x20,
0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,
0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,
0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,
0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,
0x00, 0x44, 0x28, 0x10, 0x28, 0x44,
0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,
0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,
0x00, 0x10, 0x6C, 0x82, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFE, 0x00, 0x00,
0x00, 0x00, 0x00, 0x82, 0x6C, 0x10,
0x14, 0x14, 0x14, 0x14, 0x14, 0x14)
Dim D_C As sBit at LATC.0
ClockPin As sbit at PORTC.3
Datapin As sbit at PORTC.5
RES As sbit at LATC.1
DHT11_PIN As sbit at PORTB.0
DHT11_PIN_Direction as sbit at TRISB0_bit
T_byte1 As Byte
T_byte2 As Byte
RH_byte1 As Byte
RH_byte2 As Byte
CheckSum As Byte
Temperature As String[20]
Humidity As String[20]
Sub Procedure Lcd_WrCmd(Dim pCmd As Byte)
D_C = 0
Spi1_Write(pCmd)
End Sub
Sub Procedure Lcd_WrDat(Dim pDat As Byte)
Dim lCnt As Byte
D_C = 1
Spi1_Write(pDat)
End Sub
Sub Procedure Lcd_SetPos(Dim px, py as Byte)
Delay_us(1)
Lcd_WrCmd(0xB0 + py)
Lcd_WrCmd((px >> 4) Or 0x10)
Lcd_WrCmd((px And 0x0F))
delay_us(1)
End Sub
Sub Procedure Lcd_Fill(Dim pFill As Byte)
Dim lx, ly As Byte
For ly = 0 To 7
Lcd_WrCmd(0xB0+ly)
Lcd_WrCmd(0x00)
Lcd_WrCmd(0x10)
For lx = 0 to 127
Lcd_WrDat(pFill)
Next lx
Next ly
End Sub
Sub Procedure Lcd_Char_6x8(Dim px, py, pchar As Byte)
Dim lIndex As Word
Lcd_SetPos(px, py)
lIndex = pChar - 0x20
lIndex = (lIndex << 2) + (lIndex << 1)
Lcd_WrDat(Char6x8[lIndex+0])
Lcd_WrDat(Char6x8[lIndex+1])
Lcd_WrDat(Char6x8[lIndex+2])
Lcd_WrDat(Char6x8[lIndex+3])
Lcd_WrDat(Char6x8[lIndex+4])
Lcd_WrDat(Char6x8[lIndex+5])
End Sub
Sub Procedure Lcd_String_6x8(Dim px, py As Byte, Dim ByRef pDisp As String)
Dim lLen, lCnt As Byte
lLen = Length(pDisp)
For lCnt = 0 To (lLen-1)
If px > 127 Then px = 0 py = py+1 End If
Lcd_Char_6x8(px, py, pDisp[lCnt])
px = px + 6
Next lCnt
End Sub
Sub Procedure Display_Init()
Lcd_WrCmd(0xAF)
Lcd_WrCmd(0xA8)
Lcd_WrCmd(0x3F)
Lcd_WrCmd(0xD3)
Lcd_WrCmd(0x00)
Lcd_WrCmd(0x40)
Lcd_WrCmd(0xA1)
Lcd_WrCmd(0xC8)
Lcd_WrCmd(0xDA)
Lcd_WrCmd(0x12)
Lcd_WrCmd(0x81)
Lcd_WrCmd(0xFF)
Lcd_WrCmd(0xA4)
Lcd_WrCmd(0xA6)
Lcd_WrCmd(0xD5)
Lcd_WrCmd(0x80)
Lcd_WrCmd(0x8D)
Lcd_WrCmd(0x14)
Lcd_WrCmd(0x00)
Lcd_WrCmd(0x10)
Lcd_WrCmd(0xD9)
Lcd_WrCmd(0xF1)
Lcd_WrCmd(0xDB)
Lcd_WrCmd(0x40)
Lcd_WrCmd(0x20)
Lcd_WrCmd(0x02)
Lcd_WrCmd(0xAE)
End Sub
Sub Procedure Blink (Dim Dnum as Integer)
Dim k1 As byte
For k1 = 1 to Dnum
LATB.4 = 1
Delay_Ms(500)
LATB.4 = 0
Delay_Ms(500)
Next k1
End Sub
Sub Procedure Start_Signal()
DHT11_PIN_Direction = 0
DHT11_PIN = 0
Delay_ms(25)
DHT11_PIN = 1
Delay_us(25)
DHT11_PIN_Direction = 1
End Sub
Sub Function Check_Response() as Byte
TMR1H = 0
TMR1L = 0
TMR1ON_bit = 1
While((Not DHT11_PIN) And (TMR1L < 100)) Wend
If(TMR1L > 99) Then
Result = 0
Else
TMR1H = 0
TMR1L = 0
While(DHT11_PIN And (TMR1L < 100)) Wend
If(TMR1L > 99) Then
Result = 0
Else
Result = 1
End If
End If
End Sub
Sub Function Read_Data(Dim Byref Dht_Data as byte) As Byte
Dim i1 As byte
Dht_data = 0
For i1 = 0 to 7
TMR1H = 0
TMR1L = 0
While(NOT DHT11_PIN)
If(TMR1L > 100) Then
Result = 1
Exit
End If
Wend
TMR1H = 0
TMR1L = 0
While(DHT11_PIN)
If(TMR1L > 100) Then
Result = 1
Exit
End If
Wend
If(TMR1L > 50) Then
Dht_data = Dht_data Or (1<<(7-i1))
End If
Next i1
Result = 0
End Sub
Main:
TRISB = %00000001
TRISC = %00101000
OSCCON = %01110000
ANSELB = 0
T1CON = %00010000
TMR1H = 0
TMR1L = 0
RES = 0
Delay_ms(10)
RES = 1
SPI1_Init()
Delay_ms(100)
Display_Init()
Delay_ms(100)
Lcd_WrCmd(0xAF)
LCD_Setpos(0,0)
LCD_Fill(0x00)
While True
Start_Signal()
If(Check_Response()) Then
If(Read_Data(RH_byte1) Or Read_Data(RH_byte2) Or
Read_Data(T_byte1) Or Read_Data(T_byte2) Or
Read_Data(Checksum)) Then
Lcd_String_6x8(0,0,"Time Out! ")
Else
If(CheckSum = ((RH_Byte1 + RH_Byte2 + T_Byte1 + T_Byte2) And 0xFF)) Then
Temperature = "Temp: , "
Humidity = "Humi: , "
Temperature[7] = T_Byte1/10 + 48
Temperature[8] = T_Byte1 Mod 10 + 48
Temperature[10] = T_Byte2/10 + 48
Humidity[7] = RH_Byte1/10 + 48
Humidity[8] = RH_Byte1 Mod 10 + 48
Humidity[10] = RH_Byte2/10 + 48
Lcd_String_6x8(0,2, Temperature)
Rtrim(Humidity)
Lcd_String_6x8(0,6, Humidity + "%")
Else
Lcd_String_6x8(0,0, "Checksum Error ")
End If
End If
Else
Lcd_String_6x8(0,0, "No Response")
End If
TMR1ON_bit = 0
Delay_ms(1500)
Wend
End.