摘要:在平时各种竞赛的抢答过程中,光靠视觉是很难判断出哪组先答题,而且很难维持这个抢答的秩序,利用基于单片机的抢答系统可以很好的解决这一问题。本设计采用 AT89C51单片机,为6人抢答器,采用中断方式,独立式键盘扫描,以开关中的某个开关的按下(闭合)作为抢答按键。无人抢答时,6只数码管轮流循环显示1-6(跑马),谁先抢答,数码管停止跑马,6个数码管同时亮谁的编号,对应的数码管亮5次抢答人的编号,并发出声音提示,其后再有人按键,系统不予响应,直到复位键按下,开始下一轮抢答。经过调试使得系统达到预期目标。
关键词:抢答器;数码管;中断;单片机
1 设计内容
1.1设计目标
制作一个6人抢答器,以开关中的某个开关的按下(闭合)作为抢答按键。无人抢答时六只数码管轮流循环显示1-6的数字,当有人按下抢答开关时,数码管停止跑马,所有数码管同时显示抢答者的编号,并且在短暂的停留后,抢答者的数码管对应的编号连续亮五次并发出蜂鸣声。其后再有人按下抢答键均无效,直到按下复位键才继续进行新的一轮抢答。
1.2设计环境
Win7 Keil uVison2 Proteus7.8
2 各模块选择
2.1键盘模块
键盘是单片机系统中通用的输入设备,用于向系统输入数据或控制信息。键盘模块分为两种,一种是独立式键盘,另外一种是矩阵键盘。
独立式键盘: 独立式按键接口的设计优点是电路配置灵活,软件实现简单,但每个按键需占用一根I/O接线,若按键较多,资源浪费严重。适用于按键较少的场合。
矩阵键盘:矩阵式键盘由行线和列线组成,按键位于行线、列线的交叉点上。当键被按下,则其交点的行线和列线接通。行和列可分别用两个I/O口来控制。
虽然矩阵键盘提高了I/O口的利用率,它比较适用于大量键盘的场合,但是它的电路复杂,软件编程也相对比较复杂。本设计采用独立式键盘,键盘接口中使用多少根I/O线,键盘中就有几个按键,键盘接口使用了8根I/O口线,该键盘就有8个按键,这种类型的键盘,其按键比较少,且键盘中各按键的工作互不干扰。最简单的编码方式就是根据I/O输入口所直接反映的相应按键,按下的状态进行编码,称按键直接状态码,对于这样编码的独立式键盘,CPU可以通过直接读取I/O口的状态来获取按键的直接状态编码值,根据这个值直接进行按键识别,这样形式的键盘结构简单,按键识别容易。如下图1所示。
![d6b48a38c8e9c9619c68902a2c549a5e.png](https://i-blog.csdnimg.cn/blog_migrate/91aa4db7db3a9f6bd1cf3af3dae79ae2.jpeg)
2.2 抢答器显示模块
显示功能与硬件关系极大,当硬件固定后,如何在不引起操作者误解的前提下提供尽可能丰富的信息,全靠软件来解决。抢答器的组别号码显示可以采用液晶显示,也可以采用数码管显示。
LCD具有低功耗,画面效果好,分辨率高等特点,但由于只需显示组别数字,信息亮较少,且由于液晶是以点阵的模式显示各符号,编程工作量大,成本高。
数码管具有耐老化,防晒等特点,对外界环境要求低,易于维护,同时精确度高,操作简单,采用BCD编码显示数字,程序编译容易,价格便宜等特点,广泛应用于多数场合中。
数码显示是采用BCD编码显示数字,程序编译容易,资源占用较少。所以本设计就采用数码管显示。
LED显示器是由发光二极管显示字段的显示器件。在单片机应用系统中通常使用的是七段LED,这种显示器有共阴极与共阳极两种。本设计采用共阴级数码管。
共阴极LED显示器的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,该发光二极管则点亮。
![3764d45f72e6963c36e2a59c808dbcc6.png](https://i-blog.csdnimg.cn/blog_migrate/86866220c1c3d92f211151eeeb40733e.jpeg)
七段显示器与单片机接口:只要将一个8位并行输出口与显示器的发光二极管引脚相连即可。8位并行输出口输出不同的字节数据即可获得不同的数字或字符,如下表1所示。通常将控制发光二极管的8位字节数据称为段选码。
![0d81522c9474e10032162abe69ab4efd.png](https://i-blog.csdnimg.cn/blog_migrate/4805b114ab2e3823eca79a9d7f7fe4a6.jpeg)
N位LED显示器有N根位选线和8×N根段选线。根据显示方式不同,位选线与段选线的连接方法不同。段选线控制字符选择,位选线控制显示位的亮、灭。
![56ea5564e96c85d230b570553ae7d95e.png](https://i-blog.csdnimg.cn/blog_migrate/a6d87b389b38cb7237357a3ae4af6e1c.jpeg)
LED显示器有静态显示与动态显示两种方式。
(1) LED静态显示方式
各位LED的位选线连在一起接地或接+5V;
每位LED的段选线(a-dp)各与一个八位并行口相连。
在同一时间里每一位显示的字符可以各不相同。
(2) LED动态显示方式
将所有LED的段选线并联在一起,由一个八位I/O口控制,而位选线分别由相应的I/O口线控制。 如:8位LED动态显示电路只需要两个八位I/O口。其中一个控制段选码,另一个控制位选。
![c6efb95c1bc0545ac09739e36b0cbbfc.png](https://i-blog.csdnimg.cn/blog_migrate/ae46bf21de2ed0179eaeab6ef3f44be2.jpeg)
本设计由于用到较多的数码管,采用动态显示方式。
由于所有位的段选码皆由一个I/O控制,因此,在每个瞬间,8位LED只可能显示相同字符。要想每位显示不同的字符,必须采用动态扫描显示方式。即在每一瞬间只使某一位显示相应字符。在此瞬间,位选控制I/O口在该显示位送入选通电平(共阴极送低电平、共阳极送高电平)以保证该位显示相应字符,段选控制I/O口输出相应字符段选码。如此轮流,使每位显示该位应显示字符,并保持延时一段时间,以造成视觉暂留效果。
不断循环送出相应的段选码、位选码,就可以获得视觉稳定的显示状态。由人眼的视觉特性,每一位LED在一秒钟内点亮不少于30次,其效果和一直点亮相差不多。显示电路图如下图5所示。
![70b7dcc4e81e5f612fd6af2944dea889.png](https://i-blog.csdnimg.cn/blog_migrate/b393bcf56be15dc8759a6f573d2e6589.jpeg)
2.3 蜂鸣器模块
蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、汽车电子设备、电话机、定时器等电子产品中作发声器件。由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O 口是无法直接驱动的,所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。如图6所示。
![74b18d5f110946469a1d77dcc705341c.png](https://i-blog.csdnimg.cn/blog_migrate/3538e38b59d7f6fe829b3d0fb0f08183.jpeg)
2.4 时钟电路和复位电路
单片机的时钟信号用来提供单片机内各种微操作时间基准,8XX51单片机的时钟信号通常有两种电路形式:内部振荡方式和外部振荡方式。
内部振荡方式是在引脚 XTAL1和 XTAL2外接晶体振荡器(简称晶振)。内部振荡方式所得的时钟信号比较稳定,并且由于AT89C51具有内部振荡器(需外接晶振,本设计采用12MHz),所以采用内部振荡方式。
单片机的复位引脚RST出现5ms以上的高电平时,单片机就完成了复位操作,本设计采用双复位,即上电复位和开关复位。上电复位就是利用电容充电过程在电阻上产生持续一定时间的高电平,得到复位信号。时钟电路和复位电路如图7所示。
![b1f55553685e67013c31851c215ccf9d.png](https://i-blog.csdnimg.cn/blog_migrate/baa6ddba73e2eda3f839dee16ee1712f.jpeg)
电容器C1、C2起稳定振荡频率、快速起振的作用。电容值一般为 5~30PF。
2.5 六人抢答器总原理图
本设计单片机采用AT89C51,使用独立式键盘和数码管显示,如图8所示。
![ac731820e0c815f0bbd1d91cc44ba3b4.png](https://i-blog.csdnimg.cn/blog_migrate/230c0cdb4e81db7c90fa0de8d24fce55.jpeg)
其中P1.0~P1.5所接的开关为抢答开关,P3.2所接的开关为复位开关,按下即可进行新的一轮抢答。
3 软件设计过程
3.1 抢答系统的整个流程图
通过AT89C51的控制,从而构成了整个电路,总流程图如图9所示。
![eb70c95ae1a3808e6e8150b4cf4280de.png](https://i-blog.csdnimg.cn/blog_migrate/06a6e4cde65c50aeabaf35e7e05ce094.jpeg)
![5eba0108a9dca4ea409bca1d8742a8b0.png](https://i-blog.csdnimg.cn/blog_migrate/bbfd7d806262441bfcefca19471dcd53.jpeg)
4 调试过程
4.1 调试的基本方法
本设计软件调试的模块包括显示功能模块、抢答按键功能模块以及报警功能模块。各个独立模块功能调试成功后,联机调试,将这些模块程序通过主程序合并在一起,对主程序进行调试,并运行一段时间,看程序是否稳定达到预期效果。本设计才用Keil 调试和Proteus软件仿真调试。
在keil软件编写好程序后,生成.hex的文件,如下图10所示:
![70c1b472a0c8b74c3ce2a56676a4443f.png](https://i-blog.csdnimg.cn/blog_migrate/c368bdde4e54f7c0d1dcc952e7fadf2a.jpeg)
在protues软件里双击51单片机模块,选择刚生成的hex文件,如下图11的界面。
![376b4796ab264a8b97ccae8afb43e476.png](https://i-blog.csdnimg.cn/blog_migrate/ea78c326cc89a806fe6b8fdd4f26a1af.jpeg)
最后单击运行按钮观察现象。
4.2 调试的过程及问题分析
数码管显示调试:数码管跑马显示后,加入闪烁之后,不能退出闪烁,经过多次试验之后把闪烁的for语句放在while前,使得这问题得以解决。
蜂鸣器模块调试:当按下抢答按键的时候,蜂鸣器不能发出警报声,经过仔细检查代码以及分析电路模块,原因是蜂鸣器的电压太大了。因为在选用蜂鸣器的时候系统设置电压为12V,而C51芯片引脚输出电压一般为3V左右,显然小于蜂鸣器的驱动电压,如果把蜂鸣器的驱动电压设为2V,蜂鸣器就能完全驱动,从而发出响声。
4.3 仿真结果
以1号选手抢答成功为例。
上电后,无按键操作的时候数码管轮流循环显示1-6,即实现了跑马灯的功能,仿真结果如下图12。
![e5f31b9867ae9a4cd31b25b73c9c173f.png](https://i-blog.csdnimg.cn/blog_migrate/3a5b77a3568fbfd611c163ca3437faf6.jpeg)
当按下1按键时的结果如下图13。
![c1785e316504c29ac20e79110928740e.png](https://i-blog.csdnimg.cn/blog_migrate/ffc1e3bd02568a23cdb8b1fedf6962ca.jpeg)
所有数码管同时显示抢答者的编号后,最后抢答者的编号在自己对应的数码管里亮5次,同时可以听到蜂鸣器发出的警报声,如下图14所示。
图14 抢答者的编号亮5次停止
此后其他抢答者再按抢答键均无效,直到按下复位键后继续新的一轮抢答,按下复位键后继续循环显示1-6,如下图15。
![4e310da70ef71e337cc5a15f497d19ba.png](https://i-blog.csdnimg.cn/blog_migrate/854d1674b6eeb34d9120031dc0b64b80.jpeg)
5 设计总结
5.1 抢答系统的特点
⑴该产品的互换性好,响应速度快,抗干扰能力强,外围电路简单易懂,因此相对来说体积小。
⑵该系统能用软件的方式设计硬件,所以用软件方式设计的系统向硬件系统的转换是由有关开发软件自动完成的,易操作。
⑶具有具体数字显示的功能。
⑷可以从以前的组合设计转向真正的自由设计,所以设计的移植性好,效率高。可适合大规模的现场制作。
⑸利用按钮进行输入,输入简单。
⑹具有智能报警的功能。
⑺因为整个系统可集成在一个芯片上,因此体积小,功耗低,可靠边性更高。
5.2 设计心得
本设计在深入理解单片机原理的基础理论上,主要设计了单片机实现各个功能的模块,最终实现了抢答器的功能。在这次课程设计中,运用了以前所学的专业知识,更加巩固了知识和对理论有了更深的理解,在设计程序之前,要有一个较为清晰的思路和程序流程图,不能妄想一次就做好整个程序,而要一个一个模块的去实现功能,最后经过反复的修改,整合成整个程序。在设计过程中,掌握了分析单片机应用系统,调试简单C51程序以及撰写设计报告的能力提高了发现问题、分析问题和解决问题的能力,做到将所学的理论知识运用到实际生活中。
欢迎大家点赞转发收藏评论,私信发源代码哦