树瑶风343 2021-12-27 14:42 采纳率: 100%
浏览 76
已结题

代码是单片机三路抢答器,水平有限,有无详细解释

#include "public.h"
#include "display.h"
#include "led.h"
#include "button.h"
#include "speaker.h"
u8 count=0; //20是1s
u8 flag_player=0; //0:无选手按下
u8 flag_sta=0; //1:按下开始键
u8 time_use=0; //用了的时间
void int_init() //定时器0初始化
{
EA=1;
ET0=1;
TMOD=0X01;
TH0=15536/256;
TL0=15536%256;
}
void deal_key() //按键处理函数
{
u8 key=0;
key=key_scan(0);
switch(key)
{
case KEYSTA_PRESS: //按下开始键
{
flag_sta=!flag_sta;
break;
}
case KEY1_PRESS:
{
if(flag_player==0)
flag_player=1;
break;
}
case KEY2_PRESS:
{
if(flag_player==0)
flag_player=2;
break;
}
case KEY3_PRESS:
{
if(flag_player==0)
flag_player=3;
break;
}
}
}
void timer0() interrupt 1 //定时器0中断处理函数
{
TH0=15536/256;
TL0=15536%256;
count++;
if(count==20) //满1s
{
count=0;
time_use++;
if(time_use==10) //时间到
{
TR0=0;
flag_player=0;
time_use=0;
led1=1;led2=1;led3=1;
}
}
}
void main()
{
int_init();
while(1)
{
delay_10us(2000);
deal_key();
if(flag_sta==0&&flag_player!=0) //有人抢答
{
alarm(2000);
}
else if (flag_sta==1&&flag_player!=0) //正常答题
{
TR0=1;
display(10-time_use); //显示剩余时间
switch(flag_player)
{
case 1:
{
led1=0;
break;
}
case 2:
{
led2=0;
break;
}
case 3:
{
led1=0;
break;
}
default:
{

    }
  }
  
}
else if(flag_sta)
{
  display(time_use);
}

}

}

  • 写回答

1条回答 默认 最新

  • CSDN专家-Time 2021-12-28 11:13
    关注

    它通过delay_10us();进行等待时间
    deal_key()函数判断用户按下哪个按钮 并给flag_player 赋值。
    然后判断是哪个flag_player,把led灯点亮啊。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月6日
  • 已采纳回答 12月29日
  • 创建了问题 12月27日

悬赏问题

  • ¥15 基于RTKLIB框架写的精密单点定位-AR
  • ¥15 PFENet的预训练权重
  • ¥15 程序哪有错误怎么改?
  • ¥15 交换机和交换机之间的链路带宽以及主机带宽的理解
  • ¥15 ai创想家对战模式代码
  • ¥15 集合A由3个2行4列二维数组构成,从集合A中任意取一个二维数组元素、如果该二维数组元素的对应列位置的上、下两数都是奇数,而且仅有2个列是奇数/奇数,则该数组有意义,并放入集合B中打印输出。
  • ¥15 电信IPV6 无法外网访问吗
  • ¥15 有偿求效果比较好的遥感影像匹配的c++代码
  • ¥15 博主,你好,我下载了你的智能网联汽车辅助驾驶安全信息检测系统,现在不会运行,可以教我吗,
  • ¥15 怎么在excle输入下列公式