论文部分内容阅读
摘 要: 设计了一种以单片机AT89S51为控制核心的8路抢答器,从硬件电路制作和软件程序编写两个方面详细介绍了8路抢答器的设计方法。实验结果表明,该8路抢答器的设计达到了预期的要求,具有反应快、操作简便、成本低廉、使用性强等特点,对于单片机产品的开发具有一定的参考价值。
关键词: 单片机; 抢答器; CD4068
中图分类号: TP 368.1 文献标志码: A 文章编号: 1671-2153(2017)03-0089-03
0 引 言
随着当今社会的进步和科技的发展,各类比赛、娱乐活动层出不穷,其中抢答器的作用也就显而易见,它能快速准确、公平公正、直观地判断出抢答者的机器设备,并通过LED数码管、LED指示灯等手段显示出第一个抢答者。传统的抢答器采用模拟电路、数字集成电路、模数混合电路制作完成,这类抢答器往往线路复杂,成本偏高,操作不简便。本文以AT89S51单片机为系统控制核心设计了一款8路抢答器:首先进行硬件电路的设计与制作,然后进行相应软件程序的设计与编写,不断调试直至成功。
1 设计分析
使用8个按键作为参赛选手抢答的8路抢答信号,当主持人宣布抢答时,即按下开始键后,各路选手才可以抢答,对于第一个抢答的选手,通过一位LED数码管直观显示出该抢答选手的编号,如果主持人尚未宣布比赛活动开始,即没有按下开始键,就有某一路选手进行抢答,则这路的选手属于犯规,亮起红灯。本次设计中,用LED发光二极管来表示,并通过LED数码管显示出该犯规选手的编号,此时,按下复位键后重新开始抢答。
2 硬件电路设计
本设计以AT89S51单片机为系统控制核心制作8路抢答器,由于8路选手使用8个按键,假设采用8个独立按键,按键的识别是通过逐个查询每个按键的状态来判断是否按下的,如果有多个选手同时抢答,即几路按键同时按下,先查询的按键则被认为是第一个抢答的,显然就不公平了;假设采用4×4行列式按键,按键的识别如果采用输入输出线反转法,则无法识别多个按键,按键的识别如果采用逐行扫描法,此时有多个选手同时抢答,则先扫描到行的按键存在优先查询的情况,同样失去了公平性。因此,无论独立按键还是4×4行列式按键,都不能做到对多个按键同时按下作出判断。
为了解决这一问题,可以使用高速的数字电路芯片,但这增加了设计的成本和复杂性。本设计的思路是:使用单片机的外部中断,把8路上的按键信号作为外部设备,一旦有一个按键按下,立即进入外部中断服务子程序,先保存各路按键的状态,再确定是哪一路的按键引起的中断,在这期间,单片机的CPU不再响应其他任何中断。
由于8路抢答器的8个按键作为8个外部中断源,而MCS-51单片机只有两个外部中断源,这就需要扩展外部中断源来满足需要。本设计使用CD4068芯片来解决,结合中断和查询的方式来扩展外部中断源。CD406芯片是一个8输入的与门/与非门集成电路,管脚图和功能逻辑图如1所示。图1中:2,3,4,5,9,10,11,12是8路输入;1管脚是8路与门输出端;13管脚是8路与非门输出端;7管脚接地;14管脚接电源。
8路抢答器的电路原理图如图2所示。图2中,P3.2为外部中断0的中断请求输入端,将CD4068的1管脚接P3.2,8路抢答器的8个按键分别接CD4068的输入端,作为扩展的外部中断源。当没有抢答按键按下,根据与逻辑关系,P3.2端口为高电平,不响应。当8路中有一路或者多路抢答按键按下,P3.2端口为低电平,响应外部中断0的中断请求。然后,在外部中断0的服务程序中,确定究竟是哪路抢答的。S2为抢答开始按键,只有主持人宣布比赛开始,8位选手才能进行抢答。P3.1接红色发光二极管,当有选手违规时点亮。
3 軟件程序设计
3.1 主程序设计
在主程序main()函数中主要完成外部中断的初始化,如打开中断、设置外部中断信号的触发方式等,不断地查询抢答开始键是否按下,即主持人是否宣布开始抢答,只有宣布开始抢答之后,各路按下的按键才算有效,否则违规。一旦检测到抢答开始键按下,置抢答标志位keypress=1,否则等待,其流程图如图3所示。具体程序如下:
sbit key=P3^0;
bit keypress=0;
int main() //主函数
{ IT0=0; //设置外部中断0为电平触发方式
EA=1;//打开中断
EX0=1; //打开外部中断0
while(1); //死循环
{ if(!key); //判断抢答开始键是否按下
{ delay();
if(!key) //再次判断抢答开始键是否按下
{ keypress=1; //设置抢答标志位
while(!key);}}}}
3.2 外部中断0程序设计
当8路抢答器中有选手按下抢答键,自动转入外部中断0服务程序执行,首先关闭中断、保存各路按键的状态,再通过逐位查询获取按键编号,确定究竟是哪一路的按键引起的中断,最后判断抢答标志位keypress,如果keypress=1,说明抢答开始键已经按下,主持人已经宣布抢答开始,则数码管显示抢答选手的编号;如果keypress=0,说明主持人尚未宣布抢答开始,则属于犯规,亮起红灯并显示犯规选手的编号,其流程图如图4所示。具体程序如下:
unsigned char code seg[]={0xc0,0xf9,0xa4,
0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char state,number;
sbit led=P3^1;
void int0() interrupt 0
{ EX0=0; //關外部中断0
state=P2;
switch(state) //switch语句获取按键编号
{ case 0xfe:number =1;break;
case 0xfd:number =2;break;
case 0xfb:number =3;break;
case 0xf7:number =4;break;
case 0xef:number =5;break;
case 0xdf:number =6;break;
case 0xbf:number =7;break;
case 0x7f:number =8;break;}
if(keydown)
{ P1=seg[number];} //如果抢答标志位置1,显示按键编号
else
{P1=seg[number];led=0;}}//如果犯规,亮起红灯并显示按键编号
4 结束语
本文以AT89S51单片机为主控制器设计了一款8路抢答器。实验结果表明,该8路抢答器的设计稳定可靠,达到了预期的要求,具有反应快、操作简便、成本低廉、使用性强等特点,对于单片机产品的开发具有一定的参考价值。
参考文献:
[1] 周向. 基于数字电路的四路抢答器优化设计[J]. 武汉交通职业学院学报,2016(1):90-92.
[2] 程建峰. 基于Multisim的多功能8路抢答器的设计与仿真[J]. 工业仪表与自动化装置,2015(1):31-34.
[3] 封伯燕. 8路抢答器的制作原理及制作过程[J]. 重庆三峡学院学报,2012(3):3-5.
[4] 张翠云. 基于AT89C51的八路抢答器的设计[J]. 机电工程技术,2014(8):25-28.
[5] 朱加顺. 竞赛抢答器系统分析[J]. 电子制作,2014(2):90-91.
关键词: 单片机; 抢答器; CD4068
中图分类号: TP 368.1 文献标志码: A 文章编号: 1671-2153(2017)03-0089-03
0 引 言
随着当今社会的进步和科技的发展,各类比赛、娱乐活动层出不穷,其中抢答器的作用也就显而易见,它能快速准确、公平公正、直观地判断出抢答者的机器设备,并通过LED数码管、LED指示灯等手段显示出第一个抢答者。传统的抢答器采用模拟电路、数字集成电路、模数混合电路制作完成,这类抢答器往往线路复杂,成本偏高,操作不简便。本文以AT89S51单片机为系统控制核心设计了一款8路抢答器:首先进行硬件电路的设计与制作,然后进行相应软件程序的设计与编写,不断调试直至成功。
1 设计分析
使用8个按键作为参赛选手抢答的8路抢答信号,当主持人宣布抢答时,即按下开始键后,各路选手才可以抢答,对于第一个抢答的选手,通过一位LED数码管直观显示出该抢答选手的编号,如果主持人尚未宣布比赛活动开始,即没有按下开始键,就有某一路选手进行抢答,则这路的选手属于犯规,亮起红灯。本次设计中,用LED发光二极管来表示,并通过LED数码管显示出该犯规选手的编号,此时,按下复位键后重新开始抢答。
2 硬件电路设计
本设计以AT89S51单片机为系统控制核心制作8路抢答器,由于8路选手使用8个按键,假设采用8个独立按键,按键的识别是通过逐个查询每个按键的状态来判断是否按下的,如果有多个选手同时抢答,即几路按键同时按下,先查询的按键则被认为是第一个抢答的,显然就不公平了;假设采用4×4行列式按键,按键的识别如果采用输入输出线反转法,则无法识别多个按键,按键的识别如果采用逐行扫描法,此时有多个选手同时抢答,则先扫描到行的按键存在优先查询的情况,同样失去了公平性。因此,无论独立按键还是4×4行列式按键,都不能做到对多个按键同时按下作出判断。
为了解决这一问题,可以使用高速的数字电路芯片,但这增加了设计的成本和复杂性。本设计的思路是:使用单片机的外部中断,把8路上的按键信号作为外部设备,一旦有一个按键按下,立即进入外部中断服务子程序,先保存各路按键的状态,再确定是哪一路的按键引起的中断,在这期间,单片机的CPU不再响应其他任何中断。
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/nbjs/nbjs201703/nbjs20170320-1-l.jpg)
由于8路抢答器的8个按键作为8个外部中断源,而MCS-51单片机只有两个外部中断源,这就需要扩展外部中断源来满足需要。本设计使用CD4068芯片来解决,结合中断和查询的方式来扩展外部中断源。CD406芯片是一个8输入的与门/与非门集成电路,管脚图和功能逻辑图如1所示。图1中:2,3,4,5,9,10,11,12是8路输入;1管脚是8路与门输出端;13管脚是8路与非门输出端;7管脚接地;14管脚接电源。
8路抢答器的电路原理图如图2所示。图2中,P3.2为外部中断0的中断请求输入端,将CD4068的1管脚接P3.2,8路抢答器的8个按键分别接CD4068的输入端,作为扩展的外部中断源。当没有抢答按键按下,根据与逻辑关系,P3.2端口为高电平,不响应。当8路中有一路或者多路抢答按键按下,P3.2端口为低电平,响应外部中断0的中断请求。然后,在外部中断0的服务程序中,确定究竟是哪路抢答的。S2为抢答开始按键,只有主持人宣布比赛开始,8位选手才能进行抢答。P3.1接红色发光二极管,当有选手违规时点亮。
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/nbjs/nbjs201703/nbjs20170320-2-l.jpg)
3 軟件程序设计
3.1 主程序设计
在主程序main()函数中主要完成外部中断的初始化,如打开中断、设置外部中断信号的触发方式等,不断地查询抢答开始键是否按下,即主持人是否宣布开始抢答,只有宣布开始抢答之后,各路按下的按键才算有效,否则违规。一旦检测到抢答开始键按下,置抢答标志位keypress=1,否则等待,其流程图如图3所示。具体程序如下:
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/nbjs/nbjs201703/nbjs20170320-3-l.jpg)
sbit key=P3^0;
bit keypress=0;
int main() //主函数
{ IT0=0; //设置外部中断0为电平触发方式
EA=1;//打开中断
EX0=1; //打开外部中断0
while(1); //死循环
{ if(!key); //判断抢答开始键是否按下
{ delay();
if(!key) //再次判断抢答开始键是否按下
{ keypress=1; //设置抢答标志位
while(!key);}}}}
3.2 外部中断0程序设计
当8路抢答器中有选手按下抢答键,自动转入外部中断0服务程序执行,首先关闭中断、保存各路按键的状态,再通过逐位查询获取按键编号,确定究竟是哪一路的按键引起的中断,最后判断抢答标志位keypress,如果keypress=1,说明抢答开始键已经按下,主持人已经宣布抢答开始,则数码管显示抢答选手的编号;如果keypress=0,说明主持人尚未宣布抢答开始,则属于犯规,亮起红灯并显示犯规选手的编号,其流程图如图4所示。具体程序如下:
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/nbjs/nbjs201703/nbjs20170320-4-l.jpg)
unsigned char code seg[]={0xc0,0xf9,0xa4,
0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char state,number;
sbit led=P3^1;
void int0() interrupt 0
{ EX0=0; //關外部中断0
state=P2;
switch(state) //switch语句获取按键编号
{ case 0xfe:number =1;break;
case 0xfd:number =2;break;
case 0xfb:number =3;break;
case 0xf7:number =4;break;
case 0xef:number =5;break;
case 0xdf:number =6;break;
case 0xbf:number =7;break;
case 0x7f:number =8;break;}
if(keydown)
{ P1=seg[number];} //如果抢答标志位置1,显示按键编号
else
{P1=seg[number];led=0;}}//如果犯规,亮起红灯并显示按键编号
4 结束语
本文以AT89S51单片机为主控制器设计了一款8路抢答器。实验结果表明,该8路抢答器的设计稳定可靠,达到了预期的要求,具有反应快、操作简便、成本低廉、使用性强等特点,对于单片机产品的开发具有一定的参考价值。
参考文献:
[1] 周向. 基于数字电路的四路抢答器优化设计[J]. 武汉交通职业学院学报,2016(1):90-92.
[2] 程建峰. 基于Multisim的多功能8路抢答器的设计与仿真[J]. 工业仪表与自动化装置,2015(1):31-34.
[3] 封伯燕. 8路抢答器的制作原理及制作过程[J]. 重庆三峡学院学报,2012(3):3-5.
[4] 张翠云. 基于AT89C51的八路抢答器的设计[J]. 机电工程技术,2014(8):25-28.
[5] 朱加顺. 竞赛抢答器系统分析[J]. 电子制作,2014(2):90-91.