亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sht10_driver.c

?? sht10溫濕度傳感器的msp430驅(qū)動(dòng)
?? C
字號(hào):
/****************************************Copyright (c)**************************************************
******************************************LiPeng********************************************************
**--------------File Info-------------------------------------------------------------------------------
** File Name:       Sht10_Driver.c
** Created by:      LiPeng
** Created date:   2008-09-15
** Version:          1.0
** Descriptions:   The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** System Function:   Sht10 Driver------溫濕度傳感器SHT10驅(qū)動(dòng)
** 使用MSP430-F413連接方式:
**                              VCC: P6.3
**                              SCK: P6.4
**                              SDA: P6.5
**
********************************************************************************************************/
#include <msp430x14x.h>

/*宏定義,延時(shí)函數(shù),參數(shù)為1時(shí)相應(yīng)延時(shí)分別為1us和1ms*/
#define CPU_F               (double)1000000
#define delay_us(x)         __delay_cycles((long)(CPU_F * (double)x/1000000.0))
#define delay_ms(x)         __delay_cycles((long)(CPU_F * (double)x/1000.0))

/*常量定義*/
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
                              //adr command r/w
#define STATUS_REG_W 0x06    //000   0011    0
#define STATUS_REG_R 0x07    //000   0011    1
#define MEASURE_TEMP 0x03    //000   0001    1
#define MEASURE_HUMI 0x05    //000   0010    1
#define RESET         0x1e    //000   1111    0

#define bitselect     0x01    //選擇溫度與濕度的低位讀
#define noACK         0
#define ACK           1
#define HUMIDITY      2
#define TEMPERATURE   1

#define SCK           BIT4
#define SDA           BIT5
#define SVCC          BIT3

#define SCK_H         P6OUT|=SCK
#define SCK_L         P6OUT&=~SCK
#define SDA_H         P6OUT|=SDA
#define SDA_L         P6OUT&=~SDA
#define SVCC_H        P6OUT|=SVCC
#define SVCC_L        P6OUT&=~SVCC

typedef union
{
	unsigned int i;
	float f;
}value;

uint table_temp[3];
uint table_humi[3];
uint temten;
uint humi_true;

/**********************************************************************************************************
**Function Name:      S_Init
**Description:        初始化
**Input Parameters:   無
**Output Parameters: 無
**********************************************************************************************************/
void S_Init()
{
	P6SEL&=~(SCK+SDA+SVCC);                   //選擇P6.3 P6.4 為IO端口,輸出 P6.5輸入
	P6DIR|=(SCK+SVCC);
	P6DIR&=~SDA;
	BCSCTL1=(XT2OFF+RSEL2);             //關(guān)閉XT2,1MHz DOC     
	DCOCTL=DCO2;                              //設(shè)定DCO頻率為1MHz
}

/**********************************************************************************************************
**Function Name:      S_Transstart
**Description:        發(fā)送開始時(shí)序
**                   
**                    generates a transmission start
**                          _____         ________
**                    DATA:      |_______|
**                              ___     ___
**                    SCK : ___|   |___|   |______
**Input Parameters:   無
**Output Parameters: 無
**********************************************************************************************************/
void S_Transstart()
{
	P6DIR|=SDA;
	SDA_H;SCK_L;
	_NOP();
	SCK_H;
	_NOP();
	SDA_L;
	_NOP();
	SCK_L;
	_NOP();_NOP();_NOP();
	SCK_H;
	_NOP();
	SDA_H;
	_NOP();
	SCK_L;
	P6DIR&=~SDA;
}

/**********************************************************************************************************
**Function Name:      S_WriteByte
**Description:        寫時(shí)序
**Input Parameters:   無
**Output Parameters: 無
**********************************************************************************************************/
char S_WriteByte(unsigned char value)
{
	unsigned char i,error=0;
	P6DIR|=SDA;
	for(i=0x80;i>0;i/=2)              //shift bit for masking
	{
		if(i&value)
		  SDA_H;                        //masking value with i , write to SENSI-BUS
		else
		  SDA_L;                       
		SCK_H;                          //clk for SENSI-BUS
		_NOP();_NOP();_NOP();           //pulswith approx. 5 us
		SCK_L;
	}
	SDA_H;                            //release DATA-line
	P6DIR&=~SDA;                      //Change SDA to be input
	SCK_H;                            //clk #9 for ack
	error=P6IN;                       //check ack (DATA will be pulled down by SHT11)
	error&=SDA;
	P6DIR|=SDA;
	SCK_L;
	if(error)
		return 1;                       //error=1 in case of no acknowledge
	return 0;
}

/**********************************************************************************************************
**Function Name:      S_ReadByte
**Description:        讀時(shí)序
**Input Parameters:   ack--->reads a byte form the Sensibus and gives an acknowledge in case of "ack=1"
**Output Parameters: 無
**********************************************************************************************************/
char S_ReadByte(unsigned char ack)
{
	unsigned char i,val=0;
	P6DIR|=SDA;
	SDA_H;                            //release DATA-line
	P6DIR&=~SDA;
	for(i=0x80;i>0;i/=2)              //shift bit for masking
	{
		SCK_H;                          //clk for SENSI-BUS
		if(P6IN&SDA)
		  val=(val|i);                  //read bit
		SCK_L;      
	}
	P6DIR|=SDA;
	if(ack)                           //in case of "ack==1" pull down DATA-Line
		SDA_L;
	else
		SDA_H;                        
	SCK_H;                            //clk #9 for ack
	_NOP();_NOP();_NOP();             //pulswith approx. 5 us
	SCK_L;         
	SDA_H;                            //release DATA-line
	P6DIR&=~SDA;
	return val;
}

/**********************************************************************************************************
**Function Name:      S_Connectionreset
**Description:        通訊復(fù)位時(shí)序
**                    communication reset: DATA-line=1 and at least 9 SCK cycles followed by transstart
**                          _____________________________________________________         ________
**                    DATA:                                                      |_______|
**                             _    _    _    _    _    _    _    _    _        ___     ___
**                    SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______|   |___|   |______
**Input Parameters:   無
**Output Parameters: 無
**********************************************************************************************************/
void S_Connectionreset()
{
	unsigned char ClkCnt;
	P6DIR|=SDA;
	SDA_H;SCK_L;                              //Initial state
	for(ClkCnt=0;ClkCnt<9;ClkCnt++)           //9 SCK cycles
	{
		SCK_H;
		SCK_L;
	}                               
	S_Transstart();                           //transmission start
}
/**********************************************************************************************************
**Function Name:      S_Softreset
**Description:        軟件復(fù)位時(shí)序resets the sensor by a softreset
**Input Parameters:   無
**Output Parameters: 無
**********************************************************************************************************/
char S_Softreset()
{
	unsigned char error=0;
	S_Connectionreset();              //reset communication
	error+=S_WriteByte(RESET);        //send RESET-command to sensor
	return error;                     //error=1 in case of no response form the sensor
}

/**********************************************************************************************************
**Function Name:      S_WriteStatusReg
**Description:        寫狀態(tài)寄存器
**Input Parameters:   *p_value
**Output Parameters: 無
**********************************************************************************************************/
char S_WriteStatusReg(unsigned char *p_value)
{
	unsigned char error=0;
	S_Transstart();                           //transmission start
	error+=S_WriteByte(STATUS_REG_W);         //send command to sensor
	error+=S_WriteByte(*p_value);             //send value of status register
	return error;                             //error>=1 in case of no response form the sensor
}

/**********************************************************************************************************
**Function Name:      S_Mearsure
**Description:        讀時(shí)序      makes a measurement (humidity/temperature) with checksum
**Input Parameters:   *p_value       ,*p_checknum       ,mode                  
**Output Parameters: 無
**********************************************************************************************************/
unsigned char S_Measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)
{
	unsigned error=0;
	unsigned int i;

	S_Transstart();                   //transmission start
	switch(mode)
	{                                 //send command to sensor
		case TEMPERATURE: error+=S_WriteByte(MEASURE_TEMP); break;
		case HUMIDITY:    error+=S_WriteByte(MEASURE_HUMI); break;
	}
	P6DIR&=~SDA;
	for(i=0;i<65535;i++)              //wait until sensor has finished the measurement
		if((P6IN&SDA)==0)
		  break;
	if(P6IN&SDA)
		error+=1;                       //or timeout (~2 sec.) is reached
	*(p_value)=S_ReadByte(ACK);       //read the first byte (MSB)
	*(p_value+1)=S_ReadByte(ACK);     //read the second byte (LSB)
	*p_checksum=S_ReadByte(noACK);    //read checksum
	return(error);
}

/**********************************************************************************************************
**Function Name:      S_Calculate
**Description:        計(jì)算
**Input Parameters:   humi [Ticks] (12 bit)
**                    temp [Ticks] (14 bit)                          
**Output Parameters: humi [%RH]
**                    temp [癈]
**********************************************************************************************************/
void S_Calculate(unsigned int *p_humidity ,unsigned int *p_temperature)
{
	const float C1=-4.0;              // for 8 Bit
	const float C2=+0.648;            // for 8 Bit
	const float C3=-0.0000072;        // for 8 Bit
	const float D1=-39.6;             // for 12 Bit @ 3V
	const float D2=+0.04;             // for 12 Bit @ 3V
	const float T1=0.01;              // for 8 bit
	const float T2=0.00128;           // for 8 bit

	float rh=*p_humidity;             // rh:      Humidity [Ticks] 12 Bit
	float t=*p_temperature;           // t:       Temperature [Ticks] 14 Bit
	float rh_lin;                     // rh_lin: Humidity linear
	float rh_true;                    // rh_true: Temperature compensated humidity
	float t_C;                        // t_C   : Temperature [癈]

	t_C=t*D2+D1;                      //calc. temperature from ticks to [癈]
	rh_lin=C3*rh*rh + C2*rh + C1;     //calc. humidity from ticks to [%RH]
	rh_true=(t_C-25)*(T1+T2*rh)+rh_lin;   //calc. temperature compensated humidity [%RH]
	if(rh_true>100)rh_true=100;       //cut if the value is outside of
	if(rh_true<0.1)rh_true=0.1;       //the physical possible range

	*p_temperature=t_C;               //return temperature [癈]
	*p_humidity=rh_true;              //return humidity[%RH]
}

void main()
{
	value humi_val,temp_val;
	unsigned char error,checksum;
	unsigned int i,temphigh,templow;
	unsigned int RegCMD=0x01;

	WDTCTL=WDTPW+WDTHOLD;                     //Stop watchdog timer to prevent time out reset

	S_Init();
	SVCC_H;
	S_Connectionreset();
	S_WriteStatusReg((unsigned char *)&RegCMD);
	while(1)
	{
		error=0;
		error+=S_Measure((unsigned char*) &humi_val.i,&checksum,HUMIDITY);     //measure humidity
		error+=S_Measure((unsigned char*) &temp_val.i,&checksum,TEMPERATURE); //measure temperature
		if(error!=0)
		  S_Connectionreset();                            //in case of an error: connection reset
		else
		{
		  templow=(humi_val.i&0xff00);
		  humi_val.i=templow>>8;
		  temphigh=((temp_val.i&0xf)<<8);
		  templow=((temp_val.i&0xff00)>>8);
		  temp_val.i=temphigh+templow;
	     
		  S_Calculate(&humi_val.i,&temp_val.i);           //calculate humidity, temperature
		  //temp_val_NOP();
		  //printf("temp:%5.1fC humi:%5.1f%% dew point:%5.1fC\n",temp_val.f,humi_val.f,dew_point);
		}
		//----------wait approx. 0.8s to avoid heating up SHTxx------------------------------     
		for (i=0;i<40000;i++);     //(be sure that the compiler doesn't eliminate this line!)
		//-----------------------------------------------------------------------------------                      
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品三级在线观看| 欧美高清在线一区二区| 国产精品一级黄| 亚洲与欧洲av电影| 久久嫩草精品久久久精品一| 91黄色免费版| 精品一区二区三区的国产在线播放 | 日本韩国一区二区三区| 免费美女久久99| 蜜臀久久99精品久久久久久9 | 欧美视频中文字幕| 国产jizzjizz一区二区| 97久久超碰精品国产| 久久99久久99小草精品免视看| 亚洲丝袜自拍清纯另类| 久久毛片高清国产| 欧美精品丝袜中出| 91美女视频网站| 成人自拍视频在线观看| 久久99久久精品欧美| 天使萌一区二区三区免费观看| 最好看的中文字幕久久| 国产精品午夜春色av| 久久久久国产精品人| 日韩一区二区三| 欧美日韩国产综合久久| 在线观看欧美日本| 91美女视频网站| 成人v精品蜜桃久久一区| 国产中文字幕精品| 激情综合网最新| 久久亚洲精品小早川怜子| 日本aⅴ亚洲精品中文乱码| 亚洲精品自拍动漫在线| 国产精品1区二区.| 久久精品久久99精品久久| 午夜欧美电影在线观看| 午夜不卡在线视频| 亚洲第一激情av| 亚洲一卡二卡三卡四卡无卡久久 | 日韩av高清在线观看| 午夜电影一区二区三区| 亚洲成年人网站在线观看| 亚洲综合另类小说| 亚洲电影在线免费观看| 亚洲mv在线观看| 日韩av网站免费在线| 麻豆91在线观看| 狠狠久久亚洲欧美| 国产精品一区在线观看乱码 | 丝袜亚洲精品中文字幕一区| 成人国产精品视频| 中文字幕不卡一区| 国产精品热久久久久夜色精品三区| 精品精品国产高清一毛片一天堂| 亚洲精品在线观看视频| 久久久噜噜噜久噜久久综合| 国产亚洲精品福利| 国产电影精品久久禁18| eeuss鲁片一区二区三区在线看| 99久久久国产精品免费蜜臀| 色8久久人人97超碰香蕉987| 欧美日韩午夜影院| 精品欧美一区二区在线观看| 久久久精品国产免大香伊| 中文字幕欧美一区| 亚洲电影视频在线| 久久丁香综合五月国产三级网站| 国产成人精品三级| 在线亚洲高清视频| 91精品国产一区二区三区香蕉| 精品美女在线播放| 国产精品家庭影院| 午夜精彩视频在线观看不卡| 狠狠v欧美v日韩v亚洲ⅴ| 大胆欧美人体老妇| 欧美性生活影院| 精品久久久久av影院| 中文字幕一区二区三区视频 | 一区二区三区四区乱视频| 午夜欧美一区二区三区在线播放| 黄色小说综合网站| 99re这里只有精品6| 制服丝袜亚洲精品中文字幕| 久久午夜电影网| 樱花影视一区二区| 国产一区福利在线| 在线视频一区二区免费| 久久综合久久99| 亚洲综合激情另类小说区| 国产在线播放一区三区四| 日本韩国视频一区二区| 久久丝袜美腿综合| 亚洲成av人片在线| 99久久免费精品高清特色大片| 欧美一区二区在线观看| 亚洲色图色小说| 九九九精品视频| 欧美日韩国产一级二级| 一区精品在线播放| 国产一区二区免费视频| 欧美日韩亚洲另类| 亚洲免费三区一区二区| 国产成人综合亚洲91猫咪| 欧美一区二区三区视频免费播放| 亚洲色图另类专区| 国产成人免费在线视频| 日韩欧美第一区| 亚洲va国产va欧美va观看| 91在线视频18| 国产精品私房写真福利视频| 蜜臀久久99精品久久久久久9| 欧美在线观看一二区| 国产精品麻豆网站| 国产精品亚洲专一区二区三区| 666欧美在线视频| 夜夜嗨av一区二区三区四季av | 99精品国产视频| 久久久久99精品一区| 美女网站视频久久| 在线成人免费视频| 成人黄页在线观看| 国产视频亚洲色图| 黄色精品一二区| 日韩女优制服丝袜电影| 婷婷丁香激情综合| 欧美性一二三区| 亚洲最大成人综合| 一本久道久久综合中文字幕| 国产精品日日摸夜夜摸av| 国产98色在线|日韩| 久久久久久97三级| 韩日精品视频一区| 日韩精品一区二区在线观看| 蜜臀av亚洲一区中文字幕| 欧美一区二区三区系列电影| 午夜精品久久久久久久| 欧美视频在线播放| 五月婷婷综合激情| 欧美精品高清视频| 美美哒免费高清在线观看视频一区二区 | 看国产成人h片视频| 日韩一区二区在线播放| 美女视频一区在线观看| 日韩欧美一区二区免费| 麻豆91在线播放免费| 精品国产三级电影在线观看| 狠狠色丁香婷婷综合久久片| 精品第一国产综合精品aⅴ| 久久疯狂做爰流白浆xx| 久久久亚洲精品石原莉奈| 顶级嫩模精品视频在线看| 中文字幕中文乱码欧美一区二区| 9l国产精品久久久久麻豆| 一区二区三区四区乱视频| 欧美色图在线观看| 蜜臀久久99精品久久久久宅男| 精品国产污污免费网站入口 | 亚洲风情在线资源站| 在线成人小视频| 国内成人自拍视频| 日本一区二区综合亚洲| 色哟哟亚洲精品| 亚洲v日本v欧美v久久精品| 欧美成人vps| av福利精品导航| 午夜久久久久久久久| 精品国产1区二区| av在线不卡电影| 污片在线观看一区二区| 久久嫩草精品久久久精品一| 一本色道亚洲精品aⅴ| 奇米精品一区二区三区四区| 国产精品无遮挡| 欧美猛男超大videosgay| 国精产品一区一区三区mba视频| 国产精品成人免费在线| 欧美疯狂做受xxxx富婆| 国产乱一区二区| 亚洲成人综合视频| 国产视频一区二区在线| 欧美丝袜丝交足nylons| 国产福利一区二区三区在线视频| 一区二区欧美在线观看| 久久综合色婷婷| 在线观看网站黄不卡| 狠狠色狠狠色综合系列| 亚洲国产另类av| 久久久蜜桃精品| 欧美三级电影在线观看| 国产成人在线视频播放| 五月婷婷综合激情| 国产福利精品一区| 亚洲va欧美va人人爽| 中文文精品字幕一区二区| 337p亚洲精品色噜噜噜| av一二三不卡影片| 精品系列免费在线观看| 亚洲一二三四区不卡| 国产女人水真多18毛片18精品视频 |