日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

SHT1x/SHT7x数字温湿度传感器驱动编写

發(fā)布時(shí)間:2025/3/12 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SHT1x/SHT7x数字温湿度传感器驱动编写 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

結(jié)構(gòu)圖

啟動(dòng)傳輸時(shí)序圖


SHT10串行通信IO初始化
其中SDA和SCL分別是數(shù)據(jù)線和時(shí)鐘線。分別對(duì)應(yīng)單片機(jī)的1.1口和1.0口

#define SCL P1_0 //SHT10時(shí)鐘 #define SDA P1_1 //SHT10數(shù)據(jù)線

由時(shí)序圖可知,一開(kāi)始SDA和SCL分別高電平和低電平

/*************************************************************************************************** 函數(shù)名稱:initIO** 功能描述:SHT10串行通信IO初始化** 參 數(shù):無(wú)** 返 回 值:無(wú)**************************************************************************************************/ void initIO(void) {IO_DIR_PORT_PIN(1, 0, IO_OUT);//DIR是方向的意思IO_DIR_PORT_PIN(1, 1, IO_OUT);P1INP |= 0x03;SDA = 1; SCL = 0; }

下面這個(gè)代碼也是根據(jù)時(shí)序圖來(lái)寫(xiě)的。
由此可見(jiàn),驅(qū)動(dòng)其實(shí)就是根據(jù)時(shí)序圖來(lái)編寫(xiě)的,不按照時(shí)序圖編寫(xiě),單片機(jī)不執(zhí)行這段代碼的話,傳感器就不能正常工作,不會(huì)聽(tīng)從單片機(jī)的指令。

/*************************************************************************************************** 函數(shù)名稱:s_transstart** 功能描述:啟動(dòng)SHT10,開(kāi)始與SHT10通信** 參 數(shù):無(wú)** 返 回 值:無(wú)**************************************************************************************************/ void s_transstart(void) {IO_DIR_PORT_PIN(1, 0, IO_OUT);IO_DIR_PORT_PIN(1, 1, IO_OUT);SDA = 1; SCL = 0;QWait();QWait();SCL = 1;QWait();QWait();SDA = 0;QWait();QWait(); SCL = 0;QWait();QWait();QWait();QWait();QWait();SCL = 1;QWait();QWait();SDA = 1;QWait();QWait();SCL = 0;QWait();QWait(); }

通訊復(fù)位時(shí)序圖

/*************************************************************************************************** 函數(shù)名稱:s_connectionreset** 功能描述:與SHT10通信復(fù)位** 參 數(shù):無(wú)** 返 回 值:無(wú)**************************************************************************************************/ void s_connectionreset(void) {IO_DIR_PORT_PIN(1, 0, IO_OUT);IO_DIR_PORT_PIN(1, 1, IO_OUT);unsigned char i;SDA = 1; SCL= 0;for(i=0;i<9;i++){SCL = 1;QWait();QWait();SCL = 0;QWait();QWait();}s_transstart(); }

SHTXX命令集


如何實(shí)現(xiàn)溫濕度讀取呢?

在void th_read(int *t,int *h )函數(shù)里:

error+=s_measure(&checksum,5); //讀取濕度數(shù)據(jù)并校驗(yàn)humi = d1*256+d2;error+=s_measure(&checksum,3); //讀取溫度數(shù)據(jù)并校驗(yàn)temp = d1*256+d2;

可以看到讀溫度還是讀濕度唯一區(qū)別就是s_measure里第二個(gè)參數(shù)是三還是五。
再看s_measure函數(shù):
里面有一個(gè)s_write_byte()函數(shù),結(jié)合SHTXX命令集可知道,單片機(jī)發(fā)送3就是發(fā)送溫度讀取命令,發(fā)送5就是發(fā)送濕度讀取命令。

case 3 :er+=s_write_byte(3);break; //發(fā)送溫度讀取命令case 5 :er+=s_write_byte(5);break; //發(fā)送濕度讀取命令

當(dāng)傳感器收到指令,開(kāi)始工作收集濕度數(shù)據(jù)信息,這個(gè)過(guò)程需要時(shí)間。
當(dāng)它準(zhǔn)備好了,他會(huì)給單片機(jī)一個(gè)低電平,一旦單片機(jī)收到了,就break了。

for(i=0;i<65535;i++){for(j=0;j<65535;j++){if(SDA == 0){break;}}if(SDA == 0){break;}}

然后單片機(jī)開(kāi)始讀取數(shù)據(jù):

d1 = s_read_byte(ACK); //數(shù)據(jù)讀取d2 = s_read_byte(ACK);d3 = s_read_byte(noACK);

如果說(shuō)延時(shí)完了SDA還沒(méi)有拉低,錯(cuò)誤信息加1,并返回錯(cuò)誤信息。 return er;

if(SDA) //SDA沒(méi)有拉低,錯(cuò)誤信息加1{er += 1;} /*************************************************************************************************** 函數(shù)名稱:s_measure** 功能描述:發(fā)送命令、讀取SHT10溫度或濕度數(shù)據(jù)** 參 數(shù):*p_checksum -- 校驗(yàn)和* mode -- 讀取數(shù)據(jù)類型(3為溫度,5為濕度)** 返 回 值:er -- 操作結(jié)果**************************************************************************************************/char s_measure( unsigned char *p_checksum, unsigned char mode) {unsigned er=0;unsigned int i,j;s_transstart(); //啟動(dòng)傳輸switch(mode){case 3 :er+=s_write_byte(3);break; //發(fā)送溫度讀取命令case 5 :er+=s_write_byte(5);break; //發(fā)送濕度讀取命令default :break;}IO_DIR_PORT_PIN(1, 1, IO_IN); //將數(shù)據(jù)線設(shè)置為輸入,以準(zhǔn)備接收SHT10的ACKfor(i=0;i<65535;i++){for(j=0;j<65535;j++){if(SDA == 0){break;}}if(SDA == 0){break;}}if(SDA) //SDA沒(méi)有拉低,錯(cuò)誤信息加1{er += 1;}d1 = s_read_byte(ACK); //數(shù)據(jù)讀取d2 = s_read_byte(ACK);d3 = s_read_byte(noACK);return er; }

再來(lái)看void th_read(int *t,int *h )函數(shù),就清晰很多了

/*************************************************************************************************** 函數(shù)名稱:th_read** 功能描述:調(diào)用相應(yīng)函數(shù),讀取溫度和數(shù)據(jù)數(shù)據(jù)并校驗(yàn)和計(jì)算** 參 數(shù):*t -- 溫度值* *h -- 濕度值** 返 回 值:無(wú)**************************************************************************************************/ void th_read(int *t,int *h ) {unsigned char error,checksum;float humi,temp;int tmp;initIO();s_connectionreset(); //啟動(dòng)傳輸error=0;error+=s_measure(&checksum,5); //讀取濕度數(shù)據(jù)并校驗(yàn)humi = d1*256+d2;error+=s_measure(&checksum,3); //讀取溫度數(shù)據(jù)并校驗(yàn)temp = d1*256+d2;if(error!=0) s_connectionreset(); //讀取失敗,通信復(fù)位else //讀取成功,計(jì)算數(shù)據(jù){ temp = temp*0.01 - 44.0 ;humi = (temp - 25) * (0.01 + 0.00008 * humi) -0.0000028 * humi * humi + 0.0405 * humi-4;//通過(guò)溫度計(jì)算相對(duì)濕度 if(humi>100){humi = 100;}if(humi<0.1){humi = 0.1;}}tmp=(int)(temp*10)%10;if(tmp>4){temp=temp+1; }else{temp=temp;}*t=(int)temp;tmp=(int)(humi*10)%10;if(humi>4){humi=humi+1; }else{humi=humi;}*h=(int)humi;}

下面這一段是四舍五入的意思。

tmp=(int)(temp*10)%10;if(tmp>4){temp=temp+1; }else{temp=temp;}*t=(int)temp;tmp=(int)(humi*10)%10;if(humi>4){humi=humi+1; }else{humi=humi;}*h=(int)humi;

代碼:

/*********************************************************************************************************************************************************** * SHT10 是一款高度集成的溫濕度傳感器芯片, 提供全標(biāo)定的數(shù)字輸出。它采用專利的CMOSens技術(shù),確保產(chǎn)品具有極高的可靠性與卓 * 越的長(zhǎng)期穩(wěn)定性。傳感器包括一個(gè)電容性聚合體測(cè)濕敏感元件、一個(gè)用能隙材料制成的測(cè)溫元件,并在同一芯片上,與14 位的A/D 轉(zhuǎn) * 換器以及串行接口電路實(shí)現(xiàn)無(wú)縫連接。 * * SHT10引腳特性如下: * 1. VDD,GND SHT10 的供電電壓為2.4~5.5V。傳感器上電后,要等待11ms 以越過(guò)“休眠”狀態(tài)。在此期間無(wú)需發(fā)送任何指令。 * 電源引腳(VDD,GND)之間可增加一個(gè)100nF 的電容,用以去耦濾波。 * 2. SCK 用于微處理器與SHT10 之間的通訊同步。由于接口包含了完全靜態(tài)邏輯,因而不存在最小SCK頻率。 * 3. DATA 三態(tài)門用于數(shù)據(jù)的讀取。DATA 在SCK 時(shí)鐘下降沿之后改變狀態(tài),并僅在SCK 時(shí)鐘上升沿有效。數(shù)據(jù)傳輸期間, * 在SCK 時(shí)鐘高電平時(shí),DATA必須保持穩(wěn)定。為避免信號(hào)沖突,微處理器應(yīng)驅(qū)動(dòng)DATA 在低電平。需要一個(gè)外部的上拉電阻 * (例如:10kΩ)將信號(hào)提拉至高電平。上拉電阻通常已包含在微處理器的I/O 電路中。 * * 向SHT10發(fā)送命令:         * 用一組“ 啟動(dòng)傳輸”時(shí)序,來(lái)表示數(shù)據(jù)傳輸?shù)某跏蓟K?#xff1a;當(dāng)SCK 時(shí)鐘高電平時(shí)DATA 翻轉(zhuǎn)為低電平,緊接著SCK變?yōu)榈碗娖?#xff0c; * 隨后是在SCK 時(shí)鐘高電平時(shí)DATA 翻轉(zhuǎn)為高電平。后續(xù)命令包含三個(gè)地址位(目前只支持“000”),和五個(gè)命令位。SHT10會(huì)以下 * 述方式表示已正確地接收到指令:在第8 個(gè)SCK 時(shí)鐘的下降沿之后,將DATA 拉為低電平(ACK 位)。在第9 個(gè)SCK 時(shí)鐘的下降沿 * 之后,釋放DATA(恢復(fù)高電平)。 * * 測(cè)量時(shí)序(RH 和 T): * 發(fā)布一組測(cè)量命令(‘00000101’表示相對(duì)濕度RH,‘00000011’表示溫度T)后,控制器要等待測(cè)量結(jié)束。這個(gè)過(guò)程需要大約 * 11/55/210ms,分別對(duì)應(yīng)8/12/14bit 測(cè)量。確切的時(shí)間隨內(nèi)部晶振速度,最多有±15%變化。SHTxx 通過(guò)下拉DATA 至低電平并 * 進(jìn)入空閑模式,表示測(cè)量的結(jié)束??刂破髟谠俅斡|發(fā)SCK 時(shí)鐘前,必須等待這個(gè)“數(shù)據(jù)備妥”信號(hào)來(lái)讀出數(shù)據(jù)。檢測(cè)數(shù)據(jù)可以 * 先被存儲(chǔ),這樣控制器可以繼續(xù)執(zhí)行其它任務(wù)在需要時(shí)再讀出數(shù)據(jù)。 * 接著傳輸2 個(gè)字節(jié)的測(cè)量數(shù)據(jù)和1 個(gè)字節(jié)的CRC 奇偶校驗(yàn)。uC 需要通過(guò)下拉DATA 為低電平,以確認(rèn)每個(gè)字節(jié)。所有的數(shù)據(jù)從 * MSB 開(kāi)始,右值有效(例如:對(duì)于12bit 數(shù)據(jù),從第5 個(gè)SCK 時(shí)鐘起算作MSB; 而對(duì)于 8bit 數(shù)據(jù), 首字節(jié)則無(wú)意義)。用 * CRC 數(shù)據(jù)的確認(rèn)位,表明通訊結(jié)束。如果不使用CRC-8 校驗(yàn),控制器可以在測(cè)量值LSB 后,通過(guò)保持確認(rèn)位ack 高電平, 來(lái)中 * 止通訊。在測(cè)量和通訊結(jié)束后,SHTxx 自動(dòng)轉(zhuǎn)入休眠模式。 * * 通訊復(fù)位時(shí)序: * 如果與 SHTxx 通訊中斷,下列信號(hào)時(shí)序可以復(fù)位串口:當(dāng)DATA 保持高電平時(shí),觸發(fā)SCK 時(shí)鐘9 次或更多。在下一次指令前,發(fā)送 * 一個(gè)“傳輸啟動(dòng)”時(shí)序。這些時(shí)序只復(fù)位串口,狀態(tài)寄存器內(nèi)容仍然保留。 * * 更多SHT10信息,請(qǐng)參考相應(yīng)文檔。 * * 光照強(qiáng)度采集: * 光照采集主要是通過(guò)用CC2530內(nèi)部的ADC來(lái)得到OURS-CC2530開(kāi)發(fā)板上的光照傳感器輸出電壓。傳感器輸出電壓(連接到CC2530的AIN0) * * 本實(shí)驗(yàn)將使用CC2530讀取溫濕度傳感器SHT10的溫度和濕度數(shù)據(jù),并通過(guò)ADC得到光照傳感器的數(shù)據(jù)。最后將采樣到的數(shù)據(jù)轉(zhuǎn)換然后在LCD上顯示。 * * 在\include\hal.h文件中包含了和ADC相關(guān)的一些宏,用戶使用這些宏 * 可以簡(jiǎn)化對(duì)ADC的操作,提高代碼的可讀性,本實(shí)驗(yàn)中就使用了其中的一些宏。 * * 注 意:本實(shí)驗(yàn)所需硬件資源: * OURS-CC2530RF板 * 帶LCD的智能主板 * 溫濕度+光照傳感器板 * ***********************************************************************************************************************************************************/ #include "hal.h" #include "LCD.h" #include "stdio.h"#define noACK 0 #define ACK 1#define STATUS_REG_W 0x06 #define STATUS_REG_R 0x07 #define MEASURE_TEMP 0x03 #define MEASURE_HUMI 0x05 #define RESET 0x1e#define SCL P1_0 //SHT10時(shí)鐘 #define SDA P1_1 //SHT10數(shù)據(jù)線unsigned char d1,d2,d3,d4,d5,d6,d7;void Wait(unsigned int ms); void QWait(void) ; char s_write_byte(unsigned char value); char s_read_byte(unsigned char ack); void s_transstart(void); void s_connectionreset(void); char s_measure( unsigned char *p_checksum, unsigned char mode); void initIO(void);/*************************************************************************************************** 函數(shù)名稱:Wait** 功能描述:延時(shí)函數(shù)(不精確延時(shí))** 參 數(shù):ms -- 延時(shí)時(shí)間** 返 回 值:無(wú)**************************************************************************************************/ void Wait(unsigned int ms) {unsigned char g,k;while(ms){for(g=0;g<=167;g++){for(k=0;k<=48;k++);}ms--; } } /*************************************************************************************************** 函數(shù)名稱:QWait** 功能描述:延時(shí)函數(shù)(大約1us的延時(shí))** 參 數(shù):無(wú)** 返 回 值:無(wú)**************************************************************************************************/ void QWait() {asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");asm("NOP");}/*************************************************************************************************** 函數(shù)名稱:initIO** 功能描述:SHT10串行通信IO初始化** 參 數(shù):無(wú)** 返 回 值:無(wú)**************************************************************************************************/ void initIO(void) {IO_DIR_PORT_PIN(1, 0, IO_OUT);IO_DIR_PORT_PIN(1, 1, IO_OUT);P1INP |= 0x03;SDA = 1; SCL = 0; }/*************************************************************************************************** 函數(shù)名稱:s_write_byte** 功能描述:從SHT10寫(xiě)一個(gè)字節(jié)** 參 數(shù):value -- 需寫(xiě)入的字節(jié)值** 返 回 值:error -- 操作是否成功**************************************************************************************************/ char s_write_byte(unsigned char value) { unsigned char i,error=0; IO_DIR_PORT_PIN(1, 0, IO_OUT); //時(shí)鐘和數(shù)據(jù)IO設(shè)置為輸出IO_DIR_PORT_PIN(1, 1, IO_OUT);for (i=0x80;i>0;i/=2) //將一個(gè)字節(jié)的8位逐一輸出 {if (i & value)SDA=1; elseSDA=0; SCL = 1; QWait();QWait();QWait();QWait();QWait();SCL = 0;asm("NOP"); asm("NOP");}SDA = 1; IO_DIR_PORT_PIN(1, 1, IO_IN); //將數(shù)據(jù)線設(shè)置為輸入,以準(zhǔn)備接收SHT10的ACKSCL = 1; asm("NOP"); error = SDA; QWait();QWait();QWait();IO_DIR_PORT_PIN(1, 1, IO_OUT); //將數(shù)據(jù)線恢復(fù)為輸出狀態(tài)SDA = 1; SCL = 0; return error; }/*************************************************************************************************** 函數(shù)名稱:s_read_byte** 功能描述:從SHT10讀取一個(gè)字節(jié)** 參 數(shù):ack -- 讀取數(shù)據(jù)后,向SHT10發(fā)送ACK** 返 回 值:val -- 讀取的字節(jié)值**************************************************************************************************/ char s_read_byte(unsigned char ack) {IO_DIR_PORT_PIN(1, 0, IO_OUT); //時(shí)鐘和數(shù)據(jù)IO設(shè)置為輸出IO_DIR_PORT_PIN(1, 1, IO_OUT);unsigned char i,val=0;SDA= 1;IO_DIR_PORT_PIN(1, 1, IO_IN); //將數(shù)據(jù)線設(shè)置為輸入,以準(zhǔn)備接收SHT10的數(shù)據(jù)for (i=0x80;i>0;i/=2) {SCL = 1;if (SDA)val = (val | i);elseval = (val | 0x00);SCL = 0;QWait();QWait();QWait();QWait();QWait();}IO_DIR_PORT_PIN(1, 1, IO_OUT); //將數(shù)據(jù)線恢復(fù)為輸出狀態(tài)SDA = !ack;SCL = 1;QWait();QWait();QWait();QWait();QWait();SCL = 0;SDA = 1;return val; //返回讀取的值 }/*************************************************************************************************** 函數(shù)名稱:s_transstart** 功能描述:啟動(dòng)SHT10,開(kāi)始與SHT10通信** 參 數(shù):無(wú)** 返 回 值:無(wú)**************************************************************************************************/ void s_transstart(void) {IO_DIR_PORT_PIN(1, 0, IO_OUT);IO_DIR_PORT_PIN(1, 1, IO_OUT);SDA = 1; SCL = 0;QWait();QWait();SCL = 1;QWait();QWait();SDA = 0;QWait();QWait(); SCL = 0;QWait();QWait();QWait();QWait();QWait();SCL = 1;QWait();QWait();SDA = 1;QWait();QWait();SCL = 0;QWait();QWait(); }/*************************************************************************************************** 函數(shù)名稱:s_connectionreset** 功能描述:與SHT10通信復(fù)位** 參 數(shù):無(wú)** 返 回 值:無(wú)**************************************************************************************************/ void s_connectionreset(void) {IO_DIR_PORT_PIN(1, 0, IO_OUT);IO_DIR_PORT_PIN(1, 1, IO_OUT);unsigned char i;SDA = 1; SCL= 0;for(i=0;i<9;i++){SCL = 1;QWait();QWait();SCL = 0;QWait();QWait();}s_transstart(); }/*************************************************************************************************** 函數(shù)名稱:s_measure** 功能描述:發(fā)送命令、讀取SHT10溫度或濕度數(shù)據(jù)** 參 數(shù):*p_checksum -- 校驗(yàn)和* mode -- 讀取數(shù)據(jù)類型(3為溫度,5為濕度)** 返 回 值:er -- 操作結(jié)果**************************************************************************************************/ char s_measure( unsigned char *p_checksum, unsigned char mode) {unsigned er=0;unsigned int i,j;s_transstart(); //啟動(dòng)傳輸switch(mode){case 3 :er+=s_write_byte(3);break; //發(fā)送溫度讀取命令case 5 :er+=s_write_byte(5);break; //發(fā)送濕度讀取命令default :break;}IO_DIR_PORT_PIN(1, 1, IO_IN); //將數(shù)據(jù)線設(shè)置為輸入,以準(zhǔn)備接收SHT10的ACKfor(i=0;i<65535;i++){for(j=0;j<65535;j++){if(SDA == 0){break;}}if(SDA == 0){break;}}if(SDA) //SDA沒(méi)有拉低,錯(cuò)誤信息加1{er += 1;}d1 = s_read_byte(ACK); //數(shù)據(jù)讀取d2 = s_read_byte(ACK);d3 = s_read_byte(noACK);return er; }/*************************************************************************************************** 函數(shù)名稱:th_read** 功能描述:調(diào)用相應(yīng)函數(shù),讀取溫度和數(shù)據(jù)數(shù)據(jù)并校驗(yàn)和計(jì)算** 參 數(shù):*t -- 溫度值* *h -- 濕度值** 返 回 值:無(wú)**************************************************************************************************/ void th_read(int *t,int *h ) {unsigned char error,checksum;float humi,temp;int tmp;initIO();s_connectionreset(); //啟動(dòng)傳輸error=0;error+=s_measure(&checksum,5); //讀取濕度數(shù)據(jù)并校驗(yàn)humi = d1*256+d2;error+=s_measure(&checksum,3); //讀取溫度數(shù)據(jù)并校驗(yàn)temp = d1*256+d2;if(error!=0) s_connectionreset(); //讀取失敗,通信復(fù)位else //讀取成功,計(jì)算數(shù)據(jù){ temp = temp*0.01 - 44.0 ;humi = (temp - 25) * (0.01 + 0.00008 * humi) -0.0000028 * humi * humi + 0.0405 * humi-4;//通過(guò)溫度計(jì)算相對(duì)濕度 if(humi>100){humi = 100;}if(humi<0.1){humi = 0.1;}}tmp=(int)(temp*10)%10;if(tmp>4){temp=temp+1; }else{temp=temp;}*t=(int)temp;tmp=(int)(humi*10)%10;if(humi>4){humi=humi+1; }else{humi=humi;}*h=(int)humi;}/*************************************************************************************************** 函數(shù)名稱:main** 功能描述:讀取溫度、濕度和光照強(qiáng)度數(shù)據(jù),并同過(guò)LCD顯示** 參 數(shù):無(wú)** 返 回 值:無(wú)**************************************************************************************************/ void main() {int tempera;int humidity;char s[16];UINT8 adc0_value[2];float num = 0;SET_MAIN_CLOCK_SOURCE(CRYSTAL); // 設(shè)置系統(tǒng)時(shí)鐘源為32MHz晶體振蕩器GUI_Init(); // GUI初始化GUI_SetColor(1,0); // 顯示色為亮點(diǎn),背景色為暗點(diǎn)GUI_PutString5_7(25,6,"OURS-CC2530"); //顯示 OURS-CC2530GUI_PutString5_7(10,22,"Temp:"); GUI_PutString5_7(10,35,"Humi:");GUI_PutString5_7(10,48,"Light:");LCM_Refresh();while(1){th_read(&tempera,&humidity); //讀取溫度和濕度sprintf(s, (char*)"%d%d C", ((INT16)((int)tempera / 10)), ((INT16)((int)tempera % 10))); //將溫度結(jié)果轉(zhuǎn)換為字符串GUI_PutString5_7(48,22,(char *)s); //顯示結(jié)果LCM_Refresh();sprintf(s, (char*)"%d%d %%", ((INT16)((int)humidity / 10)), ((INT16)((int)humidity % 10)));//將濕度結(jié)果轉(zhuǎn)換為字符串GUI_PutString5_7(48,35,(char *)s); //顯示結(jié)果LCM_Refresh();/* AIN0通道采樣 */ADC_ENABLE_CHANNEL(ADC_AIN0); // 使能AIN0為ADC輸入通道/* 配置ADCCON3寄存器以便在ADCCON1.STSEL = 11(復(fù)位默認(rèn)值)且ADCCON1.ST = 1時(shí)進(jìn)行單一轉(zhuǎn)換 *//* 參考電壓:AVDD_SOC引腳上的電壓 *//* 抽取率:512 *//* ADC輸入通道:AIN0 */ADC_SINGLE_CONVERSION(ADC_REF_AVDD | ADC_14_BIT | ADC_AIN0);ADC_SAMPLE_SINGLE(); // 啟動(dòng)一個(gè)單一轉(zhuǎn)換while(!ADC_SAMPLE_READY()); // 等待轉(zhuǎn)換完成ADC_ENABLE_CHANNEL(ADC_AIN0); // 禁止AIN0adc0_value[0] = ADCL; // 讀取ADC值adc0_value[1] = ADCH; // 讀取ADC值adc0_value[0] = adc0_value[0]>>2;num = (adc0_value[1]*256+adc0_value[0])*3.3/8192; //有一位符號(hào)位,取2^13;num /= 4; num=num*913; //轉(zhuǎn)換為L(zhǎng)xsprintf(s, (char*)"%d%d%d%d lx", ((INT16)((int)num/1000)), ((INT16)((int)num%1000/100)),((INT16)((int)num%100/10)),((INT16)((int)num%10))); //將光照結(jié)果轉(zhuǎn)換為字符串GUI_PutString5_7(48,48,(char *)s); //顯示結(jié)果LCM_Refresh();} }

總結(jié)

以上是生活随笔為你收集整理的SHT1x/SHT7x数字温湿度传感器驱动编写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。