STM32:sht20温湿度检测程序,并在OLED屏上显示

文章底部有完整工程下载链接

#include "main.h"
#include "oled.h"
#include "iic.h"
#include "delay.h"
#include "sht20.h"
#include "usart.h"

int main(void)
{
    TempHumiValue_t humi_temp_val ; //温湿度	
    char a[100]={0};                
    usart_init(115200);             //串口初始化 波特率为115200
    IIC_Init();                     //IIC初始化
    delay_init();
	OLED_Init();			        //初始化OLED  
	OLED_Clear();   
    SHT20_Init();                   //STH20初始化
    delay_ms(500);
    while (1)
    {
        humi_temp_val=*SHT20_readTemAndHum();//获取温湿度
        OLED_ShowString(5,0,"IIC Test");
		printf("温度为%f,湿度为%f%% \r\n",humi_temp_val.temperature,humi_temp_val.humidity); 
        sprintf(a,"Tem = %.5f",humi_temp_val.temperature);
        OLED_ShowString(5,2,(u8 *)a);
        sprintf(a,"Hum = %.5f%%",humi_temp_val.humidity);
        OLED_ShowString(5,4,(u8 *)a);
        delay_ms(500);
        delay_ms(500);
        OLED_Clear();
    }
}
#include "sht20.h"

float Humidity,Temperature;
TempHumiValue_t temp_humi_Value;
  /*******************************************************************************
 * 函数名:SHT20_writeOneByte
 * 功能描述:写一个字节
 * 作者:Jahol Fan  
 * 参数说明:  写一个字节的数据
 * 返回值说明:返回的是应答信号
 * 修改记录:
*******************************************************************************/
static u8 SHT20_writeOneByte(u8 dataToWrite)
{
    u8 ack;
    IIC_Send_Byte(dataToWrite);
    ack=IIC_Wait_Ack();
    return ack;
}

 /*******************************************************************************
 * 函数名:SHT20_softReset
 * 功能描述:SHT20软件复位,主函数中调用
 * 作者:Jahol Fan  
 * 参数说明:  
 * 返回值说明:
 * 修改记录:
*******************************************************************************/
void SHT20_softReset(void)
{
    IIC_Start();
    SHT20_writeOneByte(SHT20_adder&0xfe);
    SHT20_writeOneByte(0xfe);
    IIC_Stop();
}

 /*******************************************************************************
 * 函数名:SHT20_Init
 * 功能描述:初始化iic总线
 * 作者:Jahol Fan  
 * 参数说明:  
 * 返回值说明:成功返回测量的结果,失败返回 1
 * 修改记录:
*******************************************************************************/
void SHT20_Init(void)
{
    IIC_Init();
    SHT20_softReset();
}

 /*******************************************************************************
 * 函数名:SHT20_readOneByte
 * 功能描述:读一个字节
 * 作者:Jahol Fan  
 * 参数说明:  
 * 返回值说明:
 * 修改记录:
*******************************************************************************/
u8 SHT20_readOneByte(u8 ack)
{
    u8 temp;
    temp=IIC_Read_OneByte();
    iic_put_ack(ack); 
    return temp;
}

/*******************************************************************************
 * 函数名:SHT20_setResolution
 * 功能描述:写寄存器,设置帧率
 * 作者:Jahol Fan  
 * 参数说明:  
 * 返回值说明:
 * 修改记录:
*******************************************************************************/
static void SHT20_setResolution(void)
{
    IIC_Start();
    if(SHT20_writeOneByte(SHT20_adder&0xfe)==ACK)
    {
        if(SHT20_writeOneByte(0xe6)==ACK)
        {
            if(SHT20_writeOneByte(0x83)==ACK);
        }
    }
    IIC_Stop();         
}

/*******************************************************************************
 * 函数名:SHT20_readTemOrHum
 * 功能描述:读取SHT20的温度或读取湿度测量值  
 * 作者:Jahol Fan  
 * 参数说明:  
 * 返回值说明:成功返回测量的结果,失败返回 1
 * 修改记录:
*******************************************************************************/
float SHT20_readTemOrHum(u8 commod)
{
    float temp;
    u8 ack=1;
    u8 MSB,LSB;
    float Humidity,Temperature;
    SHT20_setResolution();
    IIC_Start();
    ack=SHT20_writeOneByte(SHT20_adder&0xfe);
    if(ack == ACK)                      //写地址,并等待ACK
    {
        if(SHT20_writeOneByte(commod)==ACK)
        {
            do{
                delay_ms(6);
                IIC_Start();
            }while(SHT20_writeOneByte(SHT20_adder|0x01)==NACK);

            MSB = SHT20_readOneByte(ACK);//读Data(MSB),给应答
            LSB = SHT20_readOneByte(ACK);//读Data(MSB),给应答
            SHT20_readOneByte(NACK);
            IIC_Stop();
            LSB &= 0xfc;
            temp=MSB*256+LSB;
            if(commod==((u8)Hum_Comd))
            {
                Humidity=(temp*125)/65536-6;
                return Humidity;
            }
            else if(commod==((u8)Tem_Comd))
            {
                Temperature=(temp*175.72f)/65536-46.85f;
                return Temperature;
            }
        }
    }
    return FAIL;
}

/*******************************************************************************
 * 函数名:SHT20_readTemAndHum
 * 功能描述:读取SHT20的温度和湿度测量值  
 * 作者:Jahol Fan  
 * 参数说明:  
 * 返回值说明:成功返回测量的结果,失败返回 1
 * 修改记录:
*******************************************************************************/ 
TempHumiValue_t * SHT20_readTemAndHum(void)
{
        temp_humi_Value.humidity = SHT20_readTemOrHum(Hum_Comd);//读取湿度
        temp_humi_Value.temperature = SHT20_readTemOrHum(Tem_Comd);//读取温度
        return &temp_humi_Value;
}

主控芯片是STM32F411CEU6,显示屏是1.3寸OLED屏,传感器是SHT20温湿度传感器。
STM32:sht20温湿度检测程序,并在OLED屏上显示

你可能感兴趣的:(单片机,stm32,温度检测,OLED)