51单片机超声波测距程序.docx
- 文档编号:27337578
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:7
- 大小:34.03KB
51单片机超声波测距程序.docx
《51单片机超声波测距程序.docx》由会员分享,可在线阅读,更多相关《51单片机超声波测距程序.docx(7页珍藏版)》请在冰豆网上搜索。
51单片机超声波测距程序
51单片机超声波测距程序
/*短延时函数*/
voiddelay20us()
{
uchara;
for(a=0;a<100;a++);
}
/*报警函数*/
voidbeer()
{
//BEEP=0;
delay(10);
}
/*定时器初始化*/
voidinitime0()
{
TMOD=0x01;
TH0=0;
TL0=0;
EA=0;
ET0=0;
EX0=0;
}
/*外部中断函数*/
voidestern()interrupt0
{
timeh=TH0;
timel=TL0;
beer();
flag=1;//进入中断,标志位就置1
EX0=0;//同时关断外部中断和定时器
TR0=0;
}
/*显示函数*/
voiddisplay(distance)
{
bai=distance/1000;
shi=distance%1000/100;
ge=distance%100;
xiaoshu=distance%10;
dula=1;
P0=list[xiaoshu];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delay
(2);
dula=1;
P0=listtwo[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay
(2);
dula=1;
P0=list[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay
(1);
dula=1;
P0=list[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay
(1);
}
/*被调用子函数*/
voiddiaoyong()
{
uinti;
EA=0;
echo=1;//为了检测电平的高低,首先必须拉高
trig=1;
delay20us();
trig=0;
while(echo==0);//如果进入中断即接收到超声波就向下执行
flag=0;//接收到就清除标志位
EA=1;//同时打开总中断
EX0=1;//打开外部中断
TR0=1;//开定时器
TH0=0;//定时器清零
TL0=0;
for(i=0;i<100;i++)//等待测量的结果
{
display(distance);//用100次显示循环来延时,解决数码管显示不亮问题
}
//delay(50);//用延时函数数码管闪烁
TR0=0;//延时一段时间后关断定时器
EX0=0;//延时一段时间后关断外部中断
if(flag==1)//如果进入中断,说明测距已经测好
{
time=timeh*256+timel;//计算测定距离,并显示
distance=time*0.1720;
display(distance);
}
if(flag==0)//如果没有进入中断,距离为0,同时灯闪烁
{
distance=0;
test=!
test;
}
}
/*主函数*/
voidmain()
{
initime0();
test=0;
trig=0;
EA=1;
while
(1)
{
diaoyong();
display(distance);
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 超声波 测距 程序