300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 51单片机c语言测距 求助 关于C51单片机超声波测距 C语言程序设计 高手帮帮忙...

51单片机c语言测距 求助 关于C51单片机超声波测距 C语言程序设计 高手帮帮忙...

时间:2024-01-06 16:49:04

相关推荐

51单片机c语言测距 求助 关于C51单片机超声波测距 C语言程序设计 高手帮帮忙...

该楼层疑似违规已被系统折叠隐藏此楼查看此楼

C51编程:超声波测距程序(附图)[请帮助]-9-3018:44:03

#include

#definek1P3_4

#definecsboutP3_5//超声波发送

#definecsbintP3_7//超声波接收

#definecsbc=0.034

#definebgP3_3

unsignedcharcsbds,opto,digit,buffer[3],xm1,xm2,xm0,key,jpjs;//显示标识

unsignedcharconvert[10]=

{0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9段码

unsignedints,t,i,xx,j,sj1,sj2,sj3,mqs,sx1;

bitcl;

voidcsbcj();

voiddelay(j);//延时函数

voidscanLED();//显示函数

voidtimeToBuffer();//显示转换函数

voidkeyscan();

voidk1cl();

voidk2cl();

voidk3cl();

voidk4cl();

voidoffmsd();

voidmain()//主函数

{

EA=1;//开中断

TMOD=0x11;//设定时器0为计数,设定时器1定时

ET0=1;//定时器0中断允许

ET1=1;//定时器1中断允许

TH0=0x00;

TL0=0x00;

TH1=0x9E;

TL1=0x57;

csbds=0;

csbint=1;

csbout=1;

cl=0;

opto=0xff;

jpjs=0;

sj1=45;

sj2=200;

sj3=400;

k4cl();

TR1=1;

while(1)

{

keyscan();

if(jpjs<1)

{

csbcj();

if(s>sj3)

{

buffer[2]=0x76;

buffer[1]=0x76;

buffer[0]=0x76;

}

elseif(s

{

buffer[2]=0x40;

buffer[1]=0x40;

buffer[0]=0x40;

}

elsetimeToBuffer();

}

elsetimeToBuffer();//将值转换成LED段码

offmsd();

scanLED();//显示函数

if(s

bg=0;

bg=1;

}

}

voidscanLED()//显示功能模块

{

digit=0x04;

for(i=0;i<3;i++)//3位数显示

{

P3=~digit&opto;//依次显示各位数

P1=~buffer;//显示数据送P1口

delay(20);//延时处理

P1=0xff;//P1口置高电平(关闭)

if((P3&0x10)==0)//判断3位是否显示完

key=0;

digit>>=1;//循环右移1位

}

}

voidtimeToBuffer()//转换段码功能模块

{

xm0=s/100;

xm1=(s-100*xm0)/10;

xm2=s-100*xm0-10*xm1;

buffer[2]=convert[xm2];

buffer[1]=convert[xm1];

buffer[0]=convert[xm0];

}

voiddelay(i)

{

while(--i);

}

voidtimer1int(void)interrupt3using2

{

TH1=0x9E;

TL1=0x57;

csbds++;

if(csbds>=40)

{

csbds=0;

cl=1;

}

}

voidcsbcj()

{

if(cl==1)

{

TR1=0;

TH0=0x00;

TL0=0x00;

i=10;

while(i--)

{

csbout=!csbout;

}

TR0=1;

i=mqs;//盲区

while(i--)

{

}

i=0;

while(csbint)

{

i++;

if(i>=2450)//上限值

csbint=0;

}

TR0=0;

TH1=0x9E;

TL1=0x57;

t=TH0;

t=t*256+TL0;

s=t*csbc/2;

TR1=1;

cl=0;

}

}

voidkeyscan()//健盘处理函数

{

xx=0;

if(k1!=1)//判断开关是否按下

{

delay(400);//延时去抖动

if(k1!=1)//判断开关是否按下

{

while(!k1)

{

delay(30);

xx++;

}

if(xx>2000)

{

jpjs++;

if(jpjs>4)

jpjs=0;

}

xx=0;

switch(jpjs)

{

case1:k1cl();break;

case2:k2cl();break;

case3:k3cl();break;

case4:k4cl();break;

}

}

}

}

voidk1cl()

{

sj1=sj1+5;

if(sj1>100)

sj1=30;

s=sj1;

}

voidk2cl()

{

sj2=sj2+5;

if(sj2>500)

sj2=40;

s=sj2;

}

voidk3cl()

{

sj3=sj3+10;

if(sj3>500)

sj3=100;

s=sj3;

}

voidk4cl()

{

sx1=sj1-1;

sx1=sx1/csbc;

mqs=sx1/4.5;

}

voidoffmsd()

{

if(buffer[0]==0x3f)

buffer[0]=0x00;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。