写一个51单片机的程序模拟实现一个抢答器;主持人操控按键K1。一共2位选手每位选手1个按键抢答器分别操控S9S13。最先按下按键的选手号码将显示在数码管上后来按下的将无显示。主持人按下K2数码管显示0。按下其他键蜂鸣器发出长笛声报警数码管全亮。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1 = P3^1; //主持人按键 sbit K2 = P3^2; //清零按键 sbit S9 = P1^0; //选手1按键 sbit S13 = P1^4; //选手2按键 sbit beep = P2^3; //蜂鸣器
uchar winner = 0; //获胜选手号码
void delay(uint x) { uint i, j; for(i = x; i > 0; i--) for(j = 110; j > 0; j--); }
void main() { uchar flag = 0; //标志位,用于判断是否已有选手按下 uchar num = 0; //记录按下的选手号码 P0 = 0; //数码管全灭 while(1) { if(K1 == 0) //主持人按下K1,开始抢答 { if(S9 == 0 && S13 == 1 && flag == 0) //选手1抢答成功 { num = 1; winner = 1; flag = 1; } else if(S9 == 1 && S13 == 0 && flag == 0) //选手2抢答成功 { num = 2; winner = 2; flag = 1; } if(flag == 1) //已有选手抢答成功 { P0 = num; //在数码管上显示获胜选手号码 delay(1000); //延时1秒 P0 = 0; //数码管全灭 flag = 0; //标志位清零 } } if(K2 == 0) //主持人按下K2,数码管显示0 { P0 = 0; } if(K1 == 1 && K2 == 1 && S9 == 1 && S13 == 1) //无人抢答 { P0 = 0; //数码管全灭 beep = 1; //蜂鸣器发出长笛声 delay(500); //延时0.5秒 beep = 0; //蜂鸣器停止发声 } else if(K1 == 1 && K2 == 1) //有选手按下按键 { P0 = 0; //数码管全灭 } } }
原文地址: https://www.cveoy.top/t/topic/dsMg 著作权归作者所有。请勿转载和采集!