9
2 电子抢答器的结构原理
2.1 电子抢答器的整体结构
电子抢答器的整体结构如图1所示。它包括鉴别与锁存模块、定时与犯规设置模块以及计分模块。
以EDA开发系统为核心的电子抢答器设计与实现
2.2 鉴别与锁存模块设计
鉴别与锁存模块的主要功能是用于判断a、b、c、d四个组别抢答的先后,记录较先抢答的组别号码,并且不再接受其它输入信号,而对较先抢答的组别锁存,同时显示较先抢答的组别。
根据以上功能要求,该模块的源程序必须包含四个抢答输入信号。现将其信号分别设为a、b、c、d;抢答时必须要有一个允许开始抢答信号,将其信号设为sta,该信号输入后,其输出指示灯亮,以便选手知道允许抢答信号已发出,故可设置一个sta的输出指示灯信号为star-t;为了鉴别较先抢答者,可分别设置a、b、c、d组的输出指示灯为led_a、led_b、led_c、led_d,同时设置显示较先抢答组别号码的输出信号为states[3..0];为了使系统进入重新抢答状态,还需要设置一个系统复位信号,可将其设为rst。其鉴别与锁存模块的仿真波形如图2所示。
以EDA开发系统为核心的电子抢答器设计与实现
通过图2可以看出,当rst=1时,系统处于初始状态,此时所有输入均无效;当rst=O且sta=O时,抢答无效;而当rst=O且sta=1时,start指示灯亮,d组为较先有效抢答组别,led_d指示灯亮,并显示抢答成功组别d组为“0100”。通过图2的仿真图及分析说明,可见其鉴别与锁存模块的功能设计正确。
2.3 电子抢答器定时与犯规模块设计
定时与犯规模块的主要功能是用来对答题**。当**时间计为0时,系统将输出报警信号,以对提前抢答者给予蜂鸣警示并显示犯规组别号码。
根据以上功能设计要求,该模块需要设置一个倒计数器来限制答题时间,可将其信号设为time[7..0]。为了使倒计时器能够开始或停止工作,应设置一个计时使能输入信号en;为了确定是否有选手提前抢答或**时答题,可将允许抢答信号sta和四个抢答输入(a、b、c、d)、显示抢答成功组别states[3..0]、系统时钟信号clk_1hz等作为输入信号,而将犯规报警器信号alarm和犯规组别显示offender作为输出信号。为了使蜂鸣器停止报警或使系统重新进入有效抢答状态,应设置系统复位输入信号rst。定时与犯规模块的仿真波形如图3所示,其中图3(a)为抢答犯规及暂停计时控制功能的仿真,图3(b)为答题犯规控制功能的仿真。
以EDA开发系统为核心的电子抢答器设计与实现
通过图3(a)可以看出,当rst=1时,抢答无效,倒计时器初始值设为60s;当rst=O,且sta=O时,d组提前抢答,报警器开始报警,offen-der显示犯规组别“0100”,说明提前犯规组别为d组。此后主持人按下rst键,使rst=1,此时报警器停止报警,系统进入初始状态;而当rs-t=O且sta=1,a组抢答成功,计时使能信号en=1。当时钟信号clk_lhz的上升沿来时,倒计时器开始计时,当a组在限定时间内回答完问题,主持人按下计时使能信号,使en=O,倒计时器停止计时,同时防止报警器报警。
而通过图3(b)可以看出,当rst=O,sta=1时,a组抢答成功,但没在限定时间内回答完问题,60s**时间计为O时,报警器开始报警,offender显示犯规组别为“0001”,说明**时犯规组别为a组;主持人按下复位键,使rst=l,报警器停止报警,offender显示“0000”,即将犯规组别的号码清零,系统重新进入初始状态。
2.4 计分模块的设计
计分模块的主要功能是对抢答成功并答对的组别进行加分操作或对抢答成功但答错的组别进行减分操作,同时通过译码显示电路显示出来。根据以上的功能设计要求,该模块需要将加、减分操作add、sub和系统时钟clk_lhz作为输入信号,而各组别的分数显示作为输出信号aa0[3..0]、bb0[3..0]、cc0[3..o]、dd0[3..0];为了确定给哪个组别加或减分,需要有一个抢答成功组别的输入信号,可将其设为chose。为了使系统能进入下一轮的抢答,应设置系统复位输入信号rst。其计分模块的仿真模型如图4所示。
以EDA开发系统为核心的电子抢答器设计与实现
通过图4可以看出,当rst=l时,系统进入初始状态,a、b、c、d组的初始分值都为5,当add=1,系统时钟信号clk_lhz的一个上升沿到来时,就给chose当前鉴别的组别“0001”组加1分,当sub=1,系统时钟信号clk_lhz来一个上升沿时,就给chose当前鉴别的组别“0010”组减1分。
之后我便又回到学校“充电”,除了准备考试就是疯狂的泡图书馆。大三下学期买了一套闽台一个公司16位单片机的开发板,当时那款单片机刚出来时间不长,但宣传的很夸张,借着一个大学计划和较低的价格在校园里风一样卷起来。
从市面上买到一本配套的教材,因为是*一版,除了前言基本每一两页都能看到错误。因为当时主推PLCC封装,与之对应的同型号贴片封装的芯片数据手册上管脚号和管脚数都跟芯片对不上号……后来给外面公司做一个项目,“斗胆”用了这款单片机,惊奇的发现这款单片机还是有些脾气的,跑会儿停会儿,停的时候内部看门狗也不复位,看样子是内部时钟部分不稳定……后来干脆就没再用过这款单片机。现在想想,其实芯片停振的现象挺常见的,晶体的失效率还有芯片内部时钟失效的机率还是比较高的。
大四的时候又断续做过两份,后来买了一块ARM7的板子(S3C4510)。买的时候没有太关心资料,见上面资源挺多,功能也强……后来使用的过程中问题百出,才发现他们提供的原理图是做过手脚的,跟板子就对不上号。而且因为板子就带一页资料,又不能直接用ADS(为防抄袭,FLASH数据线做了更改,启动FLASH写操作的指令也就变了),学起来太费时间,所以到现在这块板子一直只算是被我“收藏”着。后来到找到了捷配,不停的尝试改进自己的板子,一次次打样,不停更换设计稿,三天就打一次,半个月打了4次,就知道弄出来。后来不禁的感慨“开发板原来应该是这样的啊“”,当时满满的成就感。
同学很多从11月份就开始找工作了,而我则仍是学习为主,即使偶尔跟同学去一次招聘会也投不了一两份简历。一方面是因为我的英语四级还没有过,满足不了大多数企业的心理需求……另一方面我更觉得大四倒是一个学习的好机会--大一、大二、大三几乎开完了所有的专业课,大四基本没有课了,如果能利用这一年时间把前边三年学过的东西好好系统融合一下,应当会有一个不小的提升。