资源简介
自己写的SHT11的单片机驱动源码,可以直接读取温度和湿度,能直接使用,非常方便!
代码片段和文件信息
#include “sht11.h“
#include
/*************************************************************
Function :SHT11_Delay
Description:SHT11时序需要的延时
Input : none
return : none
*************************************************************/
void SHT11_Delay(void)
{
__ASM(“NOP“);
}
/*************************************************************
Function :SHT11_DATAOut
Description:设置DATA引脚为输出
Input : none
return : none
*************************************************************/
void SHT11_DATAOut(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//PB7 DATA 推挽输出
GPIO_InitStructure.Pin = GPIO_PIN_7;
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
HAL_GPIO_Init(GPIOB &GPIO_InitStructure);
}
/*************************************************************
Function :SHT11_DATAIn
Description:设置DATA引脚为输入
Input : none
return : none
*************************************************************/
void SHT11_DATAIn(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//PB7 DATA 浮动输入
GPIO_InitStructure.Pin = GPIO_PIN_7;
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStructure.Mode = GPIO_MODE_INPUT;//GPIO_Mode_IN_FLOATING;
HAL_GPIO_Init(GPIOB &GPIO_InitStructure);
}
/*************************************************************
Function :SHT11_WriteByte
Description:写1字节
Input : value:要写入的字节
return : err: 0-正确 1-错误
*************************************************************/
uint8_t SHT11_WriteByte(uint8_t value)
{
uint8_t i err = 0;
SHT11_DATAOut(); //设置DATA数据线为输出
for(i = 0x80; i > 0; i /= 2) //?1???
{
if(i & value)
SHT11_DATA_H();
else
SHT11_DATA_L();
SHT11_Delay();
SHT11_SCK_H();
SHT11_Delay();
SHT11_SCK_L();
SHT11_Delay();
}
SHT11_DATAIn(); //设置DATA数据线为输入释放DATA线
SHT11_SCK_H();
err = SHT11_DATA_R(); //读取SHT11的应答位
SHT11_SCK_L();
return err;
}
/*************************************************************
Function :SHT11_ReadByte
Description:读1字节数据
Input : Ack: 0-不应答 1-应答
return : err: 0-正确 1-错误
*************************************************************/
uint8_t SHT11_ReadByte(uint8_t Ack)
{
uint8_t i val = 0;
SHT11_DATAIn(); //设置DATA数据线为输入
for(i = 0x80; i > 0; i /= 2) //读取1字节的数据
{
SHT11_Delay();
评论
共有 条评论