霍尔元件模块测速,LCD1602显示了“00000”

#基于霍尔元件模块的测速程序
#原理:齿轮转一圈,霍尔元件模块通过齿轮上的磁铁产生下降沿信号,通过外部中断0,单片机记录一次。 设置了50MS时钟中断,每经过50MS单片机计算一次并通过LLCD1602显示。
#现象:就显示了5个0,不知道哪出了问题

#include 
#include 
unsigned int number=0;
unsigned int n=0;
unsigned int x=0;

void main()
{   
    IT0=1;
    EX0=1;
    EA=1;                   //设置int0为外部中断

    TMOD &= 0xF0;            //设置定时器模式  50ms
    TMOD |= 0x01;            //设置定时器模式
    TL0 = 0x00;                //设置定时初始值
    TH0 = 0x4C;                //设置定时初始值
    TF0 = 0;                //清除TF0标志
    TR0 = 1;                //定时器0开始计时
    ET0 = 1;                //使能定时器0中断
    EA=1;
    LCD_Init();
    while(1)
    { 
      if(n==1)                 //50ms检测一次
        {
           LCD_ShowNum(1,1,number*1200,5);  //显示转速
            number=0;
            n=0;
        }  
    }
    
 }   
void Timer0_Isr() interrupt 1       //时间中断
{
    TL0 = 0x00;                //设置定时初始值
    TH0 = 0x4C;                //设置定时初始值
    n++;
}

void ex1_intr() interrupt 0      //外部中断
{
    number++;
}
Build target 'Target 1'
compiling main.c...
linking...
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_LCD_SHOWCHAR?LCD1602
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_LCD_SHOWSTRING?LCD1602
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_LCD_SHOWSIGNEDNUM?LCD1602
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_LCD_SHOWHEXNUM?LCD1602
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?_LCD_SHOWBINNUM?LCD1602
Program Size: data=44.0 xdata=0 code=807
creating hex file from ".\Objects\检测"...
".\Objects\检测" - 0 Error(s), 5 Warning(s).
Build Time Elapsed:  00:00:00

代码中未看到明显错误。但您所描述的现象,即LCD上显示了5个0,可能是因为霍尔元件模块产生下降沿信号的速度过快,导致外部中断程序执行了多次,从而增加了测速计数,最终导致显示的转速过高。为了验证这一点,可以通过增加一个变量来记录外部中断是否被多次执行,并在每次外部中断中检查该变量,从而避免重复计数。同时,您还可以添加一些输出语句来观察程序运行情况,以便更好地定位问题。