基于STC89C52RC单片机的超声波测距程序设计

控制/MCU

1814人已加入

描述

网络上集的STC89C52RC单片机超声波测距程序及电子制作实物,使用单片机最小系统进行试验,超声波部分使用HC-SR04模块,测量范围:4-300cm,实际测量上最长可达到5.70m。下面是实物图,文章后面附源程序。

4-300cn,实际测量上最长可达到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};

//-----------------------------------------------------------------------------

// 函数原形定义

#define uchar unsigned char

#define uint unsigned int

void main (void); // 主函数

void LED4_Display (void); // LED显示

void LED_OUT(uchar X); // LED单字节串行移位函数

void delayms(uint); //延时子函数 ms

void jisuan(void);

unsigned char code LED_0F[]; // LED字模表

sbit DIO=P1^0; //串行数据输入

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) //主函数开始

{

uint f;

echo=0; //先拉低echo,trig引脚

trig=0;

f=500;

while(f》0); //启动延时 消除第一次上电产生的波动

{

LED[3]=16;

LED[2]=15;

LED[1]=15;

LED[0]=16;

f--;

}

EA=1; //开总中断

TMOD=0x11; //设置定时器为方式1

ET0=1; //允许定时器中断 这里主要是防止超声波模块未发送信号

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变为高电平

if(b==1) 判断是否收到信号

{
责任编辑;zl

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分