/*******************************************************************************
抢答器框架伪代码
1、P0做抢答按钮输入,一共8个按钮,最先按下的按钮才能才做,后面按下的忽略
2、P10做强大开始按钮,按下之开始按钮后,8个抢答按钮才有效
*/
#define KEY_START P10 //开始抢答按钮
#define KEY_ANSWER P0 //8路抢答按钮
uint8_t flag; //抢答标志位,只要有一个抢答按钮被触发,剩下的按钮即使按下也不做处理
/*******************************************************************************
抢答处理,并行处理,公平公正,不需要消除抖动处理*/
void function_answer(void) {
uint8_t key_in; //抢答结果
if (flag) { //允许抢答
key_in = ~KEY_ANSWER; //获取抢答结果
switch (key_in) { //判断谁最先抢答
case 0x00:
//无人抢答不做处理
NOP();
case 0x01:
//处理1组,显示内容,播放声音,代码自己写
flag = 0; //抢答已经完成,不再继续抢答
break;
case 0x02:
//处理2组,显示内容,播放声音,代码自己写
flag = 0; //抢答已经完成,不再继续抢答
break;
case 0x04:
//处理3组,显示内容,播放声音,代码自己写
flag = 0; //抢答已经完成,不再继续抢答
break;
case 0x08:
//处理4组,显示内容,播放声音,代码自己写
flag = 0; //抢答已经完成,不再继续抢答
break;
case 0x10:
//处理5组,显示内容,播放声音,代码自己写
flag = 0; //抢答已经完成,不再继续抢答
break;
case 0x20:
//处理6组,显示内容,播放声音,代码自己写
flag = 0; //抢答已经完成,不再继续抢答
break;
case 0x40:
//处理7组,显示内容,播放声音,代码自己写
flag = 0; //抢答已经完成,不再继续抢答
break;
case 0x80:
//处理8组,显示内容,播放声音,代码自己写
flag = 0; //抢答已经完成,不再继续抢答
break;
default: //
//本次抢答无效,至少有2人同时抢答
//点亮异常LED
flag = 0; //异常,不再继续抢答
break;
}
}
}
/*******************************************************************************
抢答开始,不需要消除抖动处理*/
void key_start(void) {
if (!KEY_ANSWER) { //检测到开始按钮按下
flag = 1; // 允许抢答
}
}
/*******************************************************************************
单片机初始化*/
void mcu_init(void) {
//初始化代码
}
/*******************************************************************************
程序入口*/
void main(void) {
mcu_init(); //单片机初始化
while (1) {
key_start(); //开始抢答
function_answer(); //抢答处理
}
}
抢答器程序模板框架
最新推荐文章于 2024-05-11 09:07:51 发布