写一个51单片机的程序模拟实现一个抢答器;主持人操控按键K2。一共2位选手每位选手1个按键抢答器分别操控S9S13。最先按下按键的选手号码将显示在数码管上后来按下的将无显示。主持人按下K2数码管显示0。按下其他键蜂鸣器发出长笛声报警数码管全亮。 #include <reg51.h>

#define uchar unsigned char #define uint unsigned int

sbit S9 = P3^3; //选手1抢答器 sbit S13 = P3^7; //选手2抢答器 sbit K2 = P3^5; //主持人控制按键 sbit beep = P1^7; //蜂鸣器

uchar code num[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阳数码管0-9的显示码

void delay(uint ms) //延时函数 { uint i,j; for(i=ms;i>0;i--) for(j=110;j>0;j--); }

void display(uchar n) //数字显示函数 { P2 = num[n]; //将n的显示码送到P2口 }

void main() { uchar flag = 0; //标志位,用于判断是否已经有选手按下抢答器 uchar num = 0; //选手号码,0表示无人抢答,1表示选手1抢答,2表示选手2抢答 K2 = 1; //初始化K2为高电平 beep = 0; //初始化蜂鸣器为静音状态 P2 = 0; //初始化数码管为全灭状态 while(1) { if(K2 == 0) //主持人按下K2,数码管显示0 { delay(10); //消除抖动 if(K2 == 0) { num = 0; display(num); while(K2 == 0); //等待主持人松开K2 } } if(S9 == 0 && flag == 0) //选手1按下抢答器且无人抢答 { flag = 1; //将标志位置为1,表示已经有选手抢答 num = 1; //选手1抢答,将选手号码设为1 display(num); //在数码管上显示选手号码 } if(S13 == 0 && flag == 0) //选手2按下抢答器且无人抢答 { flag = 1; //将标志位置为1,表示已经有选手抢答 num = 2; //选手2抢答,将选手号码设为2 display(num); //在数码管上显示选手号码 } if(S9 == 0 && flag == 1) //选手1按下抢答器但已经有选手抢答 { beep = 1; //蜂鸣器发出长笛声报警 P2 = 0xff; //数码管全亮 while(S9 == 0); //等待选手松开抢答器 } if(S13 == 0 && flag == 1) //选手2按下抢答器但已经有选手抢答 { beep = 1; //蜂鸣器发出长笛声报警 P2 = 0xff; //数码管全亮 while(S13 == 0); //等待选手松开抢答器 } } }


原文地址: https://www.cveoy.top/t/topic/dsMj 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录