检查一下是不是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,通常是由以下原因导致的:
程序中计时器未被启用。在八路抢答器中,需要使用计时器控制倒计时数字的变化。如果程序中未启用计时器或计时器不正确,则可能导致倒计时数字不动或只显示0。
程序中的倒计时逻辑不正确。在八路抢答器中,通过倒计时器倒计时到0来结束抢答。如果程序中倒计时逻辑有误,则可能导致倒计时数字不动或只显示0。
倒计时数字的显示控件未正确初始化。在八路抢答器中,需要在程序中使用控件来显示倒计时数字。如果控件未正确初始化或初始化方法不正确,则可能导致倒计时数字不动或只显示0。
针对以上原因,建议您逐一排查和检查程序中的相关部分,例如启用计时器、检查倒计时逻辑、对显示控件进行正确的初始化和使用等。同时,您也可以提供更多程序和环境上下文信息,以便可以为您提供更具体和有针对性的解决方案。