智能抢答器的设计与制作
来源:用户上传
作者: 沈德强
[关键词]智能抢答器 STAR51仿真器键盘 定时器
智能抢答系统接口的硬件设计主要包括:4*4键盘电路、LCD显示电路、报警电路等几部分。按键分两个部分:一部分按键对应选手的号码,即当在规定的时间内第一个按键,对应号码就会在显示屏上显示。另外一个按键为复位键,由主持人操控,键按下则清屏并开始计时。同时用LCD液晶显示器来完成显示功能。具体操作过程为:开始新的一轮答题时,主持人按复位键,初值为60秒的定时器开始倒计数,并在LCD显示。若此时有选手按下按键答题,则单片机扫描输入该选手的号码,并输出控制LCD显示该号码,同时封锁其他选手按键;若一轮抢答过程中,无人按键答题,定时时间到则蜂鸣器响报警,并禁止任何选手按键。
为了减少硬件开销,本系统设计采用4*4矩阵键盘,即键盘上的键按行列组成矩阵,在行列的交点上都对应有一个键。为判定有无键被按下(闭合键)以及被按键的位置,可使用两种方法:扫描法和翻转法。扫描法比较普遍,在智能抢答器设计中,我们选用扫描法。其工作原理为:
(1)判定有没有键按下。键盘的行线一端经电阻接+5V电源,另一端接单片机输出I/O口。各列线的一端接单片机的输I/O口,另一端经电阻接+5V电源。为判定有没有键被按下,可先经单片机输出口向所有行线输出低电平0,然后再从单片机输入口输入各列线状态。若列线状态皆为高电平,则表明无键按下;若列线中有低电平,则表明有键按下。
(2)去抖动。当键盘扫描表明有键被按下之后,紧接着应进行去抖动处理。因为常用键盘的键实际上就是一个机械开关结构,被按下时,由于机械触点的弹性及电压突跳的原因,触点闭合或短开的瞬间会出现电压抖动,抖动时间长、短与键的机械特性有关,一般为5~10ms。而键的稳定闭合时间和操作者的按键动作有关,大约为十分之几秒到几秒不等。
(3)判定按键的位置。在矩阵键盘中若有键按下时,被按键处的行线、列线被接通,使穿过闭合键的那条列线变为低电平。因此我们只要在单片机行线输出口中逐行输出0,如果某列有按键,则该列线输入为0,并中止扫描,计算输出键值;若无按键,则列线输入全部为1,继续扫描,直到找到按键为止。4*4矩阵键盘可提供0~15编号,因此可用于15路抢答。我们在程序设计中只用了7路,当抢答路数增多时,只需适当改变软件程序即可。
调试问题分析:(1)按键的问题。在开始设计时,我们首先遇到的是按键的问题,就是在抢答开始后第一位按键者按键后,如何让后面的按键者的编号不读取,不覆盖第一位答题者编号。
(2)定时器的问题。刚开始设计时,我们采用c语言2个for语句来分别控制个位和十位的方法来达到60秒计时,但倒数至0后,就出现乱码,即软件延时法行不通。经过考虑,我们决定利用AT89C52的内部资源定时/计数0来实现定时的功能。采用此方法后,解决了乱码出现的问题,达到了预期的目的。
(3)库程序的调用。在我们编写完程序,但编译没通过,出现了2个错误,分别是:少分号和大括号不配对问题,但经检查实际并不存在此问题。并且程序本身经反复查看和研究也没问题,之后经过一步步分析,发现在程序开头少调用一个库,即#include “def.h”,当时我们抱尝试的心情增加该语句,结果程序正常运行.
(作者单位:浙江杭州师范大学钱江学院计算机041)
转载注明来源:https://www.xzbu.com/2/view-468935.htm