2、把 TMOD= 0x01 改为TMOD= 0x11;试试,主要是你之打开了一个定时器却用了两个定时器
验证一下,不行的话再交流
望采纳!
#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=zx>0x--)
for(y=110y>0y--)
} void delay10ms(uint x)
{
uint i,j
for(i=xi>0i--)
for(j=1149j>0j--)
} 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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)