|
|
說(shuō)明: 本貼仿真和源碼是使用以下貼子修改而來(lái)
單片機(jī)超聲波測(cè)距Proteus仿真與源代碼
51hei截圖20201028204210544.jpg (159.69 KB, 下載次數(shù): 52)
下載附件
2020-10-28 20:42 上傳
在原基礎(chǔ)上做了二個(gè)版本, 一個(gè)是精簡(jiǎn)版本, 方便理解超聲波的相關(guān)代碼
另一個(gè)是自己拓展的思路
無(wú)標(biāo)題.png (10.9 KB, 下載次數(shù): 51)
下載附件
2020-10-28 20:44 上傳
- /*
- 注: 以下代碼真實(shí)環(huán)璄下,STC89C52最小單片機(jī)上測(cè)試成功
- 使用模塊:
- 1.最小單片機(jī)STC89C52
- 2.超聲波HC-SR04
- 3.L298N調(diào)速模塊+小風(fēng)扇
- 進(jìn)階功能(利用超聲波檢測(cè)是否有人存在, 自動(dòng)啟動(dòng)/停止小風(fēng)扇):
- 1.超聲波對(duì)著人坐的位置(根據(jù)實(shí)際距離自行調(diào)整BJZ的值)
- 2.當(dāng)檢測(cè)到有人時(shí)(S<=BJZ 且 Someone>=5), FengShan置高電平(電扇啟動(dòng)), 并進(jìn)入循環(huán)檢測(cè)
- 3.當(dāng)檢測(cè)到無(wú)人時(shí)(Unmanned>=10), FengShan置低電平(電扇停止), 并進(jìn)入循環(huán)檢測(cè)
- 4.當(dāng)無(wú)人時(shí), Unmanned變量+1, Someone變量=0
- 5.當(dāng)有人時(shí)Someone變量+1, Unmanned變量=0
- */
- /*
- 大家可以自行拓展更多實(shí)用功能, 如:
- 小便池自動(dòng)沖水器
- 放門(mén)口的來(lái)客"歡迎光臨"等等
- */
- //加載配置文件
- #include <reg52.H>
- #include <intrins.h>
- //類(lèi)型轉(zhuǎn)義
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- /**********************************************************************************************************/
- //超聲波接口
- sbit RX = P3^2; //接超聲波的echo引腳
- sbit TX = P3^3; //接超聲波的trig引腳
- //用蜂鳴器或Led二極管模擬測(cè)試
- sbit FengShan= P2^0; //負(fù)極接P2^0,正極接VCC(蜂鳴器最好是用三極管放大)
- //變量聲明
- uint time=0;
- uint timer=0;
- uchar posit=0;
- ulong S=0; //超聲波檢查距離CM
- ulong BJZ=50; //報(bào)警距離CM
- uint i; //循環(huán)記次數(shù)
- uint Unmanned=0; //檢測(cè)到無(wú)人的次數(shù)
- uint Someone=0; //檢測(cè)到有人的次數(shù)
- bit Flag_CSB=0; //超聲波的中斷溢出標(biāo)志
- /**********************************************************************************************************/
- //************ 計(jì)算 ************
- void Conut(void)
- {
- time=TH0*256+TL0; //讀出T0的計(jì)時(shí)數(shù)值
- TH0=0;TL0=0; //清空計(jì)時(shí)器
- S=(time*1.7)/100; //算出來(lái)是CM
- //聲音的速度是340m/s,時(shí)間的單位是us,計(jì)算到秒需要將時(shí)間數(shù)據(jù)/1000000,
- //長(zhǎng)度=速度*時(shí)間,340*time/1000000,長(zhǎng)度數(shù)據(jù)單位是m轉(zhuǎn)換成cm需要乘以100得到340*time/10000,
- //小數(shù)點(diǎn)都向左移兩位得到3.4*time/100,因?yàn)槌暡ㄊ峭盗耍栽俪?,得到距離數(shù)據(jù)(time*1.7)/100
-
- if((S>=700) || Flag_CSB==1) //超出測(cè)量范圍
- {
- FengShan=1; //停止風(fēng)扇
- Flag_CSB=0; //中斷溢出標(biāo)志
- }
- else
- {
- //距離小于報(bào)警值
- if(S<=BJZ)
- {
- Someone+=1; //有人時(shí)+1
- Unmanned=0; //無(wú)人時(shí)置0
- if (Someone>=5) //為了判斷準(zhǔn)確, 連續(xù)檢測(cè)5次有人才會(huì)啟動(dòng)風(fēng)扇
- {
- FengShan=0; //啟動(dòng)風(fēng)扇
- Someone=0;
- }
- }
- else //大于
- {
- Unmanned+=1; //無(wú)人時(shí)+1
- Someone=0; //有人時(shí)置0
- if (Unmanned>=10) //為了判斷準(zhǔn)確, 連續(xù)檢測(cè)10次無(wú)人才會(huì)停止風(fēng)扇
- {
- FengShan=1; //停止風(fēng)扇
- Unmanned=0;
- }
- }
- }
- }
- /**********************************************************************************************************/
- /***********超聲波的定時(shí)器0初始化***********/
- void CSB_Timer0(void)
- {
- TMOD=0x11; //設(shè)T0為方式1
- TH0=0;
- TL0=0;
- TH1=0xf8; //2MS定時(shí)
- TL1=0x30;
- ET0=1; //允許T0中斷
- ET1=1; //允許T1中斷
- TR1=1; //開(kāi)啟定時(shí)器
- EA=1; //開(kāi)啟總中斷
- }
- //************ 主函數(shù) ************
- void main(void)
- {
- CSB_Timer0();
- FengShan=0; //啟動(dòng)風(fēng)扇
- while(1)
- {
- while(!RX); //當(dāng)上次接收完波后,RX引腳是低電平,取反就是1,此while成立,反復(fù)判斷RX狀態(tài)。當(dāng)RX沒(méi)有接收到返回波時(shí)是高電平,取反就是0,此while不成立,跳出
- TR0=1; //開(kāi)啟計(jì)數(shù)
- while(RX); //當(dāng)RX沒(méi)有接收到返回波,此while成立,程序停在這里一直判斷RX狀態(tài)。當(dāng)RX接收到返回波,RX引腳變?yōu)榈碗娖剑藈hile不成立,跳出
- TR0=0; //停止計(jì)數(shù)
- Conut(); //計(jì)算
- }
- }
- /**********************************************************************************************************/
- //************ 定時(shí)器0處理(超聲波) ************
- void dsq0() interrupt 1 //T0中斷用來(lái)計(jì)數(shù)器溢出,超過(guò)測(cè)距范圍
- {
- Flag_CSB=1; //中斷溢出標(biāo)志
- }
- //************ 定時(shí)器1(超聲波) ************
- void dsq1() interrupt 3 //T1中斷用于計(jì)800MS啟動(dòng)模塊
- {
- TH1=0xf8;
- TL1=0x30; //定時(shí)2ms
- timer++; //變量加
- if(timer>=400) //400次就是800ms
- {
- timer=0;
- TX=1; //800MS 啟動(dòng)一次模塊
- for(i=0;i<21;i++)
- {
- _nop_();
- }
- TX=0;
- }
- }
復(fù)制代碼
全部資料51hei下載地址:
51超聲波學(xué)習(xí).zip
(94.74 KB, 下載次數(shù): 26)
2020-10-28 20:44 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|