|
0.png (16.09 KB, 下載次數(shù): 82)
下載附件
2016-8-15 16:46 上傳
軟件模擬HC_SRO4超聲模塊
作者:五號智能
需求:需要主控制單片機啟動的第一時間進行初始化,初始化代碼
trig=0;
echo=1;
使用方法:你只需要提供一個10uS以上脈沖觸發(fā)信號。
此程序便按arr數(shù)組里標的時間,讓echo引腳發(fā)出不同時長的高電平.來模擬HC_SR04
- /*
- 軟件模擬HC_SRO4超聲模塊
- 作者:五號智能
- 需求:需要主控制單片機啟動的第一時間進行初始化,初始化代碼
- trig=0;
- echo=1;
-
- 使用方法:你只需要提供一個10uS以上脈沖觸發(fā)信號。
- 此程序便按arr數(shù)組里標的時間,讓echo引腳發(fā)出不同時長的高電平.來模擬HC_SR04
- 功能:被觸發(fā)后,模擬超聲模塊輸出.輸出5次,每次間隔5秒,
- 距離從長到短,使用著可以自行設(shè)置數(shù)組arr來模擬
- HC_SR04說明書:
- 基本工作原理:
- (1)采用IO口TRIG觸發(fā)測距,給最少10us的高電平信呈。
- (2)模塊自動發(fā)送8個40khz的方波,自動檢測是否有信號返回;
- (3)有信號返回,通過IO口ECHO輸出一個高電平,
- 高電平持續(xù)的時間就是超聲波從發(fā)射到返回的時間。
- 測試距離=(高電平時間*聲速(340M/S))/2;
- 每次觸發(fā)高電平必須15us以上
- */
- #include<reg52.h>
- #include <intrins.h>
- sbit trig=P3^2; //模擬HC_SR04的兩個引腳定義,可自行更改
- sbit echo=P2^1;
- unsigned int conter=0;
- unsigned int ec=0;
- unsigned int arr[]={588,400,350,200,50,1}; //此處為模擬發(fā)出的超聲時長.可自行設(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; //啟動定時器0
-
- while(1)
- {
- if(flag)
- {
- a=arr[ec];
- flag=0;
- }
-
- if(conter>1) //如果高電平時間超過2次計時自增,大約10us
- {
- echo=1; //拉高echo電平
- if(ec<6) //判斷數(shù)組下標是否溢出
- {
- daley_10us(a); //循環(huán)設(shè)置拉高電平的時間
- }
- else
- {
- ec=0; //數(shù)組溢出電標歸0
- daley_10us(a); //拉高電平的延時.
- }
-
- echo=0; //延時結(jié)束時,拉低電平
- daley_10us(1); //拉高電平的延時.
- conter=0; //觸發(fā)信號標志歸0
-
- }
- if(trig) //檢測高電平觸發(fā)信號
- {
- conter++; //對高電平時間進行計時
- }
-
- }
-
-
- }
- void delaytime() interrupt 1
- {
- TH0=(65536-50000)/256;
-
- TL0=(65536-50000)%256;
- if(100==timer)
- {
- timer=0;
- ec++; //數(shù)組下標自增
- flag=1;
- }
- timer++;
-
- }
復(fù)制代碼
|
-
0.png
(65.89 KB, 下載次數(shù): 104)
下載附件
2016-8-15 16:47 上傳
-
-
51單片機模仿HC_SR04超聲模塊.rar
2016-8-15 16:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
52.45 KB, 下載次數(shù): 34, 下載積分: 黑幣 -5
|