冰楓論壇

標題: STC8H1K08 多功能溫濕度計 [打印本頁]

作者: 洪嵐峰    時間: 2023-4-9 09:18
標題: STC8H1K08 多功能溫濕度計
STC8H1K08是一款基於STC8系列單片機的多功能溫濕度計,其所需的零件和連接腳位可能會根據具體的設計方案而有所不同。以下是一些常用的零件和連接腳位:

所需零件:

STC8H1K08單片機
溫濕度傳感器
液晶顯示屏
電源電路和電池等
連接腳位:

溫濕度傳感器連接到單片機的GPIO口
液晶顯示屏連接到單片機的SPI接口和GPIO口
電源電路和電池連接到單片機的電源口
程序代碼:
以下是STC8H1K08多功能溫濕度計的示例代碼:


#include <reg52.h>
#include <intrins.h>

typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;

#define LCD_SCL P2_0
#define LCD_SDA P2_1
#define LCD_RST P2_2

sbit LCD_SCL=P2^0;
sbit LCD_SDA=P2^1;
sbit LCD_RST=P2^2;

u8 code number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u8 code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

u8 humiture_data[4]={0,0,0,0};

void delay(u16 i)
{
    while(i--);
}

void IIC_start()
{
    LCD_SDA=1;
    LCD_SCL=1;
    LCD_SDA=0;
    LCD_SCL=0;
}

void IIC_stop()
{
    LCD_SDA=0;
    LCD_SCL=1;
    LCD_SDA=1;
    LCD_SCL=0;
}

void IIC_write_byte(u8 dat)
{
    u8 i;
    for(i=0;i<8;i++)
    {
        LCD_SCL=0;
        if(dat&0x80) LCD_SDA=1;
        else LCD_SDA=0;
        LCD_SCL=1;
        dat<<=1;
    }
    LCD_SCL=0;
    LCD_SDA=1;
    LCD_SCL=1;
    while(LCD_SDA);
    LCD_SCL=0;
}

u8 IIC_read_byte()
{
    u8 i,dat;
    for(i=0;i<8;i++)
    {
        LCD_SCL=0;
        LCD_SCL=1;
        dat<<=1;
        if(LCD_SDA) dat|=0x01;
    }
    LCD_SCL=0;
    LCD_SDA=1;
    LCD_SCL=1;
    return dat;
}

void DHT11_read()
{
    u8 i,j;
    IIC_start();
    IIC_write_byte(0x80);
    if(IIC_read_byte()!=0x80) return;
    for(i=0;i<4;i++)
    {
        humiture_data[i]=0;
        for(j=0;j<8;j++)
        {
            humiture_data[i]<<=1;
            if(IICread_byte()&0x80) humiture_data[i]|=0x01;
}
}
IIC_stop();
}

void init_LCD()
{
LCD_SCL=0;
LCD_SDA=1;
LCD_RST=1;
delay(50000);
LCD_RST=0;
delay(50000);
LCD_RST=1;
delay(50000);
IIC_start();
IIC_write_byte(0x78);
IIC_write_byte(0x8a);
IIC_write_byte(0x00);
IIC_stop();
IIC_start();
IIC_write_byte(0x78);
IIC_write_byte(0xae);
IIC_write_byte(0x00);
IIC_stop();
}

void display(u8 *s,u8 x,u8 y)
{
u8 i;
IIC_start();
IIC_write_byte(0x78);
IIC_write_byte(0x40|x);
IIC_write_byte(0xb0|y);
for(i=0;i<8;i++)
{
IIC_write_byte(table[s[i]]);
}
IIC_stop();
}

void main()
{
u8 i;
init_LCD();
while(1)
{
DHT11_read();
display(number+humiture_data[0]/10,0,0);
display(number+humiture_data[0]%10,8,0);
display(number+humiture_data[2]/10,32,0);
display(number+humiture_data[2]%10,40,0);
for(i=0;i<8;i++) display("humi",i6,1);
for(i=0;i<8;i++) display("temp",i6,2);
delay(500000);
}
}



代碼使用了DHT11傳感器來測量溫濕度,並將結果顯示在液晶屏幕上。




歡迎光臨 冰楓論壇 (https://bingfong.com/) Powered by 冰楓