八路抢答器倒计时设计时显示器不输出,只能显示0

img


八路抢答器设计时,倒计时数字不动,只能显示0,无法自主变动。

检查一下是不是A1的输出没有波形啊?另外,为啥不整个单片机来做昵?成本低,逻辑还好控制。

肯定是因为没有计数脉冲过来,检查一下U14A的输出是否有脉冲

51单片机的八路抢答器设计
可以参考下

void main()
{
int djs1=60;
Timer0_init();     //初始化定时器中断
spk=1;              //蜂鸣器不响
        djs=60;        //倒计时赋值
while(1)
{
 
LOOP1:   
djs=djs1;
djsxs22();    //LOOP1是标号,显示 -  --
 
if(key1==0)         //在定时器运行状态下,key1==0 则说明1号选手按下按键
{
   delayms(3);
   if(key1==0)
   { 
      while(!key1);      //去除按键抖动后,重新在判断,是否确实按下
      djs=60;
      while(1)
      {
         TR0=0;          //定时器停止
         djsxs();      
         if(key2==0)      //复位按下按下
         {    
             delayms(8);           //去除抖动
             if(key2==0)       //再次判断是否按下复位按键
             {
                 do
                 { 
                     while(!key2); //如果按下复位键,则回到- --状态
                     delayms(5);
                 }
                 while(key2!=1);
                 djs++;
                 djs1=djs;
             }
          }
          if(key3==0)      //复位按下按下
          {    
             delayms(8);           //去除抖动
             if(key3==0)       //再次判断是否按下复位按键
             { 
                do
                {
                    while(!key3); //如果按下复位键,则回到- --状态
                    delayms(5);    
                }
                while(key3!=1);
                djs--;
                djs1=djs;
             }
           }
           if(key1==0)      //复位按下按下
           {    
              delayms(3);           //去除抖动
              if(key1==0)       //再次判断是否按下复位按键
              { 
                 while(!key1); //如果按下复位键,则回到- --状态
                 goto LOOP1;          //goto语句,回到loop1表号处
              }
           }                                           
         }
       }
     }
     if(keyks==0)
     {           
        //spk=0;
        delayms(3);         //去除按键抖动
        if(keyks==0)
        { 
           while(!keyks);      //以上表示按下开始按键 
           //spk=1;               //蜂鸣器不响
           TR0=1;               //启动定时器 开始倒计时
           while(1)
           {
              djsxs();
              if(keytz==0)
              {
                  delayms(3);             //此处表示出去抖动, 以后不一一标出
                  if(keytz==0)
                  { 
                     while(!keytz);       //以上表示按下停止按键后 
                     {
                        TR0=0;           //定时器停止
                        flag=0;//
                        spk=1;
                     }
 
                   }
               }
               if(keyks==0)
               {
                  //spk=0;
                  delayms(3);
                  if(keyks==0)
                  { 
                     while(!keyks);       //以上表示按下清楚按键后 
                     //spk=1;               //蜂鸣器不响
                     TR0=1;           //定时器启动
 
                  }
                }
                .......
              } 
 
            }
 
         }
      }
   }
}

倒计时模板工作不正常,检查一下时钟信号、硬件连接、程序代码等是否正常

八路抢答器常见的倒计时数字不动或只显示0,通常是由以下原因导致的:

  1. 程序中计时器未被启用。在八路抢答器中,需要使用计时器控制倒计时数字的变化。如果程序中未启用计时器或计时器不正确,则可能导致倒计时数字不动或只显示0。

  2. 程序中的倒计时逻辑不正确。在八路抢答器中,通过倒计时器倒计时到0来结束抢答。如果程序中倒计时逻辑有误,则可能导致倒计时数字不动或只显示0。

  3. 倒计时数字的显示控件未正确初始化。在八路抢答器中,需要在程序中使用控件来显示倒计时数字。如果控件未正确初始化或初始化方法不正确,则可能导致倒计时数字不动或只显示0。

针对以上原因,建议您逐一排查和检查程序中的相关部分,例如启用计时器、检查倒计时逻辑、对显示控件进行正确的初始化和使用等。同时,您也可以提供更多程序和环境上下文信息,以便可以为您提供更具体和有针对性的解决方案。