#include #define uchar unsigned char#define uint unsigned int#define LCD_DATA P2sbit 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; }