當前位置:編程學習大全網 - 編程語言 - 51單片機超聲波測距代碼

51單片機超聲波測距代碼

#include?<reg51.h>

#define?uchar?unsigned?char

#define?uint?unsigned?int#define?LCD_DATA?P2

sbit?LCD_BL=P1^0;

sbit?LCD_RS=P1^1;

sbit?LCD_RW=P1^2;

sbit?LCD_EN=P1^3;sbit?TRIG=P0^0;

sbit?ECHO=P0^1;bit?flag=0;

uchar?time,b,s,g;

uint?l;uchar?code?num_tab[]="0123456789";void?delay1602(uint?z);

void?delay10ms(uint?x);

void?write_com(uchar?com);

void?write_dat(uchar?dat);

void?init_t0();

void?init_lcd1602();

void?Get_L();

void?display();void?main()

{

LCD_BL=0;

TRIG=0;

init_t0();

init_lcd1602();

delay10ms(50);

while(1)

{

Get_L();

display();

delay10ms(6);

}

}void?delay1602(uint?z)

{

uint?x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}void?delay10ms(uint?x)

{

uint?i,j;

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

for(j=1149;j>0;j--);

}void?write_com(uchar?com)

{

LCD_RW=0;

LCD_RS=0;

LCD_DATA=com;

LCD_EN=1;

delay1602(5);

LCD_EN=0;

}void?write_dat(uchar?dat)

{

LCD_RW=0;

LCD_RS=1;

LCD_DATA=dat;

LCD_EN=1;

delay1602(5);

LCD_EN=0;

}void?init_lcd1602()

{

write_com(0x38);

write_com(0x38);

write_com(0x38);?//設置8位格式,2行5x7點陣

write_com(0x0c);?//開顯示,關光標,不閃爍

write_com(0x06);?//文字不動,光標自動右移

write_com(0x01);?//清屏並光標復位

}void?init_t0()

{

TMOD=0x01;

TH0=0x00;

TL0=0x00;

}void?display()

{

if(l!=0)

{

b=l/100;

s=l%100/10;

g=l%10;

write_com(0x00|0x80);

write_dat(num_tab[b]);

write_dat(num_tab[s]);

write_dat(num_tab[g]);

write_dat('c');

write_dat('m');

}

}void?Get_L()

{

TRIG=1;

delay10ms(1);

TRIG=0;

while(ECHO!=1);

TR0=1;

while((ECHO!=0)&(TH0<0x4f));

TR0=0;

l=TH0;

l<<=8;

l+=TL0;

if((l<174)?|?(l>20300))

{

l=0;

flag=1;

}

else

l=(l*1.085)/58;

TH0=0x00;

TL0=0x00;?

}

  • 上一篇:星形編程示例
  • 下一篇:軟件設計師考試需要準備什麽,我是學java的,包括c等別的程序設計語言都不會
  • copyright 2024編程學習大全網