AT89C52與SHT10和1602液晶測(cè)溫濕度的程序_第1頁(yè)
AT89C52與SHT10和1602液晶測(cè)溫濕度的程序_第2頁(yè)
AT89C52與SHT10和1602液晶測(cè)溫濕度的程序_第3頁(yè)
AT89C52與SHT10和1602液晶測(cè)溫濕度的程序_第4頁(yè)
AT89C52與SHT10和1602液晶測(cè)溫濕度的程序_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、/*端口定義*P1.0SCK(SHT10)P1.1DATA(SHT10)P0P2.0P2.1DB0 DB7 (LCD1602)RSRWP2.2E(LCD1602)(LCD1602)(LCD1602)*/#include<reg52.h>#include<intrins.h>#include<stdio.h>#include<string.h>#include<absacc.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedint/按鍵設(shè)置sbitTEM

2、_UP=P1A2;sbitTEM_DOWN=Pi3;sbitHUM_UP=P1A4;sbitHUM_DOWN=P1A5;sbitSHEZHI_ENTER=P1A6;sbitSHEZHI_EXIT=P1A7;floatf_tem_up_value=50.0;floatf_tem_down_value=-30.0;floatf_hum_up_value=10.0;floatf_hum_down_value=100.0;/1602液晶端口定義*sbitLcdRs=P2A0;sbitLcdRw=P2A1;sbitLcdEn=P2A2;sbitACC0=ACCA0;sbitACC7=ACCA7;ucha

3、rstr7;/向LCD入命*0/ Command1/ Data0x01/清屏0x02/光標(biāo)返回原點(diǎn)#defineLCD_COMMAND#defineLCD_DATA#defineLCD_CLEAR_SCREEN#defineLCD_HOMING/設(shè)置顯示模式*#defineLCD_SHOW0x04/顯示開#defineLCD_HIDE0x00/口二¥顯示關(guān)#defineLCD_CURSOR0x02/顯示光標(biāo)#defineLCD_NO_CURSOR0x00/無光標(biāo)#defineLCD_FLASH0x01/光標(biāo)閃動(dòng)#defineLCD_NO_FLASH0x00/光標(biāo)不閃動(dòng)#defineL

4、CD_AC_UP0x02#defineLCD_AC_DOWN0x00/default#defineLCD_MOVE0x01/畫面可平移#defineLCD_NO_MOVE0x00/default/設(shè)置輸入模式*unsignedcharLCD_Wait(void);voidLCD_Write(bitstyle,unsignedcharinput);/*1602液晶顯示部分子程序*/voiddelay(uintz)uintx,y;for(x=z;x>0;x-)for(y=110;y>0;y-);voidLCD_Write(bitstyle,unsignedcharinput)LcdRs

5、=style;P0=input;delay(5);LcdEn=1;delay(5);LcdEn=0;voidLCD_SetDisplay(unsignedcharDisplayMode)LCD_Write(LCD_COMMAND,0x08|DisplayMode);voidLCD_SetInput(unsignedcharInputMode)LCD_Write(LCD_COMMAND,0x04|InputMode);/ 初始化 LCD*voidLCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38);/8位數(shù)據(jù)端口,2行顯示,5*7點(diǎn)陣LCD_Write

6、(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);/開啟顯示,無光標(biāo)LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);清屏/LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);/AC遞增,畫面不動(dòng)voidGotoXY(unsignedcharx,unsignedchary)/ 液晶字符輸入的位置*if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);/將字符輸出到液晶顯示vo

7、idPrint(unsignedchar*str)while(*str!='0')LCD_Write(LCD_DATA,*str);str+;voidzhuanhuan(floata)/浮點(diǎn)數(shù)轉(zhuǎn)換成字符串函數(shù)memset(str,0,sizeof(str);sprintf(str,"%f",a);voidwelcome()LCD_Initial();GotoXY(0,0);Print("Welcome!");GotoXY(0,1);Print("Codeofsht10");delay(200);/*;模塊名稱:dela

8、y_n10us();功能:延時(shí)函數(shù),延時(shí)約n個(gè)10us較精確的延時(shí)函數(shù),"_nop_()"延時(shí)1us12M!l振;*/voiddelay_n10us(uintn)/延時(shí)n個(gè)10us12Mll振uinti;for(i=n;i>0;i-)_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/*部分LCD1602 設(shè) 置END*/*第二部分DHT90 設(shè) 置START*sbit SCK = P1A0;/sbit DATA = Pil; /定義通訊時(shí)鐘端口定義通訊數(shù)據(jù)端口typedef union unsigned int i; /

9、 float f; value;定義了兩個(gè)共用體enumTEMP,HUMI;/TEMP=0,HUMI=1用于判斷是否結(jié)束通訊結(jié)束數(shù)據(jù)傳輸#definenoACK0/#defineACK1/adrcommandr/w#defineSTATUS_REG_W0x06/00000110#defineSTATUS_REG_R0x07/00000111#defineMEASURE_TEMP0x03/00000011#defineMEASURE_HUMI0x05/00000101#defineRESET0x1e/00011110/*定義函數(shù)*/voids_transstart(void);/啟動(dòng)傳輸函數(shù)vo

10、ids_connectionreset(void);/連接復(fù)位函數(shù)chars_write_byte(unsignedcharvalue);/DHT90寫函數(shù)chars_read_byte(unsignedcharack);/DHT90讀函數(shù)chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode);/測(cè)量溫濕度函數(shù)voidcalc_dht90(float*p_humidity,float*p_temperature);/溫濕度補(bǔ)償/*;模塊名稱:s_transstart();功能:啟動(dòng)傳輸函數(shù);*/v

11、oids_transstart(void)/generatesatransmissionstart/DATA:|/SCK:_|_|DATA=1;SCK=0;/Initialstate_nop_();SCK=1;_nop_();DATA=0;_nop_();SCK=0;_nop_();_nop_();_nop_();SCK=1;_nop_();DATA=1;_nop_();SCK=0;/*;模塊名稱:s_connectionreset();功能:連接復(fù)位函數(shù);*/voids_connectionreset(void)/communicationreset:DATA-line=1andatleas

12、t9SCKcyclesfollowedbytransstart/DATA:|/SCK:_|_|_|_|_|_|_|_|_|_|unsigned char i;DATA=1; SCK=0; for(i=0;i<9;i+) SCK=1;SCK=0; s_transstart();/Initial state/9 SCK cycles/transmission start/*;模塊名稱:s_write_byte();功能:SHT10寫函數(shù);*/chars_write_byte(unsignedcharvalue)/writesabyteontheSensibusandcheckstheackn

13、owledgeunsignedchari,error=0;for(i=0x80;i>0;i/=2)/shiftbitformaskingif(i&value)DATA=1;/maskingvaluewithi,writetoSENSI-BUSelseDATA=0;SCK=1;/clkforSENSI-BUS_nop_();_nop_();_nop_();/pulswithapprox.3usSCK=0;DATA=1;/releaseDATA-lineSCK=1;/clk#9forackerror=DATA;/checkack(DATAwillbepulleddownbyDHT90

14、),DATA在第9個(gè)上升沿將被DHT90自動(dòng)下拉為低電平。_nop_();_nop_();_nop_();SCK=0;DATA=1;/releaseDATA-linereturnerror;/error=1incaseofnoacknowledge/返回:0成功,1失敗/*;模塊名稱:s_read_byte();功能:SHT10讀函數(shù);*/chars_read_byte(unsignedcharack)/readsabyteformtheSensibusandgivesanacknowledgeincaseof"ack=1"unsignedchari,val=0;DATA=

15、1;/releaseDATA-linefor(i=0x80;i>0;i/=2)/shiftbitformaskingSCK=1;/clkforSENSI-BUSif(DATA)val=(val|i);/readbit_nop_();_nop_();_nop_();/pulswithapprox.3usSCK=0;if(ack=1)DATA=0;/incaseof"ack=1"pulldownDATA-LineelseDATA=1;/如果是校驗(yàn)(ack=0),讀取完后結(jié)束通訊_nop_();_nop_();_nop_();/pulswithapprox.3usSCK=1

16、;/clk#9forack_nop_();_nop_();_nop_();/pulswithapprox.3usSCK=0;_nop_();_nop_();_nop_();/pulswithapprox.3usDATA=1;/releaseDATA-linereturnval;/*;模塊名稱:s_measure();功能 : 測(cè)量溫濕度函數(shù);*/chars_measure(unsignedchar*p_value,unsignedchar*p_checksum,unsignedcharmode)/makesameasurement(humidity/temperature)withchecks

17、umunsignederror=0;unsignedinti;s_transstart();/transmissionstartswitch(mode)/sendcommandtosensorcaseTEMP:error+=s_write_byte(MEASURE_TEMP);break;caseHUMI:error+=s_write_byte(MEASURE_HUMI);break;default:break;for(i=0;i<65535;i+)if(DATA=0)break;/waituntilsensorhasfinishedthemeasurementif(DATA)error

18、+=1;/ortimeout(2sec.)isreached* (p_value)=s_read_byte(ACK);/readthefirstbyte(MSB)* (p_value+1)=s_read_byte(ACK);/readthesecondbyte(LSB)* p_checksum=s_read_byte(noACK);/readchecksumreturnerror;/*;模塊名稱:calc_dht90();功能:溫濕度補(bǔ)償函數(shù);*/voidcalc_dht90(float*p_humidity,float*p_temperature)/calculatestemperature

19、Candhumidity%RH/input:humiTicks(12bit)/tempTicks(14bit)/output:humi%RH/tempCconstfloatC1=-4.0;/for12BitconstfloatC2=+0.0405;/for12BitconstfloatC3=-0.0000028;/for12BitconstfloatT1=+0.01;/for14Bit5VconstfloatT2=+0.00008;/for14Bit5Vfloat rh=*p_humidity;float t=*p_temperature;/rh:HumidityTicks12Bit/t:Te

20、mperatureTicks14Bitfloatrh_lin;/rh_lin:Humiditylinearfloatrh_true;/rh_true:Temperaturecompensatedhumidityfloatt_C;/t_C:TemperatureCt_C=t*0.01-40;/calc.temperaturefromtickstoCrh_lin=C3*rh*rh+C2*rh+C1;/calc.humidityfromticksto%RHrh_true=(t_C-25)*(T1+T2*rh)+rh_lin;/calc.temperaturecompensatedhumidity%R

21、Hif(rh_true>100)rh_true=100;/cutifthevalueisoutsideofif(rh_true<0.1)rh_true=0.1;/thephysicalpossiblerange*p_temperature=t_C;/returntemperatureC*p_humidity=rh_true;/returnhumidity%RH/*主函數(shù)*voidmain(void)valuehumi_val,temp_val;unsignedcharerror,checksum;LcdRw=0;s_connectionreset();welcome();/顯示歡迎畫面delay(2000);LCD_Initial();while(1)/shezhi();error=0;error+=s_measure(unsigned/m

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論