|
軟件模擬HC_SRO4超聲模塊
作者:五號(hào)智能
需求:需要主控制單片機(jī)啟動(dòng)的第一時(shí)間進(jìn)行初始化,初始化代碼
trig=0;
echo=1;
使用方法:你只需要提供一個(gè)10uS以上脈沖觸發(fā)信號(hào)。
此程序便按arr數(shù)組里標(biāo)的時(shí)間,讓echo引腳發(fā)出不同時(shí)長(zhǎng)的高電平.來(lái)模擬HC_SR04
- /*
- 軟件模擬HC_SRO4超聲模塊
- 作者:五號(hào)智能
- 需求:需要主控制單片機(jī)啟動(dòng)的第一時(shí)間進(jìn)行初始化,初始化代碼
- trig=0;
- echo=1;
-
- 使用方法:你只需要提供一個(gè)10uS以上脈沖觸發(fā)信號(hào)。
- 此程序便按arr數(shù)組里標(biāo)的時(shí)間,讓echo引腳發(fā)出不同時(shí)長(zhǎng)的高電平.來(lái)模擬HC_SR04
- 功能:被觸發(fā)后,模擬超聲模塊輸出.輸出5次,每次間隔5秒,
- 距離從長(zhǎng)到短,使用著可以自行設(shè)置數(shù)組arr來(lái)模擬
- HC_SR04說(shuō)明書(shū):
- 基本工作原理:
- (1)采用IO口TRIG觸發(fā)測(cè)距,給最少10us的高電平信呈。
- (2)模塊自動(dòng)發(fā)送8個(gè)40khz的方波,自動(dòng)檢測(cè)是否有信號(hào)返回;
- (3)有信號(hào)返回,通過(guò)IO口ECHO輸出一個(gè)高電平,
- 高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。
- 測(cè)試距離=(高電平時(shí)間*聲速(340M/S))/2;
- 每次觸發(fā)高電平必須15us以上
- */
- #include<reg52.h>
- #include <intrins.h>
- sbit trig=P3^2; //模擬HC_SR04的兩個(gè)引腳定義,可自行更改
- sbit echo=P2^1;
- unsigned int conter=0;
- unsigned int ec=0;
- unsigned int arr[]={588,400,350,200,50,1}; //此處為模擬發(fā)出的超聲時(shí)長(zhǎng).可自行設(shè)置
- unsigned int timer=0;
- unsigned int flag=0;
- void daley_10us(unsigned int n)//12M
- {
- _nop_();
- _nop_();
- while(n--);
- }
- void main ()
- {
- unsigned int a=0;
-
- TMOD=0x01;
- TH0=(65536-50000)/256;
-
- TL0=(65536-50000)%256;
-
- ET0=1;
- EA=1;
- echo=0; //初始化echo電平為低
- while(trig); //等待初始化指令
-
- echo=0;
- TR0=1; //啟動(dòng)定時(shí)器0
-
- while(1)
- {
- if(flag)
- {
- a=arr[ec];
- flag=0;
- }
-
- if(conter>1) //如果高電平時(shí)間超過(guò)2次計(jì)時(shí)自增,大約10us
- {
- echo=1; //拉高echo電平
- if(ec<6) //判斷數(shù)組下標(biāo)是否溢出
- {
- daley_10us(a); //循環(huán)設(shè)置拉高電平的時(shí)間
- }
- else
- {
- ec=0; //數(shù)組溢出電標(biāo)歸0
- daley_10us(a); //拉高電平的延時(shí).
- }
-
- echo=0; //延時(shí)結(jié)束時(shí),拉低電平
- daley_10us(1); //拉高電平的延時(shí).
- conter=0; //觸發(fā)信號(hào)標(biāo)志歸0
-
- }
- if(trig) //檢測(cè)高電平觸發(fā)信號(hào)
- {
- conter++; //對(duì)高電平時(shí)間進(jìn)行計(jì)時(shí)
- }
-
- }
-
-
- }
- void delaytime() interrupt 1
- {
- TH0=(65536-50000)/256;
-
- TL0=(65536-50000)%256;
- if(100==timer)
- {
- timer=0;
- ec++; //數(shù)組下標(biāo)自增
- flag=1;
- }
- timer++;
-
- }
復(fù)制代碼
|
|