|
便宜環(huán)境IAR for 51,單片機(jī) TI CC2530,傳感器CC2530!!
0.png (47.05 KB, 下載次數(shù): 160)
下載附件
2017-6-25 16:30 上傳
單片機(jī)源程序如下:
- #include <ioCC2530.h>
- #include <stdio.h>
- #include "hal_mcu.h"
- #define uint16 unsigned int
- #define uint8 unsigned char
- #define STATUS_REG_W 0x06
- #define STATUS_REG_R 0x07
- #define MEASURE_TEMP 0x03
- #define MEASURE_HUMI 0x05
- #define RESET 0x1E
- #define noACK 0
- #define ACK 1
- #define SHT10_SCL_PIN P1_7 //SHT10時(shí)鐘
- #define SHT10_SDA_PIN P1_6 //SHT10數(shù)據(jù)線
- #define SHT10_DATA_R() P1DIR &= 0x7F
- #define SHT10_DAT_W() P1DIR |= 0x80
- #define SHT10_SCL_HIGH() (SHT10_SCL_PIN = 1)
- #define SHT10_SCL_LOW() (SHT10_SCL_PIN = 0)
- #define SHT10_SDA_HIGH() (SHT10_SDA_PIN = 1)
- #define SHT10_SDA_LOW() (SHT10_SDA_PIN = 0)
- unsigned char d1,d2,d3;
- /**************************************************************************************************
- * 函數(shù)名稱:initIO
- *
- * 功能描述:SHT10串行通信IO初始化
- *
- * 參 數(shù):無(wú)
- *
- * 返 回 值:無(wú)
- **************************************************************************************************/
- void initIO(void)
- {
- P1DIR|= 0xc0;
- P1INP &= 0xbf;
- SHT10_SDA_HIGH();
- SHT10_SCL_LOW();
- }
- /**************************************************************************************************
- * 函數(shù)名稱:s_write_byte_to_sht10
- *
- * 功能描述:向SHT10寫一個(gè)字節(jié)
- *
- * 參 數(shù):value -- 需寫入的字節(jié)值
- *
- * 返 回 值:error -- 操作是否成功
- **************************************************************************************************/
- char write_byte_to_sht10(unsigned char value)
- {
- uint8 i;
- uint8 error=1;
-
- SHT10_DAT_W();
- for (i=0x80;i>0;i/=2) //將一個(gè)字節(jié)的8位逐一輸出
- {
- if (i & value)
- {
- SHT10_SDA_HIGH();
- }
- else
- {
- SHT10_SDA_LOW();
- }
- SHT10_SCL_HIGH();
- halMcuWaitUs(5);
- SHT10_SCL_LOW();
- halMcuWaitUs(1);
- }
- SHT10_SDA_HIGH();
- SHT10_DATA_R();
- SHT10_SCL_HIGH();
- halMcuWaitUs(1);
- error = SHT10_SDA_PIN;
- halMcuWaitUs(3);
- SHT10_DAT_W();
- SHT10_SDA_HIGH();
- SHT10_SCL_LOW();
-
- return error;
- }
- /**************************************************************************************************
- * 函數(shù)名稱:s_receive_byte_from_sht10
- *
- * 功能描述:從SHT10讀取一個(gè)字節(jié)
- *
- * 參 數(shù):ack -- 讀取數(shù)據(jù)后,向SHT10發(fā)送ACK
- *
- * 返 回 值:val -- 讀取的字節(jié)值
- **************************************************************************************************/
- char receive_byte_from_sht10(unsigned char ack)
- {
- uint8 i;
- uint8 val = 0;
- SHT10_DAT_W();
- SHT10_SDA_PIN= 1;
- SHT10_DATA_R();
-
- for (i=0x80;i>0;i/=2)
- {
- SHT10_SCL_HIGH();
- if (SHT10_SDA_PIN)
- val = (val | i);
- else
- val = (val | 0x00);
- SHT10_SCL_LOW();
- halMcuWaitUs(5);
- }
- SHT10_DAT_W();
- SHT10_SDA_PIN = !ack;
- SHT10_SCL_HIGH();
- halMcuWaitUs(5);
- SHT10_SCL_LOW();
- SHT10_SDA_HIGH();
-
- return val; //返回讀取的值
- }
- /**************************************************************************************************
- * 函數(shù)名稱:transstart
- *
- * 功能描述:?jiǎn)?dòng)SHT10,開始與SHT10通信
- *
- * 參 數(shù):無(wú)
- *
- * 返 回 值:無(wú)
- **************************************************************************************************/
- void transstart(void)
- {
- SHT10_DAT_W();
- SHT10_SDA_HIGH();
- SHT10_SCL_LOW();
- halMcuWaitUs(1);;
- SHT10_SCL_HIGH();
- halMcuWaitUs(2);
- SHT10_SDA_LOW();
- halMcuWaitUs(2);
- SHT10_SCL_LOW();
- halMcuWaitUs(5);
- SHT10_SCL_HIGH();
- halMcuWaitUs(2);
- SHT10_SDA_HIGH();
- halMcuWaitUs(2);
- SHT10_SCL_LOW();
- halMcuWaitUs(2);
- }
- /**************************************************************************************************
- * 函數(shù)名稱:s_connectionreset
- *
- * 功能描述:與SHT10通信復(fù)位
- *
- * 參 數(shù):無(wú)
- *
- * 返 回 值:無(wú)
- **************************************************************************************************/
- void connectionreset(void)
- {
- SHT10_DAT_W();
- unsigned char i;
- SHT10_SDA_HIGH();
- SHT10_SCL_LOW();
- for(i=0;i<9;i++)
- {
- SHT10_SCL_HIGH();
- halMcuWaitUs(2);
- SHT10_SCL_LOW();
- halMcuWaitUs(2);
- }
- transstart();
- }
- /**************************************************************************************************
- * 函數(shù)名稱:measure
- *
- * 功能描述:發(fā)送命令、讀取SHT10溫度或濕度數(shù)據(jù)
- *
- * 參 數(shù):*p_checksum -- 校驗(yàn)和
- * mode -- 讀取數(shù)據(jù)類型(3為溫度,5為濕度)
- *
- * 返 回 值:er -- 操作結(jié)果
- **************************************************************************************************/
- char measure( unsigned char *p_checksum, unsigned char mode)
- {
- unsigned er=0;
- unsigned int i,j;
- transstart();
- switch(mode)
- {
- case 3 :er+=write_byte_to_sht10(MEASURE_TEMP);break;
- case 5 :er+=write_byte_to_sht10(MEASURE_HUMI);break;
- default :break;
- }
- SHT10_DATA_R();
- for(i=0;i<65535;i++)
- {
- for(j=0;j<65535;j++)
- {
- if(SHT10_SDA_PIN == 0)
- {
- break;
- }
- }
- if(SHT10_SDA_PIN == 0)
- {
- break;
- }
- }
-
- if(SHT10_SDA_PIN)
- {
- er += 1;
- }
- d1 = receive_byte_from_sht10(ACK);
- d2 = receive_byte_from_sht10(ACK);
- d3 = receive_byte_from_sht10(noACK);
- return er;
- }
- /**************************************************************************************************
- * 函數(shù)名稱:tempera_humi_read
- *
- * 功能描述:調(diào)用相應(yīng)函數(shù),讀取溫度和濕度數(shù)據(jù)并校驗(yàn)和計(jì)算
- *
- * 參 數(shù):*t -- 溫度值
- * *h -- 濕度值
- *
- * 返 回 值:無(wú)
- **************************************************************************************************/
- void tempera_humi_read(float *t,float *h )
- {
- unsigned char error,checksum;
- float humi,temp;
- initIO();
-
- connectionreset(); //啟動(dòng)傳輸
- error = 0;
- error += measure(&checksum,MEASURE_HUMI); //讀取濕度數(shù)據(jù)并校驗(yàn)
- humi = d1*256+d2;
-
- error += measure(&checksum,MEASURE_TEMP); //讀取溫度數(shù)據(jù)并校驗(yàn)
- temp = d1*256+d2;
- if(error != 0)
- {
- connectionreset(); //讀取失敗,通信復(fù)位
- }
- else //讀取成功,計(jì)算數(shù)據(jù)
- {
- temp = temp*0.01 - 39.6 ;
- humi = (temp - 25) * (0.01 + 0.00008 * humi)
- -0.0000028 * humi * humi + 0.0405 * humi-4;
- if(humi>100)
- {
- humi = 100;
- }
- if(humi<0.1)
- {
- humi = 0.1;
- }
- }
-
- *t=temp;
-
- *h=humi*10;
-
- }
- /****************************************************************
- 串口初始化函數(shù)
- ****************************************************************/
- void initUARTSEND(void)
- {
- CLKCONCMD &= ~0x40; //設(shè)置系統(tǒng)時(shí)鐘源為32MHZ晶振
- while(CLKCONSTA & 0x40); //等待晶振穩(wěn)定
- CLKCONCMD &= ~0x47; //設(shè)置系統(tǒng)主時(shí)鐘頻率為32MHZ
-
-
- PERCFG = 0x00; //位置1 P0口
- P0SEL = 0x3c; //P0_2,P0_3,P0_4,P0_5用作串口
- P2DIR &= ~0XC0; //P0優(yōu)先作為UART0
- U0CSR |= 0x80; //UART方式
- U0GCR |= 9;
- U0BAUD |= 59; //波特率設(shè)為19200
- UTX0IF = 0; //UART0 TX中斷標(biāo)志初始置位0
- }
- /****************************************************************
- 串口發(fā)送字符串函數(shù)
- ****************************************************************/
- void UartTX_Send_String(char *Data,int len)
- {
- int j;
- for(j=0;j<len;j++)
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
SHT10溫濕度傳感器程序調(diào)試.rar
(557.71 KB, 下載次數(shù): 98)
2017-6-25 09:13 上傳
點(diǎn)擊文件名下載附件
基于CC2530的SHT10傳感器調(diào)試(編譯環(huán)境IAR for 51) 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|