超声波测距C语言源程序代码Word文件下载.docx

上传人:b****1 文档编号:13532587 上传时间:2022-10-11 格式:DOCX 页数:15 大小:17.98KB
下载 相关 举报
超声波测距C语言源程序代码Word文件下载.docx_第1页
第1页 / 共15页
超声波测距C语言源程序代码Word文件下载.docx_第2页
第2页 / 共15页
超声波测距C语言源程序代码Word文件下载.docx_第3页
第3页 / 共15页
超声波测距C语言源程序代码Word文件下载.docx_第4页
第4页 / 共15页
超声波测距C语言源程序代码Word文件下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

超声波测距C语言源程序代码Word文件下载.docx

《超声波测距C语言源程序代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《超声波测距C语言源程序代码Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。

超声波测距C语言源程序代码Word文件下载.docx

sbitGX=P3^1;

//K7//P3^3口(K2)为修改键,

sbitSX=P3^6;

//K6//P3^2(K3)为测量键.

sbitBX=P3^0;

//K5//个(K7),十(K6),百(K5),三位修改键

sbita=P1^2;

//百位//数码管位选

sbitb=P1^1;

//十位

sbitc=P1^0;

//个位

sbittrig=P1^4;

//方波发射端

sbitecho=P1^5;

//超声波接收端

voidIntConfiguration();

//用来"

设置中断"

的函数,P3^3口(K2)为修改键,P3^2(K3)为测量键.

voidTimeConfiguration();

设置定时器"

的函数

sbitK1=P3^4;

//动态

sbitK4=P3^5;

//静态//用于进行模式切换(K1、K4键)

voidxiaxian();

//修改函数,用来修改下限

voidshangxian();

//修改函数,用来修改上限

UImin[3]={0,5,0};

//报警极限,拆分为"

百十个"

三位

UImax[3]={3,0,0};

//MIN,MAX用来存储最大和最小值

voidMINxianshi(UI);

//最小范围和最大范围的显示

voidMAXxianshi(UI);

UCcodeCharacterCode[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

//数码管数字字符(P2口)

/********************************主函数*********************************************/

voidmain()

{

TimeConfiguration();

//设置定时器0

IntConfiguration();

//设置中断允许,K4键为修改键,K8键为确定键

while

(1)

{

MINxianshi(40);

//1.50169000s

MAXxianshi(40);

//1.50098300s

}

}

/*******************************超声波测距函数********************************************/

voidzhongduan_0()interrupt0//测量中断函数(外部中断0)

UImoshi=0;

UIjuli=0;

UItime=0;

UIMAX,MIN;

UITT=0;

//用于第一次测量时给P1^5口置一,以便正确读取数值

UIt1,t2,t3;

UIGE=0,SHI=0,BAI=0;

//先定义三个变量,用来显示测量的距离.

a=0;

b=0;

c=0;

P2=~0x00;

//防止最后显示的那个数码管一直亮

MAX=max[0]*100+max[1]*10+max[2];

//计算最大和最小值

MIN=min[0]*100+min[1]*10+min[2];

while

(1)//下面进行测量

while

(1)/*先进行模式判断*/

{

if(0==K1)

{

moshi=1;

break;

//模式1为动态测量

}

if(0==K4)

moshi=2;

//模式2为静态测量

if(0==QD)

return;

//结束测量函数

}

/********************************************计算距离************************************************/

loop:

beep=1;

//关掉定时器

Lv=1;

Hong=1;

//关掉灯

a=0;

b=0;

c=0;

P2=~0x00;

//防止最后显示的那个数码管一直亮

if((0==QD)&

&

(1==moshi))

break;

(2==moshi))

{

delay(55500);

if(0==QD)

{

delay(55500);

if(0==QD)

break;

}

}

t1=35,

t2=35;

t3=35;

trig=0;

echo=0;

delay

(2);

//初始化拉低两个端口

trig=1;

//输出端输出27us的高电压,并将输出端口拉低

while(echo==0);

//判断是否有回波返回,有则开启定时器

TR0=1;

//当有高电平输出时,开启定时器

while(echo==1);

TR0=0;

//当高电平变成低电平时,关闭定时器

++TT;

//测量值加一,记录测量次数

if(1==TT)

TH0=0x00;

TL0=0x00;

//定时器的初值,定时器的定时为65536us.

gotoloop;

time=TL0+TH0*256;

//接下来显示测量的距离

TH0=0x00;

//定时器的初值,定时器的定时为65536us.

juli=(int)((time*0.034)/2);

BAI=((juli%1000)/100);

SHI=((juli%100)/10);

GE=(juli%10);

/******************************************两种模式的距离显示********************************************/

if(juli>

MAX)

Hong=0;

Lv=1;

while(t1--)

{

b=1;

c=1;

P2=~CharacterCode[BAI];

delay(400);

a=1;

P2=~CharacterCode[SHI];

P2=~CharacterCode[GE];

delay(390);

beep=0;

if((1==moshi)&

(0==t1))

if(moshi==2)

t1=2;

gotoloop;

}

elseif(juli<

MIN)

Lv=0;

Hong=1;

while(t2--)

delay(500);

delay(100);

beep=1;

(0==t2))

if(2==moshi)

t2=2;

else

beep=1;

while(t3--)

delay(600);

(0==t3))

if(2=

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

当前位置:首页 > 农林牧渔 > 林学

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

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