51单片机超声波测距程序.docx

上传人:b****1 文档编号:393010 上传时间:2022-10-09 格式:DOCX 页数:6 大小:20.89KB
下载 相关 举报
51单片机超声波测距程序.docx_第1页
第1页 / 共6页
51单片机超声波测距程序.docx_第2页
第2页 / 共6页
51单片机超声波测距程序.docx_第3页
第3页 / 共6页
51单片机超声波测距程序.docx_第4页
第4页 / 共6页
51单片机超声波测距程序.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

51单片机超声波测距程序.docx

《51单片机超声波测距程序.docx》由会员分享,可在线阅读,更多相关《51单片机超声波测距程序.docx(6页珍藏版)》请在冰豆网上搜索。

51单片机超声波测距程序.docx

51单片机超声波测距程序

51单片机超声波测距程序

//超声波测距,测距范围2cm-400cm;

#include

#include

 

#defineuintunsignedint

#defineucharunsignedchar

 

sbittrig=P1^0;

sbitecho=P3^2;

sbittest=P1^1;//测试灯

sbitdula=P2^6;

sbitwela=P2^7;

sbitBEEP=P2^3;

 

uinttimeh,timel,distance;

uintge,shi,bai,xiaoshu,flag,time;

 

/*共阴极数码管不带小数点代码表*/

ucharcodelist[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

 

/*共阴极数码管带小数点代码表*/

ucharcodelisttwo[]={

0xbf,0x86,0xdb,0xcf,0xe6,

0xed,0xfd,0x87,0xff,0xef};

 

/*长延时函数*/

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=100;y>0;y--);

}

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);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1