51编程超声波程序出错,麻烦查找一下错误

51编程超声波程序出错,麻烦查找一下错误,第1张

1、出现error:preprocessor :macros too nested说明有的宏定义嵌套得太多,不要在宏定义中干太多复杂的工作

      

 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 

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11154169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存