89c52rc單片機(jī)控制超聲波測(cè)距和讀取實(shí)時(shí)的溫濕度情況,按鍵控制切換注釋準(zhǔn)確。
完整程序:
整合版本加按鍵C源碼.zip
(61.35 KB, 售價(jià): 1 E幣)
2021-4-30 02:13 上傳
點(diǎn)擊文件名下載附件
售價(jià): 1 E幣 [記錄]
[ 購買]
單片機(jī)源程序部分如下: 完整源碼請(qǐng)查看附件
- #include <reg52.h> //51 的頭文件
- #include <intrins.h> //超聲波的固有函數(shù)頭文件
- #define uchar unsigned char //表示之后代碼中的“uchar”全部代表“unsigned char”
- #define uint unsigned int //定義uint為無符號(hào)整型。
- #define LCD_databus P2 //定義LCD的數(shù)據(jù)口為P2
- //全局變量定義
- unsigned int time; //聲明無符號(hào)類型 time
- unsigned int S,s_false; //聲明無符號(hào)類型
- unsigned long num1; //聲明無符號(hào)長整數(shù)
- bit flag;
- //12864液晶顯示定義
- uchar code sj1[]={"<<超聲波測(cè)距儀>>"};
- uchar code sj4[]={"當(dāng)前距離:"};
- uchar code sj5[]={"錯(cuò)誤 "};
- uchar dht_num=0; //用于while循環(huán)中計(jì)數(shù),超時(shí)則跳出循環(huán)
- uchar code table[]={"溫度:"};
- uchar code table1[]={"濕度:"};
- uchar code table2[]={"℃"};
- uchar dht_d1=0,dht_d2=0 ; //依次為濕度整數(shù)部分和濕度小數(shù)部
- uchar dht_t1=0,dht_t2=0 ; //依次為溫度整數(shù)部分和溫度小數(shù)部分
- uchar dht_j=0; //和校驗(yàn),可選擇是否使用,具體參照數(shù)據(jù)手
- uchar i,t11,t12,d11,d12;
- uchar t21,t22,d21,d22;
- //超聲波引腳定義
- sbit Trig =P1^0; //定義引腳
- sbit Echo =P1^1;
- //12864液晶引腳定義
- sbit RS=P0^7; //命令數(shù)據(jù)
- sbit RW=P0^6; //讀寫
- sbit EN =P0^5;
- sbit dht_dat=P1^2; //用哪個(gè)I/O口自選,注意不要用P2口
- //定義按鍵
- sbit key1 = P3^5;
- sbit key2 = P3^4;
- /*****************ms延時(shí)函數(shù)*********************************/
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- /*****************20us延時(shí)函數(shù)*********************************/
- void delay_20us()
- {
- uchar a;
- for(a=0;a<100;a++);
- }
- /*****************ms延時(shí)函數(shù)*********************************/
- void dh11delayms(uint xms)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- /*****************us延時(shí)函數(shù)*****************************/
- void delay_10us()
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- /*寫指令函數(shù)*/
- /*rs=l,rw=l,en=高脈沖,D0-D7=指令碼。*/
- void write_cmd(uchar cmd)
- {
- RS=0;
- RW=0;
- EN=0;
- LCD_databus=cmd;
- dh11delayms(5);
- EN=1;
- dh11delayms(5);
- EN=0;
- }
- /***************************寫顯示數(shù)據(jù)************************/
- /*rs=h,rw=l,*/
- void write_dat(uchar date)
- {
- RS=1;
- RW=0;
- EN=0;
- LCD_databus=date;
- dh11delayms(5);
- EN=1;
- dh11delayms(5);
- EN=0;
- }
- /*****************初始化************************/
- void DH11init()
- {
- EN=0;
- RW=0;
-
- write_cmd(0x30); //基本指令操作
- dh11delayms(5);
- write_cmd(0x0c); //顯示開,關(guān)光標(biāo)
- dh11delayms(5);
- write_cmd(0x06);
- dh11delayms(2);
- write_cmd(0x01); //清除顯示內(nèi)容
- dh11delayms(5);
-
-
- }
- void dht_init()
- {
- dh11delayms(1000); //DHT11上電前準(zhǔn)備時(shí)間,大概1s
- dht_dat=1; // //總線準(zhǔn)備
- }
- uchar read_date() //接收一個(gè)8位數(shù)據(jù),先高位后低位
- {
- uchar i,dat;
- for(i=0;i<8;i++) //也就是說程序是循環(huán)八次,把判斷有“1”輸出到dat中,然后輸出一個(gè)八位的數(shù)據(jù)。
- {
- dht_num=2;
- while((dht_dat==0)&&(dht_num++)); //dht_dat 數(shù)據(jù)線由DH11拉低準(zhǔn)備發(fā)送數(shù)據(jù)
- delay_10us();
- delay_10us();
- delay_10us();
- delay_10us();
- dat=dat<<1;
- if(dht_dat==1)
- {
- dht_num=2;
- dat=dat|0x01; //如果來自DQ的數(shù)據(jù)是高電平1,則把1放到dat的最低位
- while((dht_dat==1)&&(dht_num++));
- }
- }
- return dat;
- }
- void get_temp() //給DHT11一個(gè)開始信號(hào),然后讀取一次數(shù)據(jù),共五個(gè)8位字節(jié)
- {
- dht_dat=0;
- dh11delayms(25);
- dht_dat=1; //單片機(jī)給起始脈沖信號(hào)
- delay_10us();
- delay_10us();
- delay_10us();
- delay_10us();
- dht_dat=1; //稍作延時(shí),等待DHT11返回響應(yīng)(響應(yīng)為低電 平)
- if(dht_dat==0) //有響應(yīng)才接收數(shù)據(jù),否則不作處理
- {
- dht_num=2;
- while((dht_dat==0)&&(dht_num++));
- dht_num=2;
- while((dht_dat==1)&&(dht_num++));
- dht_d1=read_date();
- dht_d2=read_date();
- dht_t1=read_date();
- dht_t2=read_date();
- dht_j=read_date(); //一次讀出五個(gè)數(shù)據(jù)
- }
- dht_dat=1; //釋放總線
- dh11delayms(10);
- d11=dht_d1/10;
- d12=dht_d1%10;
- t11=dht_t1/10;
- t12=dht_t1%10;
-
- d21=dht_d2/10;
- d22=dht_d2%10;
- t21=dht_t2/10;
- t22=dht_t2%10;
-
- }
- //2864液晶寫命令函數(shù)
- void xmn(unsigned char com)
- {
- RS=0;
- LCD_databus=com;
- delay(5);
- EN=1;
- delay(5);
- EN=0;
- }
復(fù)制代碼
【必讀】版權(quán)免責(zé)聲明
1、本主題所有言論和內(nèi)容純屬會(huì)員個(gè)人意見,與本論壇立場無關(guān)。2、本站對(duì)所發(fā)內(nèi)容真實(shí)性、客觀性、可用性不做任何保證也不負(fù)任何責(zé)任,網(wǎng)友之間僅出于學(xué)習(xí)目的進(jìn)行交流。3、對(duì)提供的數(shù)字內(nèi)容不擁有任何權(quán)利,其版權(quán)歸原著者擁有。請(qǐng)勿將該數(shù)字內(nèi)容進(jìn)行商業(yè)交易、轉(zhuǎn)載等行為,該內(nèi)容只為學(xué)習(xí)所提供,使用后發(fā)生的一切問題與本站無關(guān)。 4、本網(wǎng)站不保證本站提供的下載資源的準(zhǔn)確性、安全性和完整性;同時(shí)本網(wǎng)站也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的損失或傷害。 5、本網(wǎng)站所有軟件和資料均為網(wǎng)友推薦收集整理而來,僅供學(xué)習(xí)用途使用,請(qǐng)務(wù)必下載后兩小時(shí)內(nèi)刪除,禁止商用。6、如有侵犯你版權(quán)的,請(qǐng)及時(shí)聯(lián)系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|