當前位置:編程學習大全網 - 編程語言 - 求超聲波測距c程序

求超聲波測距c程序

at89c2051制作的超聲波測距源程序

· 文件版本: V1.0

· 開發商: 本站原創

· 文件來源: 本地

· 界面語言: 簡體中文

· 授權方式: 免費

at89c2051制作的超聲波測距源程序

關鍵詞: 超聲波測距

at89c2051制作的超聲波測距源程序

#include <REG2051.H>

#define k1 P3_4

#define csbout P3_5 //超聲波發送

#define csbint P3_7 //超聲波接收

#define csbc=0.034

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

ōpto=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;

}

else if(s<sj1)

{

buffer[2]=0x40;

buffer[1]=0x40;

buffer[0]=0x40;

}

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位數顯示

{

P3=~digit&opto; //依次顯示各位數

P1=~buffer; //顯示數據送P1口

delay(20); //延時處理

P1=0xff; //P1口置高電平(關閉)

if((P3&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;

}

  • 上一篇:自動洗衣機第壹次脫水後很幹凈,最後壹次水裏有泡沫,算不算衣服幹凈?
  • 下一篇:關於家園2號艦轉移的指令~200分
  • copyright 2024編程學習大全網