基于单片机控制的抢答器设计 下载本文

内容发布更新时间 : 2024/10/20 21:10:07星期一 下面是文章的全部内容请认真阅读。

龙源期刊网 http://www.qikan.com.cn

基于单片机控制的抢答器设计

作者:张成法 王德才 李琴

来源:《电子技术与软件工程》2016年第21期

摘 要本文利用AT89C52单片机、1位共阳极数码管和8个独立式按键设计了8路抢答器。该抢答器设计简单,实用性强。 【关键词】单片机 数码管 独立式按键 1 引言

抢答器是一种广泛应用于各类知识竞赛和文艺活动等场合的设备。本文利用单片机设计了8路抢答器系统,该系统要求用8个独立式按键作为抢答输入按键,序号分别为0~7,当某一参赛者首先按下抢答按钮时,在数码管上显示参赛者的序号,表示抢答成功,此时抢答器不再接受其他输入信号,直到按下系统复位按钮,系统再次接受下一轮的抢答输入。 2 系统硬件设计

本系统是由AT89C52单片机、晶振电路、复位电路、S0、S1、S2、S3、S4、S5、S6、S7这8个独立按键,4.7kΩ的电阻排RP1、一个共阳极LED数码管,8个510Ω的电阻构成的。 LED数码管由8个发光二级管(以下简称段)构成,通过不同的发光字段组合可用来显示符号“”、数字0~9、小数点“.”、字符A~F、Y、U、R、H、L和P等。在本系统中用1位共阳极LED数码管作为显示器件,显示抢答器的状态信息,由于本系统只用到一个数码管,采用静态连接方式将其与单片机的P1口连接。

8个独立按键S0、S1、S2、S3、S4、S5、S6、S7连接到P0口,将与P0.0引脚连接的按键S0作为“0”号抢答输入,与P0.1引脚连接的按键S1作为“1”号抢答输入,依次类推。S0~S7这8个独立按键都单独占用一根I/O端口线,适用于按键数目比较少的应用场合,优点是软件结构简单。

电路中P0口外接的上拉电阻是保证按键断开时,I/O端口为高电平;按键按下时相应端口为低电平。 3 系统软件设计

程序设计思路:系统上电时,数码管显示“”,表示开始抢答,当记录到最先按下的按键序号后,数码管将显示该参赛者的序号,同时无法再接受其他按键的输入;当系统按下复位按钮S8时,系统显示“”,表示可以接受新一轮的抢答。

龙源期刊网 http://www.qikan.com.cn

定义数组disp[ ]用来存放共阳极数码管显示码表{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0xbf},显示码表中的数值分别对应十进制数字0~7,在这个数组定义语句中,关键字code是为了把canxu[ ]数组存储在片内程序存储器ROM中,该数组与程序代码一起固化在程序存储器中。

定义一个变量key用来存放8个独立按键的按键信息。单片机刚上电的时候,数码管显示“”,表示开始抢答,通过key=P0语句,将P0口的按键信息赋给变量key,也就是第一次读按键状态,按键在闭合和断开时,触点会存在抖动现象,利用延时函数delay(1200)将按下时抖动的时间消除,再执行key=P0语句,再一次将P0口的按键信息赋给变量key,也就是第二次读按键状态,此时如果从P0口得到的按键信息是0xfe的话,那么就说明是第0个独立按键被按下去了,此时在LED数码管上显示十进制数字“0”,表明第0号参赛者抢答成功。如果从P0口得到的按键信息是0xfd的话,那么就说明是第1个独立按键被按下去了,此时在LED数码管上显示十进制数字“1”,表明第1号参赛者抢答成功。

依次类推,如果从P0口得到的按键信息分别是0xfb 、0xf7、0xef、0xdf、0xbf、0x7f的话,那么就说明分别是第2、3、4、5、6、7个独立按键被按下去了,此时在LED数码管上分别显示十进制数字“2”、“3”、“4”、“5”、“6”、“7”,表明第2、3、4、5、6、7 号参赛者抢答成功。

程序中用switch......case......语句来判断S0~S7这8个独立按键中的哪个按键被按下去了,同时在数码管上显示相应的按键序号。 部分程序如下所示: key=P0; //第一次读按键状态 delay(1200); //延时消抖 key=P0; //第二次读按键状态

switch(key) //根据按键的值进行多分支跳转 {

case 0xfe: P1=canxu[0];yanshi(10000);while(1);break;// 按下S0键,数码管显示0,待机

case 0xfd: P1=canxu[1]; yanshi(10000);while(1);break;// 按下S1键,数码管显示1,待机

龙源期刊网 http://www.qikan.com.cn

case 0xfb: P1=canxu[2]; yanshi(10000);while(1);break;// 按下S2键,数码管显示2,待机

case 0xf7: P1=canxu[3]; yanshi(10000);while(1);break;// 按下S3键,数码管显示3,待机

case 0xef: P1= canxu [4]; yanshi(10000);while(1);break;//按下S4键,数码管显示4,待机

case 0xdf: P1= canxu [5]; yanshi(10000);while(1);break;//按下S5键,数码管显示5,待机

case 0xbf: P1= canxu [6]; yanshi(10000);while(1);break;//按下S6键,数码管显示6,待机

case 0x7f: P1= canxu [7]; yanshi(10000);while(1);break;//按下S7键,数码管显示7,待机

default: break; } } } 4 结束语

本文从系统硬件设计和软件设计两方面详细阐述了8路抢答器的设计方法, 并在proteus软件中对其进行了仿真,达到了预期目标,该8路抢答器设计简单,实现容易,实用性强。 参考文献

[1]孙军辉.基于单片机应用的多路无线抢答器的设计[J].中国现代教育装备,2012. [2]邹显圣.基于单片机控制的智能抢答器研究[J].电子设计工程,2011. 作者简介

张成法(1984-),男,山东省青州市人。硕士研究生学历。研究方向为单片机与嵌入式系统。 作者单位