历史上的今天
返回首页

历史上的今天

今天是:2025年12月20日(星期六)

2022年12月20日 | 51单片机抢答器设计

2022-12-20 来源:zhihu

任务描述

某企业承担了某抢答比赛抢答器系统的设计,要求如下:①可同时供3名选手参加比赛,他们的编号分别是1、2、3,每名选手各用一个抢答按钮,按钮的编号与选手的编号相对应,分别是S1、S2、S3。②给主持人设置两个控制开关“START”和”END”,用来控制系统中抢答的开始和结束。③抢答器具有数据所存、显示和声音提示的功能。抢答开始前,若有选手按动抢答按钮,视为违规,要显示其编号,并长响蜂鸣器;抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在LED数码管上显示出选手的编号,同时蜂鸣器给出音响提示,此外,要封锁输入电路,禁止其他选手抢答。优先抢答选手的编号将一直保存到主持人将系统清零为止。


硬件电路图

元件清单


C语言程序

#include

unsigned char dip[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xfb,0x80,0x90};  //共阳极数码管段码

sbit KEY9=P3^1; //开始键

sbit KEY10=P3^2;    //结束键

sbit BUZZ=P3^0; //蜂鸣器

bit start_key(); //抢答开始键检测函数

bit end_key(); //抢答结束键检测函数

unsigned int number_key();   //选手按键扫描

void delay_20ms();   //延时函数

void buzz_on();   //蜂鸣器开关

void main()    //主函数

{

unsigned char key_number,n;

while(1)

{

P0=0xff;   //关闭数码管显示

BUZZ=1;   // 关闭蜂鸣器

if(start_key()==1)   //抢答允许检测

{   

key_number=number_key();    //抢答开始前检测有无选手违规

if(key_number==0)    //无人违规

 continue; //返回

 else P0=dip[key_number];    // 有人违规,显示违规选手号码

while(end_key()==1)    //主持人结束键没有按下则蜂鸣器长响

buzz_on();

}

if(start_key()==0)    //主持人开始键按下前无人违规抢答

{ //数码管显示“三”允许抢答

  P0=0Xb6;

while (end_key()==1)

{

n=0;

key_number=number_key(); //检测是否有选手抢答

if(key_number==0)

 continue;

while(key_number!=0)

{

 P0=dip[key_number]; //显示第一个选手抢答的号码

    for(;n<150;n++)

 buzz_on();    //蜂鸣器响一会儿

if(end_key()==0)    // 主持人结束键按下,结束本轮抢答

 break;

 }

 }

 }

 }

 }

 bit start_key()

 {

 if(KEY9==1)

 return 1; //返回值1表示主持人没有按开始键

 else

 delay_20ms();   //延时防抖

 if(KEY9==1)

 return 1;

 else

 return 0;

 }

 bit end_key()

 {

 if(KEY10==1)

 return 1;

 else

 return 0;

 }

 unsigned int number_key()

 {

 unsigned char key_state=0;

 key_state=P1;

 if(key_state==0xff)

 return 0;    //返回0无选手抢答

 else

 {

 if(key_state==0xfe)   //1号抢答

 return 1;

 else if(key_state==0xfd) //2号抢答

 return 2;

 else return 3; //3号抢答

 }

 }

 void buzz_on()

 {

 unsigned char i;

 BUZZ=0;

 for(i=0;i<26;i++)

 delay_20ms();

 BUZZ=1;

 }

 void delay_20ms()

 {

 unsigned int j;

 for(j=0;j<10;j++);

 }


推荐阅读

史海拾趣

BCD Semi(Diodes)公司的发展小趣事

BCD Semi(Diodes)公司自成立以来,一直致力于模拟半导体产品的设计和制造。在某一时期,公司研发团队成功突破了某项关键技术,开发出了具有更高性能、更低功耗的新型模拟器件。这一技术突破使得BCD Semi的产品在市场上更具竞争力,赢得了众多客户的青睐。随着产品升级的不断推进,公司逐渐在模拟半导体领域树立了良好的口碑。

东晨(DC)公司的发展小趣事

在电子行业的激烈竞争中,东晨(DC)公司凭借一项革命性的技术突破——高效能低功耗的芯片设计,迅速崛起。该公司投入大量研发资源,成功开发出了一款性能卓越、能耗极低的芯片,这一创新成果为智能手机、平板电脑等移动设备提供了更长的续航时间和更快的运行速度。凭借这一技术优势,东晨(DC)公司迅速获得了市场的认可,产品销量节节攀升。

American Power Design Inc公司的发展小趣事

面对全球对可再生能源和绿色技术的需求增长,APDI及时调整战略,将重点放在了绿色能源技术的研发和应用上。公司投入大量资源研发高效太阳能电池板和储能系统,并与政府和企业合作推广清洁能源解决方案。这一战略不仅使APDI在环保领域获得了良好的声誉,也为其带来了可观的商业回报。

BENCENT公司的发展小趣事

为了扩大市场份额和提高品牌知名度,BENCENT公司开始积极参与国内外各类电子展会和论坛,与潜在客户和合作伙伴建立联系。同时,公司还加大了营销宣传力度,通过线上线下的方式提升品牌曝光度。这些努力不仅带来了更多的销售机会,也提升了公司在行业内的地位和影响力。

Hmc Inc公司的发展小趣事

“MemoryCube Innovations”公司在HMC技术的商业化过程中,采取了市场细分和差异化竞争的策略。该公司针对不同的应用场景,推出了多款具有针对性的HMC产品。例如,针对高性能计算领域,MemoryCube Innovations推出了高带宽、低延迟的HMC产品;而针对数据中心市场,则推出了注重能效和可靠性的产品。通过精准的市场定位和差异化的产品策略,MemoryCube Innovations在竞争激烈的电子市场中脱颖而出。

DURACELL公司的发展小趣事

在开拓重庆市场时,DURACELL公司面临了巨大的挑战。当地电池市场竞争激烈,价格参差不齐。然而,DURACELL公司凭借其独特的营销策略和高质量的产品,迅速打开了市场。他们选择了与当地贸易代理商合作的方式进入市场,并通过“三步走式”的营销策略迅速占领了市场份额。这一成功案例展示了DURACELL公司灵活的市场策略和对品质的坚持。

问答坊 | AI 解惑

protel拼板.rar

本帖最后由 paulhyde 于 2014-9-15 03:01 编辑 protel拼板.rar  …

查看全部问答>

高精度频率基准----OCXO恒温晶振

这个是拆机的OCXO恒温晶振,具有很好的短期稳定性,拆机的东西,很便宜,才38元一个,内部工艺很考究。新的估计要上千元。 …

查看全部问答>

谁做过驱动啊?告诉我什么得什么样的流程啊,我假如我对scsi进行编程怎么办?

谁做过驱动啊?告诉我什么得什么样的流程啊,我假如我对scsi进行编程怎么办? PCI有13个关于scsi的针脚,怎么样的过程或流程给我说下被,如何编写?但是寄存器的首地址无法确定 该怎么做呢?…

查看全部问答>

Linux下CAN驱动问题(HMs30c7202) c_candrv-1.2.0

目前接手一项目,头有点大,CAN在运行过程中,会出现不能收发的情况,从新上电后正常 使用的是c_candrv-1.2.0驱动程序,个人感觉可能是使用方法不对 #define can0file \"/dev/can0\" #define can1file \"/dev/can1\" #define can2file \"/dev/can ...…

查看全部问答>

内存电路接口问题(你们注意了吗?)

昨天看了一下电路图,发现内存(SDRAM)和2440接口有点不可思议(后来发现ATmel的ARM也是这么接的),后来仔细对比。 发现问题在LDQM,UDQM这两个引脚,他们接到2440的四个nWBE引脚。内存资料是这么说的:Data Input/Output Mask Controls output ...…

查看全部问答>

有没有人用过 LoadAnimatedCursor 这个API啊?

环境 evc4, Standard SDK for wince 5.0 我在 resource.h 下这么定义 #define IDB_BITMAP1                     MAKEINTRESOURCE(104) #define IDB_BITMAP2    ...…

查看全部问答>

申请MSP-EXP430G2学习

感谢论坛提供这次机会!~…

查看全部问答>

vcredist_x86.exe 每次我一安装都出现这个提示,请问这是怎么回事,该怎么解决?谢谢

vcredist_x86.exe 每次我一安装都出现这个提示,请问这是怎么回事,该怎么解决?谢谢     无法访问 Windows Installer 服务 Windows Installer 没有正确安装时可能发生这种情况。 请与技术支持人员联系以获得帮助。…

查看全部问答>

TI官方 CCSv5使用教程~

很详细,,,从CCS特点到新建工程到插件,都有介绍,建议看看~~…

查看全部问答>