基于51單片機(jī)的HS1101濕度采集_第1頁(yè)
基于51單片機(jī)的HS1101濕度采集_第2頁(yè)
基于51單片機(jī)的HS1101濕度采集_第3頁(yè)
基于51單片機(jī)的HS1101濕度采集_第4頁(yè)
基于51單片機(jī)的HS1101濕度采集_第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、作者:李霈雯硬件電路程序#include#include#define uint unsigned int#define uchar unsigned char#define ulongint unsigned long intsbit D0=P10; /將D0位定義為P1.0引腳uint code tab211=0,10,20,30,40,50,60,70,80,90,100,7351,7224,7100,6976,6853,6728,6600,6468,6330,6186,6033;ulongint F=0;ulongint T0_count=0,T1_count=0;bit flag=0

2、;ulongint RH;/*函數(shù)功能:延時(shí)1ms(3j+2)*i=(333+2)10=1010(微秒),可以認(rèn)為是1毫秒*/void delay1ms() unsigned char i,j; for(i=0;i4;i+) for(j=0;j33;j+) ; /*函數(shù)功能:延時(shí)若干毫秒入口參數(shù):n*/void delaynms(unsigned char n)unsigned char i;for(i=0;in;i+)delay1ms();/*以下是對(duì)蜂鳴器模塊的操作程序*/sbit fmq1=P36; /*函數(shù)功能:蜂鳴器延時(shí)若干250us入口參數(shù):n*/void delay500us()

3、unsigned char j; for(j=0;j57;j+) /500us基準(zhǔn)延時(shí)程序 ; void beep()/產(chǎn)生1KHZ頻率聲音的函數(shù) unsigned int t; for(t=0;t1000;t+) fmq1=fmq1;delay500us(); fmq1=1;delaynms(1000);/*以下是對(duì)液晶模塊的操作程序*/sbit RS=P20; /寄存器選擇位,將RS位定義為P2.0引腳sbit RW=P21; /讀寫選擇位,將RW位定義為P2.1引腳sbit E=P22; /使能信號(hào)位,將E位定義為P2.2引腳sbit BF=P07; /忙碌標(biāo)志位,將BF位定義為P0.7

4、引腳/*函數(shù)功能:判斷液晶模塊的忙碌狀態(tài)返回值:result。result=1,忙碌;result=0,不忙*/bit BusyTest(void) bit result;RS=0; /根據(jù)規(guī)定,RS為低電平,RW為高電平時(shí),可以讀狀態(tài) RW=1; E=1; /E=1,才允許讀寫 _nop_(); /空操作 _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 result=BF; /將忙碌標(biāo)志電平賦給result E=0; /將E恢復(fù)低電平 return result; /*函數(shù)功能:將模式設(shè)置指令或顯示地址寫入液晶模塊入口參數(shù):dictate*/voi

5、d LcdWriteCommand(unsigned char dictate) while(BusyTest()=1); /如果忙就等待 RS=0; /根據(jù)規(guī)定,RS和R/W同時(shí)為低電平時(shí),可以寫入指令 RW=0; E=0; /E置低電平(根據(jù)表8-6,寫指令時(shí),E為高脈沖, / 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置0 _nop_(); _nop_(); /空操作兩個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 P0=dictate; /將數(shù)據(jù)送入P0口,即寫入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 E=1; /E置高電平 _n

6、op_(); _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 E=0; /當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令 /*函數(shù)功能:將數(shù)據(jù)(字符的標(biāo)準(zhǔn)ASCII碼)寫入液晶模塊入口參數(shù):y(為字符常量)*/void LcdWriteData(unsigned char y) while(BusyTest()=1); RS=1; /RS為高電平,RW為低電平時(shí),可以寫入數(shù)據(jù) RW=0; E=0; /E置低電平(根據(jù)表8-6,寫指令時(shí),E為高脈沖, / 就是讓E從0到1發(fā)生正跳變,所以應(yīng)先置0 P0=y; /將數(shù)據(jù)送入P0口,即將數(shù)據(jù)寫入液晶模塊

7、_nop_(); _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 E=1; /E置高電平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間 E=0; /當(dāng)E由高電平跳變成低電平時(shí),液晶模塊開始執(zhí)行命令/*函數(shù)功能:對(duì)LCD的顯示模式進(jìn)行初始化設(shè)置*/void LcdInitiate(void) delaynms(15); /延時(shí)15ms,首次寫指令時(shí)應(yīng)給LCD一段較長(zhǎng)的反應(yīng)時(shí)間 LcdWriteCommand(0x38); /顯示模式設(shè)置:162顯示,57點(diǎn)陣,8位數(shù)據(jù)接口delaynms(

8、5); /延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間 LcdWriteCommand(0x38);delaynms(5); /延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間LcdWriteCommand(0x38); /連續(xù)三次,確保初始化成功delaynms(5); LcdWriteCommand(0x08); /顯示關(guān)閉delaynms(5); /延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間LcdWriteCommand(0x0c); /顯示模式設(shè)置:顯示開,無光標(biāo),光標(biāo)不閃爍delaynms(5); /延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間LcdWriteCommand(0x06); /顯示模式設(shè)置:光標(biāo)右移,字符不移delaynms(

9、5); /延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間LcdWriteCommand(0x01); /清屏幕指令,將以前的顯示內(nèi)容清除delaynms(5); /延時(shí)5ms,給硬件一點(diǎn)反應(yīng)時(shí)間 /*函數(shù)名稱:Disp1Char功 能:在某個(gè)位置顯示一個(gè)字符參 數(shù):x-位置的列坐標(biāo) y-位置的行坐標(biāo) F-顯示的字符數(shù)據(jù)返回值 :無*/void Disp1Char(unsigned char x,unsigned char y,unsigned char N) if (y = 0) LcdWriteCommand(0x80 + x); /第一行顯示 else LcdWriteCommand(0xC0 + x);

10、 /第二行顯示 LcdWriteData(N); /*函數(shù)名稱:DispNchar功 能:讓液晶從某個(gè)位置起連續(xù)顯示N個(gè)字符參 數(shù):x-位置的列坐標(biāo) y-位置的行坐標(biāo) n-字符個(gè)數(shù) ptr-指向字符存放位置的指針返回值 :無*/void DispNChar(uchar x,uchar y, uchar n,uchar *ptr) uchar i; for (i=0;in;i+) Disp1Char(x+,y,ptri); if (x = 0x0f) x = 0; y = 1; /*函數(shù)名稱:DispStr功 能:讓液晶從某個(gè)位置起連續(xù)顯示一個(gè)字符串參 數(shù):x-位置的列坐標(biāo) y-位置的行坐標(biāo) p

11、tr-指向字符串存放位置的指針返回值 :無*/void DispStr(uchar x,uchar y,uchar *ptr) uchar *temp; uchar i,n = 0; temp = ptr; while(*ptr+ != 0) n+; /計(jì)算字符串有效字符的個(gè)數(shù) for (i=0;in;i+) Disp1Char(x+,y,tempi); if (x = 0x0f) x = 0; y = 1; /*函數(shù)名稱:Welcome()功 能:歡迎界面參 數(shù):返回值 :無*/void Welcome()DispStr(0,0,Welcome);DispStr(0,1,Waiting.);

12、/*函數(shù)名稱:Disp_RH功 能:顯示最終結(jié)果參 數(shù):float f_data返回值 :無*/void Disp_RH(ulongint f_data) unsigned char lcd_table3; ulongint aa; aa=f_data; lcd_table0= aa/100; lcd_table1= aa%100/10; lcd_table2= aa%10; DispStr(9,0,RH=); Disp1Char(12,0,(lcd_table0+0x30); Disp1Char(13,0,(lcd_table1+0x30); Disp1Char(14,0,(lcd_tabl

13、e2+0x30); Disp1Char(15,0,(%); /加上0x30以便直接得到相應(yīng)的ASCII碼去顯示void Disp_F(ulongint f_data) unsigned char lcd_table4; ulongint aa; aa=f_data; lcd_table0= aa/1000; lcd_table1= aa%1000/100; lcd_table2= aa%100/10; lcd_table3= aa%10; DispStr(0,0,F=); Disp1Char(2,0,(lcd_table0+0x30); Disp1Char(3,0,(lcd_table1+0x

14、30); Disp1Char(4,0,(lcd_table2+0x30); Disp1Char(5,0,(lcd_table3+0x30); Disp1Char(6,0,(H); Disp1Char(7,0,(Z); /加上0x30以便直接得到相應(yīng)的ASCII碼去顯示/*函數(shù)名稱:Timer_Iint()功 能:定時(shí)器T0,T1初始化參 數(shù):無返回值 :無*/void Timer_Iint()TMOD|=0x51;/T1計(jì)數(shù),T0定時(shí),方式1:16位計(jì)數(shù)TH0=(65536-50000)/256; /定時(shí)器T0的高8位賦初值TL0=(65536-50000)%256; /定時(shí)器T0的低8位賦初

15、值 定時(shí)50msTH1=0x00;/計(jì)數(shù)初值,0TL1=0x00;EA=1; /開總中斷ET0=1; /定時(shí)器T0中斷允許 ET1=1; /計(jì)數(shù)器T1中斷允許TR0=1;TR1=1;/開始計(jì)數(shù)/*函數(shù)名稱:HS1101(void)功 能:查表等差法F-RH轉(zhuǎn)換 將F-RH關(guān)系表直接作為二維數(shù)組,查表后確認(rèn)落在某一RH區(qū)域參 數(shù):返回值 :無*/void HS1101() unsigned char i; if(flag=1) flag=0;F=T1_count*65536+TH1*256+TL1; /存儲(chǔ)頻率值LcdWriteCommand(0x01); /清屏幕指令,將以前的顯示內(nèi)容清除Di

16、sp_F(F);/*查表法 for(i=0;i=10;i+) if(Ftab1i+1) RH=tab0i+(tab1i-F)/(tab0i+1-tab0i)/10); break; */* 線性方程法if(F=6033 & F6033)RH=(588-0.08*F)+0.5;else RH=(586-0.08*F)+0.5;*/if(F=6033)if(F7224)RH=(7351-F)/12.7)+0.5;else if(F6600)RH=(10+(7224-F)/12.4)+0.5;else if(F6186)RH=(60+(6600-F)/13.8)+0.5;else RH=(90+(6

17、186-F)/15.3)+0.5; Disp_RH(RH); /顯示結(jié)果if(RH80) /當(dāng)濕度大于,P1.0輸出高電平 beep(); DispStr(1,1,RH is high); delaynms(20); if(RH30) /當(dāng)濕度大于,P1.0輸出高電平 beep(); DispStr(1,1,RH is low); delaynms(20); T0_count=0;TH0=(65536-50000)/256; /定時(shí)器T0的高8位賦初值TL0=(65536-50000)%256; /定時(shí)器T0的高8位賦初值T1_count=0;TH1=0x00;TL1=0x00;TR0=1;TR1=1;/開始計(jì)數(shù) void main() D0=0;Timer_Iint();LcdInitiate();Welcome();while(1) HS1101();/*函數(shù)功能:計(jì)數(shù)器T1的中斷服務(wù)程序*/void Time1(void) interrupt 3 /“interrupt”聲明函數(shù)為中斷服務(wù)函數(shù)TH1=0x00;TL1=0x00; /

溫馨提示

  • 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)論