標(biāo)題:
好用的單片機(jī)超聲波測距裝置程序
[打印本頁]
作者:
李炯果皮你
時間:
2021-6-3 09:35
標(biāo)題:
好用的單片機(jī)超聲波測距裝置程序
上個學(xué)期做得一個超聲波測距裝置,運行無錯誤,需要的師兄歡迎下載使用
51hei截圖20210113104201.png
(145.09 KB, 下載次數(shù): 69)
下載附件
2021-6-3 09:32 上傳
單片機(jī)源程序如下:
/*
實驗說明:
根據(jù)自己使用的LCD1602是否帶有轉(zhuǎn)接板,如果帶有轉(zhuǎn)接板的即為4位,需在LCD.H頭文件中
將宏#define LCD1602_4PINS打開,我們這里使用的LCD1602是8位,所以默認(rèn)將該宏注釋。
實驗接線:
LCD1602液晶模塊-->單片機(jī)管腳
參考LCD1602液晶顯示實驗接線(開發(fā)攻略內(nèi)在對應(yīng)的實驗章節(jié)內(nèi)實驗現(xiàn)象有接線說明)
超聲波模塊-->單片機(jī)管腳
TRIG-->P21
ECHO-->P20
實驗現(xiàn)象:
LCD1602上顯示超聲波檢測的距離,單位mm
*/
#include <reg52.h>
#include<intrins.h>
#include"lcd.h"
sbit Trig = P2^3;
sbit Echo = P2^4;
sbit beep=P1^4;
unsigned char PuZh[]=" Pechin Science ";
unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
static unsigned char DisNum = 0; //顯示用指針
unsigned int time=0;
unsigned long S=0;
bit flag =0;
unsigned char disbuff[4] ={ 0,0,0,0,};
/*******************************************************************************
* 函 數(shù) 名 : main
* 函數(shù)功能 : 主函數(shù)
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.7)/100; //算出來是CM
if((S>=500)||flag==1) //超出測量范圍顯示“-”
{
flag=0;
DisplayOneChar(0, 1, ASCII[11]);
DisplayOneChar(1, 1, ASCII[10]); //顯示點
DisplayOneChar(2, 1, ASCII[11]);
DisplayOneChar(3, 1, ASCII[11]);
DisplayOneChar(4, 1, ASCII[12]); //顯示M
}
else
{
disbuff[0]=S%1000/100;
disbuff[1]=S%1000%100/10;
disbuff[2]=S%1000%10 %10;
DisplayOneChar(0, 1, ASCII[disbuff[0]]);
DisplayOneChar(1, 1, ASCII[10]); //顯示點
DisplayOneChar(2, 1, ASCII[disbuff[1]]);
DisplayOneChar(3, 1, ASCII[disbuff[2]]);
DisplayOneChar(4, 1, ASCII[12]); //顯示M
}
}
void zd0() interrupt 1 //T0中斷用來計數(shù)器溢出,超過測距范圍
{
flag=1; //中斷溢出標(biāo)志
}
void StartModule() //啟動模塊
{
Trig=1; //啟動一次模塊
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Trig=0;
}
void delayms(unsigned int ms)
{
uint i,j;
for(i=ms;i>0;i--);
for(j=114;j>0;j--);
}
void delay10us(void)
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=2;a>0;a--);
}
void main(void)
{
TMOD=0x01; //設(shè)T0為方式1,GATE=1;
TH0=0;
TL0=0;
ET0=1; //允許T0中斷
EA=1; //開啟總中斷
LcdInit();
LcdShowStr(0,0,PuZh);
while(1)
{
StartModule();
while(!Echo); //當(dāng)RX為零時等待
TR0=1; //開啟計數(shù)
while(Echo); //當(dāng)RX為1計數(shù)并等待
TR0=0; //關(guān)閉計數(shù)
Conut(); //計算
delayms(80);
/*******************************************************/
beep=~beep;
if(S>=300)
{
beep=0;
delay10us();
}
else
{
if((S<300)&&(S>50))
{
beep=1;
delayms(8000);
beep=0;
delayms(2000);
}
else
{
if((S>=0)&&(S<=50))
{
beep=1;
delayms(1000000);
beep=0;
delayms(500000);
}
}
}
/*************************************************************/
}
}
復(fù)制代碼
以上代碼51hei提供下載:
程序.zip
(69.14 KB, 下載次數(shù): 10)
2021-6-3 09:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1