STC89C52RC單片機(jī)超聲波測距程序
網(wǎng)絡(luò)上集的STC89C52RC單片機(jī)超聲波測距程序及電子制作實(shí)物,使用單片機(jī)最小系統(tǒng)進(jìn)行試驗(yàn),超聲波部分使用HC-SR04模塊,測量范圍:4-300cm,實(shí)際測量上最長可達(dá)到5.70m。下面是實(shí)物圖,文章后面附源程序。
4-300cn,實(shí)際測量上最長可達(dá)到5.7m
#include 'AT89X51.H' //頭文件
unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char disbuf[8]={0,0,0,0,0,0,0,0};
//-----------------------------------------------------------------------------
// 函數(shù)原形定義
#define uchar unsigned char
#define uint unsigned int
void main (void); // 主函數(shù)
void LED4_Display (void); // LED顯示
void LED_OUT(uchar X); // LED單字節(jié)串行移位函數(shù)
void delayms(uint); //延時子函數(shù) ms
void jisuan(void);
unsigned char code LED_0F[]; // LED字模表
sbit DIO=P1^0; //串行數(shù)據(jù)輸入
sbit RCLK=P1^1; //時鐘脈沖信號——上升沿有效
sbit SCLK=P1^2; //打入信號————上升沿有效
sbit echo=P3^2; //echo
sbit trig=P3^3; //trig
//-----------------------------------------------------------------------------
// 全局變量
uchar LED[8]; //用于LED的8位顯示緩存
uint temp;
uint temp1;
uint a,b; //定義一個變量a,b 后者用于判斷是否收到信號
//
// 主程序
//
void main(void) //主函數(shù)開始
{
uint f;
echo=0; //先拉低echo,trig引腳
trig=0;
f=500;
while(f>0); //啟動延時 消除第一次上電產(chǎn)生的波動
{
LED[3]=16;
LED[2]=15;
LED[1]=15;
LED[0]=16;
f--;
}
EA=1; //開總中斷
TMOD=0x11; //設(shè)置定時器為方式1
ET0=1; //允許定時器中斷 這里主要是防止超聲波模塊未發(fā)送信號
ET1=1;
while(1)
{
echo=0;//a賦值
a=0;
b=1;
TH0=0; //定時器裝初值
TL0=0;
TH1=(65536-25000)/256; //定時器裝初值
TL1=(65536-25000)%6;
trig=1; //trig送高
LED4_Display (); // 延時3ms
LED4_Display ();
LED4_Display ();
LED4_Display ();
LED4_Display ();
LED4_Display ();
LED4_Display ();
trig=0; //trig送低
TR1=1;
while(echo==0); //等待echo變?yōu)楦唠娖?/p>
if(b==1) 判斷是否收到信號
{