超声波测距C程序设计

来源:本站
导读:目前正在解读《超声波测距C程序设计》的相关信息,《超声波测距C程序设计》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《超声波测距C程序设计》的详细说明。
简介:超声波测距C程序设计

#include<AT89X51.H>

#include<intrins.h>

/***************************

数码管为共阴数码管

***************************/

sbits0=P2^7;//个位选通

sbits1=P2^6;//十位选通

sbits2=P2^5;//百位选通

sbits3=P2^4;//千位选通

sbitdp=P0^7;//小数点

sbitin=P3^2;//外部中断,接CX20106的脚

sbitcsb=P3^3;//40KHz方波输出脚

#definesegP0//数码管的数据口为P1口

#defineucharunsignedchar

#defineuintunsignedint

#definenop_nop_()

/****************************/

voidinit(void);//初始化

voiddelay_nms(uintn);//延时nms

voiddelay100us();//延时us

voiddisplay(uintdat);//4位数码管显示函数,只用了位

voidtran(void);//超声波测量函数

/***************************/

uintdis,H=100,L=20;

ucharflag=0,high_time,low_time,m=0;

ucharleddata[]={

0x3F,//"0"

0x06,//"1"

0x5B,//"2"

0x4F,//"3"

0x66,//"4"

0x6D,//"5"

0x7D,//"6"

0x07,//"7"

0x7F,//"8"

0x6F,//"9"

0x77,//"A"

0x7C,//"B"

0x39,//"C"

0x5E,//"D"

0x79,//"E"

0x71,//"F"

0x76,//"H"

0x38,//"L"

0x37,//"n"

0x3E,//"u"

0x73,//"P"

0x5C,//"o"

0x40,//"-"

0x00,//熄灭

0x00//自定义

};

voiddelay100us()

{

uchari;

for(i=0;i<50;i++)

;

}

/**********************************

函数名称:主函数

修改日期:

入口参数:无

返回值:无

**********************************/

voidmain(void)

{

init();

while(1)//循环测量并显示

{

tran();//发送超声波信号测距

display(dis);//显示距离

}

}

/**********************************

函数名称:初始化函数

修改日期:

入口参数:无

返回值:无

**********************************/

voidinit(void)

{

TMOD=0x01;//定时器方式用于计时

TH0=0;

TL0=0;/*设定T0的工作模式为*/

EA=1;

IT0=1;//下降沿有效,左传感器

}

/**********************************

函数名称:延时函数

修改日期:

入口参数:n

返回值:无

**********************************/

voiddelay_nms(uintn)

{

uchari;

while(n--)

{

for(i=123;i>0;i--);

}

}

/**********************************

函数名称:显示函数

修改日期:

入口参数:data

返回值:无

**********************************/

voiddisplay(uintdat)

{

uchari,j,k;//分别为百十个位的缓存

i=dat/100;//百位

j=dat%100/10;//十位

k=dat%100%10;//个位

s3=1;s2=0;s1=1;s0=1;

seg=~leddata[i];

dp=0;

delay_nms(2);

dp=1;

s2=1;

s3=1;s2=1;s1=0;s0=1;

seg=~leddata[j];

delay_nms(2);

s1=1;

s3=1;s2=1;s1=1;s0=0;

seg=~leddata[k];

delay_nms(2);

s0=1;

}

/**********************************

函数名称:超声波测量函数

修改日期:

入口参数:无

返回值:无

**********************************/

voidtran(void)

{

uchari;

floattemp;

TH0=0;

TL0=0;//清定时

TR0=1;//开定时

for(i=8;i>0;i--)

{

csb=!csb;

nop;

nop;

nop;

nop;

nop;

nop;

nop;

nop;

nop;

}

csb=1;

delay_nms(1);

EX0=1;//开中断

if(flag==1)//中断标志位置,说明有回波

{//以下为路程计算

temp=high_time*256+low_time;

temp=(temp/1000)/2;

temp*=340;

temp=temp/10;

dis=(unsignedint)temp;

flag=0;

}

}

/**********************************

函数名称:中断函数

修改日期:

入口参数:无

返回值:无

**********************************/

voidTT()interrupt0

{

uinttmp;

TR0=0;//关定时器

ET0=0;//关外部中断

flag=1;//置位标志位

tmp=TH0*256+TL0;//读取定时器的值

if((tmp>0)&&(tmp<60000))//判断是否超出范围,此设置的范围为到米,实际不能达到米

{

high_time=TH0;//把计时值放入缓冲

low_time=TL0;

}

else//超出范围则重新测量

{

high_time=0;

low_time=0;

}

}

提醒:《超声波测距C程序设计》最后刷新时间 2024-03-14 01:03:21,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《超声波测距C程序设计》该内容的真实性请自行鉴别。