sht10代码.docx

上传人:b****2 文档编号:2248385 上传时间:2022-10-28 格式:DOCX 页数:23 大小:19.09KB
下载 相关 举报
sht10代码.docx_第1页
第1页 / 共23页
sht10代码.docx_第2页
第2页 / 共23页
sht10代码.docx_第3页
第3页 / 共23页
sht10代码.docx_第4页
第4页 / 共23页
sht10代码.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

sht10代码.docx

《sht10代码.docx》由会员分享,可在线阅读,更多相关《sht10代码.docx(23页珍藏版)》请在冰豆网上搜索。

sht10代码.docx

sht10代码

xukai871105xukai871105当前离线

积分11012楼

楼主|发表于2011-11-1717:

02:

52|只看该作者

/*Includes

------------------------------------------------------------------*/

#include"stm32f10x.h"

#include"usart1.h"

#include"stdio.h"

/*Privatetypedef

-----------------------------------------------------------*/

/*Privatedefine

------------------------------------------------------------*/

#defineSDA_H()GPIO_SetBits(GPIOB,GPIO_Pin_0)

#defineSDA_L()GPIO_ResetBits(GPIOB,GPIO_Pin_0)

#defineSCK_H()GPIO_SetBits(GPIOB,GPIO_Pin_1)

#defineSCK_L()GPIO_ResetBits(GPIOB,GPIO_Pin_1)

//读SDA数据

#defineSDA_R()GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)

/*Privatemacro

-------------------------------------------------------------*/

#definenoACK0//无应答

#defineACK1//应答

#defineSTATUS_REG_W0x06//00000110

#defineSTATUS_REG_R0x07//00000111

#defineMEASURE_TEMP0x03//00000011

#defineMEASURE_HUMI0x05//00000101

#defineRESET0x1e//00011110

/*Privatevariables

---------------------------------------------------------*/

enum{TEMP,HUMI};

uint8_tTest_Timetick=0;

uint16_tTest_Counter=0;

/*Privatefunctionprototypes

-----------------------------------------------*/

voidRCC_Config(void);

voidUSART1_Config(void);

voidSHT10_Config(void);

voidSHT10_SDAIn(void);

voidSHT10_SDAOut(void);

voidSHT10_Delay(void);

uint8_tSHT10_WriteByte(uint8_tvalue);

uint8_tSHT10_ReadByte(uint8_tAck);

voidSHT10_Start(void);

voidSHT10_ConReset(void);

uint8_tSHT10_Measure(uint16_t*pValue,uint8_t*pCheckSum,uint8_tmode);

voidSHT10_Cal(uint16_tTemp,uint16_tHum,float*pTempValue,float*pHumValue);

/*Privatefunctions

---------------------------------------------------------*/

/**

*@brief主程序

*@param无

*@retval无

*/

intmain(void)

{

//温度结果16bit

uint16_tTempValue;

//湿度结果16bit

uint16_tHumValue;

//温度转换结果

floatTempResult;

//湿度转换结果

floatHumResult;

//校验值

uint8_tCheckValue=0x00;

//错误

uint8_terror=0x00;

//初始化RCC

RCC_Config();

USART1_Config();

SHT10_Config();

printf("Start\n");

while

(1)

{

if(Test_Timetick)

{

Test_Timetick=0;

Test_Counter++;

//延时2000ms

if(Test_Counter>2000)

{

Test_Counter=0;

printf("启动转换!

\n");

//SHT10连接

SHT10_ConReset();

//获得温度和湿度数据,16位格式

error+=SHT10_Measure(&TempValue,&CheckValue,TEMP);

error+=SHT10_Measure(&HumValue,&CheckValue,HUMI);

//温度湿度计算,浮点数形式

SHT10_Cal(TempValue,HumValue,&TempResult,&HumResult);

//通过串口输出,温度和湿度数据

printf("温度%2.1fC湿度%2.1f%%\n",TempResult,HumResult);

}

}

}

}

/**

*@brief初始化Systick定时器

*@paramNone

*@retvalNone

*/

voidRCC_Config(void)

{

//Systick时钟每1ms触发一次

if(SysTick_Config(SystemCoreClock/1000))

{

//

while

(1);

}

}

/**

*@brief初始化SHT10IO口

*@paramNone

*@retvalNone

*/

voidSHT10_Config(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

//使能GPIOA时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

//PB0SDA推挽输出

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Init(GPIOB,&GPIO_InitStructure);

//PB1SCK推挽输出

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Init(GPIOB,&GPIO_InitStructure);

}

/**

*@brief配置为输入状态

*@paramNone

*@retvalNone

*/

voidSHT10_SDAIn(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

//PB0SDA浮动输入,外部有上拉电阻

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOB,&GPIO_InitStructure);

}

/**

*@brief配置为输出状态

*@paramNone

*@retvalNone

*/

voidSHT10_SDAOut(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

//PB0SDA推挽输出

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

GPIO_Init(GPIOB,&GPIO_InitStructure);

}

/**

*@brief配置为输出状态

*@param写数据

*@retval应答

*/

uint8_tSHT10_WriteByte(uint8_tvalue)

{

uint8_ti,error=0;

//SDA输出

SHT10_SDAOut();

for(i=0x80;i>0;i/=2)

{

if(i&value)

SDA_H();

else

SDA_L();

SHT10_Delay();

SCK_H();

SHT10_Delay();

SCK_L();

SHT10_Delay();

}

//SDA输入

SHT10_SDAIn();

SCK_H();

error=SDA_R();//读应答位

SCK_L();

returnerror;

}

/**

*@brief读数据

*@param应答

*@retval返回数据

*/

uint8_tSHT10_ReadByte(uint8_tAck)

{

uint8_ti,val=0;

//输入状态

SHT10_SDAIn();

for(i=0x80;i>0;i/=2)

{

SHT10_Delay();

SCK_H();

SHT10_Delay();

if(SDA_R())

val=(val|i);//读数据

SCK_L();

}

//输出状态

SHT10_SDAOut();

if(Ack)

SDA_L();//应答为低电平

else

SDA_H();

SHT10_Delay();

SCK_H();

SHT10_Delay();

SCK_L();

SHT10_Delay();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1