📄 超声波测距程序别人.txt
字号:
#include <REG2051.H> //成功的程序,P1.0-P1.7分别对数码管的A-H的段码
//#define k1 P3_4 //P3.0,P3.1,P3.2分别是三位数码管的位
#define csbout P1_0 //超声波发送
#define csbint P3_0 //超声波接收
#define csbc=0.034 //晶振采用12M,P1口为数码管段输出口,P3.0~P3.2为数码管位输出口,P3.5超声波发送输出,P3.7超声波接收。
#define bg P3_3
unsigned char csbds,opto,digit,buffer[3],xm1,xm2,xm0,key,jpjs;//显示标识
unsigned char convert[10]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9段码
unsigned int s,t,i, xx,j,sj1,sj2,sj3,mqs,sx1;
bit cl;
void csbcj();
void delay(j); //延时函数
void scanLED(); //显示函数
void timeToBuffer(); //显示转换函数
//void keyscan();
//void k1cl();
//void k2cl();
//void k3cl();
//void k4cl();
//void offmsd();
void main() //主函数
{
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; //超出测量范围,显示HHH
buffer[1]=0x76; //超出测量范围,显示HHH
buffer[0]=0x76; //超出测量范围,显示HHH
}
else if(s<sj1)
{
buffer[2]=0x40; //初始化显示000
buffer[1]=0x40; //初始化显示000
buffer[0]=0x40; //初始化显示000
}
else timeToBuffer();
}
else timeToBuffer(); //将值转换成LED段码
offmsd();
scanLED(); //显示函数
if(s<sj2)
bg=0;
bg=1;
}
}
void scanLED() //显示功能模块
{
digit=0x04;
for( i=0; i<3; i++) //3位数显示
{
P2=~digit&opto; //依次显示各位数
P0=~buffer[i]; //显示数据送P1口
delay(20); //延时处理
P0=0xff; //P1口置高电平(关闭)
if((P2&0x10)==0) //判断3位是否显示完
//key=0;
digit>>=1; //循环右移1位
}
}
void timeToBuffer() //转换段码功能模块
{
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];
}
void delay(i)
{
while(--i);
}
void timer1int (void) interrupt 3 using 2
{
TH1=0x9E;
TL1=0x57;
csbds++;
if(csbds>=40)
{
csbds=0;
cl=1;
}
}
void csbcj()
{
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;
}
}
//void keyscan() //健盘处理函数
//{
//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)
// {
// case 1: k1cl();break;
// case 2: k2cl();break;
// case 3: k3cl();break;
// case 4: k4cl();break;
// }
/ }
//}//
//}
//void k1cl()
//{
//sj1=sj1+5;
//if(sj1>100)
//sj1=30;
//s=sj1;
//}
//void k2cl()
//{
//sj2=sj2+5;
//if(sj2>500)
//sj2=40;
//s=sj2;
//}
//void k3cl()
//{
//sj3=sj3+10;
//if(sj3>500)
//sj3=100;
//s=sj3;
//}
//void k4cl()
//{
//sx1=sj1-1;
//sx1=sx1/csbc;
//mqs=sx1/4.5;
//}
//void offmsd()
//{
// if (buffer[0] == 0x3f)
// buffer[0] = 0x00;
//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -