久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3823|回復: 4
打印 上一主題 下一主題
收起左側

需要基于MSP430F149單片機驅動溫濕度傳感器STH10的程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:227437 發表于 2017-8-24 14:37 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
100黑幣
跪求大神,如題,急需基于430F149的溫濕度傳感器STH10的驅動程序,最好IAR項目。
急需!!

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:82765 發表于 2017-8-24 15:10 來自觸屏版 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

板凳
ID:170270 發表于 2017-8-24 17:12 | 只看該作者
我有 加QQ2944428743
回復

使用道具 舉報

地板
ID:170270 發表于 2017-8-26 10:26 | 只看該作者
#ifndef _SHT10_H_
#define _SHT10_H_

typedef  unsigned char  uint8;

#define HUM_DATA BIT6
#define HUM_SCK  BIT7
#define SHT_SCK_HIGH P6OUT |= HUM_SCK
#define SHT_SCK_LOW  P6OUT &= ~HUM_SCK
#define SHT_DATA_HIGH P6OUT |= HUM_DATA
#define SHT_DATA_LOW  P6OUT &= ~HUM_DATA
#define READ_SHT_DATA (P6IN & HUM_DATA)
#define SHT_DATA_INPUT  P6DIR &=~ HUM_DATA
#define SHT_DATA_OUTPUT P6DIR |= HUM_DATA
#define MEASURE_TEMP 0x03//測量溫度
#define MEASURE_HUMI  0x05//測量濕度
#define READ_SR  0x07//讀狀態寄存器
#define WRITE_SR 0x06//寫狀態寄存器
#define Soft_Reset 0x1e//軟件復位 清空狀態寄存器
#define SHT_8BIT_CMD 0x01//設置濕度值為8位命令
#define ACK   1
#define NOACK 0

#define CPU_F ((double)8000000)
#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))

void SHT_Init(void);
void SHT_Start(void);
void SHTConnectionRst(void);
uint8 S_Write_Byte(uint8 value);
uint8 S_Read_Byte(uint8 ack);
uint8 SHTSoftwareRst(void);
uint8 SHTWriteReg(uint8 value);
uint8 SHTReadReg(uint8 *Dst,uint8 *CRC);
void SHT_Calculate(float *Humidity,float *Temperature);
uint8 SHTSample(uint8 *Dst,uint8 *CRC,uint8 Mode);
void Read_Wsd(uint8 *Txdata);

#endif


#include <msp430x14x.h>
#include "sht10.h"

typedef union
{
    unsigned int i;
    float f;
}value;
value humi_val,temp_val;
unsigned short temp16_T,temp16_H;
uint8 checksum;

/*******************************************
函數名稱:SHT_Init()
功    能:溫濕度傳感器IO初始化
參    數:無
返回值  :無
********************************************/
void SHT_Init(void)
{
    P6SEL &=~(HUM_DATA + HUM_SCK);
    P6OUT |= (HUM_DATA + HUM_SCK);//SDA SCK輸出
    SHT_DATA_HIGH;
    SHT_SCK_HIGH;
    SHTConnectionRst();//connection reset sequence
    //SHTWriteReg(SHT_8BIT_CMD);
}
/*******************************************
函數名稱:SHT_Start()
功    能:SHT啟動傳輸
參    數:無
返回值  :無
********************************************/
void SHT_Start(void)
{
    SHT_DATA_HIGH;SHT_SCK_LOW;
    _NOP();
    _NOP();
    SHT_SCK_HIGH;
    _NOP();
    _NOP();
    SHT_DATA_LOW;
    _NOP();
    _NOP();
    SHT_SCK_LOW;
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    SHT_SCK_HIGH;
    _NOP();
    _NOP();
    SHT_DATA_HIGH;
    _NOP();
    _NOP();
    SHT_SCK_LOW;
}
/*******************************************
函數名稱:SHTConnectionRst()
功    能:SHT通訊復位時序
參    數:無
返回值  :無
********************************************/
void SHTConnectionRst(void)
{
    uint8 i;
    SHT_DATA_OUTPUT;
    SHT_SCK_LOW;
    SHT_DATA_HIGH;
    for(i=0;i<9;i++)
    {
        SHT_SCK_HIGH;
        _NOP();_NOP();
        SHT_SCK_LOW;
        _NOP();_NOP();
    }
    SHT_Start();
}
/*******************************************
函數名稱:S_Write_Byte()
功    能:向SHT寫一個字節
參    數:value--要寫的字節
返回值  :err_code:0-正常  1-出錯
********************************************/
uint8 S_Write_Byte(uint8 value)
{
    uint8 i;
    uint8 err_code = 0;
    for(i=0x80;i>0;i/=2)
    {
        if(i & value)
        {
            SHT_DATA_HIGH;
        }
        else
        {
            SHT_DATA_LOW;
        }
        SHT_SCK_HIGH;
        _NOP();
        _NOP();
        SHT_SCK_LOW;
    }
    SHT_DATA_HIGH;//Release Data_line
    _NOP();_NOP();
    SHT_DATA_INPUT;
    _NOP();_NOP();
    SHT_SCK_HIGH;
    _NOP();_NOP();
    err_code = READ_SHT_DATA;
    _NOP();_NOP();
    SHT_SCK_LOW;
    _NOP();_NOP();
   
    SHT_DATA_OUTPUT;
   
    return err_code;
}
/*******************************************
函數名稱:S_Read_Byte()
功    能:從SHT讀取一個字節
參    數:ack--ACK
返回值  :val--讀到的的數據
********************************************/
uint8 S_Read_Byte(uint8 ack)
{
    uint8 i;
    uint8 val = 0;
    SHT_DATA_OUTPUT;
    SHT_DATA_HIGH;//Release Data_line
    _NOP();_NOP();
    SHT_DATA_INPUT;
    _NOP();_NOP();
    for(i=0x80;i>0;i/=2)//shift bit for masking
    {
        SHT_SCK_HIGH;
        _NOP();_NOP();
        if(READ_SHT_DATA)val = (val | i);//read bit
        SHT_SCK_LOW;
        _NOP();_NOP();
    }
    SHT_DATA_OUTPUT;
    if(ack == 0)
    {
        SHT_DATA_HIGH;
    }
    else
    {
        SHT_DATA_LOW;
    }
    SHT_SCK_HIGH;
    _NOP();_NOP();
    _NOP();_NOP();
    SHT_SCK_LOW;
    SHT_DATA_HIGH;//釋放數據線
    _NOP();_NOP();
    return val;
}
/*******************************************
函數名稱:SHTSoftwareRst()
功    能:SHT軟件復位
參    數:無
返回值  :err_code 0--正常 1--出錯
********************************************/
uint8 SHTSoftwareRst(void)
{
    uint8 err_code = 0;
    SHTConnectionRst();
    err_code = S_Write_Byte(Soft_Reset);
    return err_code;
}
/*******************************************
函數名稱:SHTWriteReg()
功    能:SHT寫狀態寄存器
參    數:value--要寫的值
返回值  :err_code 0--正常 1--出錯
********************************************/
uint8 SHTWriteReg(uint8 value)
{
    uint8 err_code = 0;
    SHT_Start();
    err_code += S_Write_Byte(WRITE_SR);
    err_code += S_Write_Byte(value);
    return err_code;
}
/*******************************************
函數名稱:SHTReadReg()
功    能:SHT讀狀態寄存器
參    數:Dst--數據源指針 CRC--CRC校驗值
返回值  :err_code 0--正常 1--出錯
********************************************/
uint8 SHTReadReg(uint8 *Dst,uint8 *CRC)
{
    uint8 err_code = 0;
    SHT_Start();
    err_code += S_Write_Byte(READ_SR);
    *Dst = S_Read_Byte(ACK);
    *CRC = S_Read_Byte(NOACK);
    return err_code;
}
/*******************************************
函數名稱:SHT_Calculate()
功    能:計算溫度[°C]和濕度[%RH]
參    數:Humi --濕度數據源指針[12 bit]
          Temp --溫度數據源指針[14 bit]
返回值  :humi[%RH]
********************************************/
void SHT_Calculate(float *p_humidity,float *p_temperature)
{      
    const float C1 = -4;// 12 Bit RH
    const float C2 = +0.0405;//12 Bit RH
    const float C3 = -0.0000028;//12 Bit RH
    const float T1 = +0.01;//12 Bit RH
    const float T2 = +0.00008;//12 Bit RH
    const float D1 = -39.60;//for 14 bit @3v
    const float D2 = +0.01;//for 14 bit @3v
    float rh = *p_humidity;
    float t  = *p_temperature;
    float rh_lin = 0;//Humidity linear
    float rh_true = 0;//Temperature compensated humidity
    float t_C = 0;//Temperature
    t_C = D1 + D2*t;//14 bit temperature
    rh_lin = C1 + C2*rh + C3*rh*rh;//12 bit humidity
    rh_true = (t_C - 25)*(T1 + T2*rh) + rh_lin;//calc Temperature compensated Humidity
    if(rh_true > 100)
    {
        rh_true = 100;
    }
    if(rh_true < 0.1)
    {
        rh_true = 0.1;
    }
    *p_humidity = rh_true;
    *p_temperature = t_C;
}
/*******************************************
函數名稱:S_Measure()
功    能:SHT采樣
參    數:Dst -- 數據源指針
          CRC --  CRC校驗值
          Mode--采集模式
返回值  :err_code 0--正常 1--出錯
********************************************/
uint8 S_Measure(uint8 *p_value,uint8 *p_checksum,uint8 mode)
{
    uint8 err_code = 0;
    unsigned short TimeCnt = 2000;
    SHT_Start();
    switch(mode)
    {
        case MEASURE_TEMP:err_code += S_Write_Byte(MEASURE_TEMP);break;
        case MEASURE_HUMI:err_code += S_Write_Byte(MEASURE_HUMI);break;
    default:break;
    }
    SHT_DATA_INPUT;
    do
    {
        delay_ms(1);
    }while((READ_SHT_DATA)&&(--TimeCnt));
    if(!TimeCnt)
    {
        err_code++;
    }
    else
    {
        *(p_value+1) = S_Read_Byte(ACK);//read the first byte(MSB)
        *(p_value) = S_Read_Byte(ACK);//read the second byte(LSB)
        *p_checksum = S_Read_Byte(NOACK);//read CheckSum
    }
   
    return err_code;
}
/*******************************************
函數名稱:Read_wsd()
功    能:讀取溫濕度
參    數:無
返 回 值:無
********************************************/
void Read_Wsd(uint8 *Txdata)
{
    SHT_Init();
   
    uint8 err_code = 0;
    err_code += S_Measure((uint8*)&humi_val.i,&checksum,MEASURE_HUMI);
    err_code += S_Measure((uint8*)&temp_val.i,&checksum,MEASURE_TEMP);
    if(err_code)//in case of an err,connection reset
    {
        SHTConnectionRst();
    }
    else
    {
        humi_val.f = (float)humi_val.i;
        temp_val.f = (float)temp_val.i;
        SHT_Calculate(&humi_val.f,&temp_val.f);
        temp16_T = (unsigned int)(temp_val.f * 10);
        temp16_H = (unsigned int)(humi_val.f * 10);
        Txdata[0] = temp16_T;//溫度的低字節
        Txdata[1] = temp16_T >> 8;//溫度的高字節
        Txdata[2] = temp16_H;//濕度的低字節
        Txdata[3] = temp16_H >> 8;//濕度的高字節
   
    }
}
回復

使用道具 舉報

5#
ID:750600 發表于 2020-5-20 18:30 | 只看該作者
依然是你 發表于 2017-8-26 10:26
#ifndef _SHT10_H_
#define _SHT10_H_

編程時候顯示這個#include "sht10.h"打不開是怎么回事
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 黄色一级毛片 | 宅男伊人 | 一区精品国产欧美在线 | 99精品久久久久久中文字幕 | 韩国精品在线观看 | 欧美日韩亚洲一区 | 成年人网站免费 | www.久久| 国产欧美一区二区三区久久 | 国产一级特黄真人毛片 | 日韩av在线不卡 | 一区二区三区高清 | 亚洲成av人片在线观看 | 99精品久久久国产一区二区三 | 久久伊 | 免费中文字幕 | 日韩电影免费观看中文字幕 | 一区精品在线观看 | 国产一级一级国产 | 免费a v网站 | 九九九久久国产免费 | 在线视频一区二区三区 | 日日操操 | 亚洲国产精品成人无久久精品 | av小说在线| 国产精品一区在线观看 | 色综合久久天天综合网 | 亚洲不卡视频 | 国产精品国产亚洲精品看不卡15 | 国产精品久久久久久久久久免费看 | 国产精品久久777777 | 久久精品 | 天天爽夜夜爽精品视频婷婷 | 亚洲激情自拍偷拍 | 999久久| 国产激情精品一区二区三区 | 婷婷免费视频 | 97国产精品 | 亚洲高清一区二区三区 | 成人国产精品入口免费视频 | 久久精品国产99国产 |