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