八路抢答器设计 ........................................................................................................... 2 一、引言 ....................................................................................................................... 2 二、设计要求: ........................................................................................................... 2 三、方案设计: ........................................................................................................... 2 四、系统核心AT89S52单片机简介 .......................................................................... 3
1 AT89S52单片机的特点 ........................................................................................................ 4 2 AT89S52芯片引脚及其功能特点介绍 ................................................................................ 4
五、硬件电路的设计 ................................................................................................... 6
1 CPU模块 ................................................................................................................................ 6 2 键盘模块 ............................................................................................................................... 7 3 得分显示、倒计时显示模块 ............................................................................................... 8 4 选手编号显示模块 ............................................................................................................... 8 5 发声模块 ............................................................................................................................... 8
六、软件电路设计 ....................................................................................................... 9
1 电路部分功能设计 ............................................................................................................... 9 2 程序流程图 ......................................................................................................................... 10 3 程序设计 ............................................................................................................................. 10
七、调试 ..................................................................................................................... 15 八、设计总结: ......................................................................................................... 15 参考文献: ................................................................................................................... 15
八路抢答器设计
Eight Roads Rob The Answer Machine Design
电子工程系 应电G08-3 周娜
摘要:本文主要以AT89S52 单片机为核心器件,设计实现了八路抢答器系统。利用C语言编程及单片机芯片与外围硬件电路来实现八路抢答、锁存、显示、定时、报警、清零和优先抢答等功能。工作时,用按键通过开关电路输入各路的抢答信号,经单片机的处理,输出控制信号,控制数码管和其它硬件工作。在数码管上显示优先答题组号以及答题之后的分数,从而实现整个抢答过程。
关键词:单片机 AT89S52 数码管 八路抢答器
一、引言
随着科学技术的发展和普及,各种各样放入竞赛越来越多,其中抢答器的作用也就显而易见。目前很多抢答器基本上采用小规模数字集成电路设计,使用起来不够理想,因此设计一更易于使用和区分度高的抢答器成了非常迫切的任务。现在单片机已进入各个领域,以其功耗小、智能化而著称,所以若有单片机来设计抢答器,更使以上的问题得以解决,针对以上的情况,本文设计出以AT8952单片机为核心的八路抢答器,它能根据不同的抢答输入信号,经过单品级的控制和处理并产生不同的与输入信号相对应的路数。最后通过数码管进行显示。
二、设计要求:
能够实现8 人抢答。
有40s计时限制,40s内无人抢答则视为弃权,有倒计时显示。 若抢答成功并回答正确时,裁判可以为选手加分。 能正确统计并显示选手的得分情况。
三、方案设计:
方案一:用数字电路制作,设计如图3-1所示,采用8D锁存器,优先编码器,译码器等数字电路组成。其电路功能比较单一,制作复杂,有一定技术缺陷。
解锁电路 开关阵列电 路 触发锁存电路 编码器 7段显示译码 数码管显示
图3-1 数字电路设计方框图
方案二::用单片机制作抢答器,系统设计如图3-2所示,包括键盘模块、选手显示模块、得分显示模块、倒计时显示模块、蜂鸣器模块、CPU模块等。其具有多功能,制作简单,便于调试。
键盘 裁判键 加分键 查分键 抢答键 单片机AT89S52 选手号与得分显示 倒计时显示 蜂鸣器
图3-2 单片机抢答器设计框图
通过对两个方案的选择和分析,由于方案二制作简单、成本较低、性价比好而且调试方便等原因。所以选择方案二的设计。
四、系统核心AT89S52单片机简介
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器,使用ATMEL公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
1 AT89S52单片机的特点
① 灵活的ISP在线系统编程。只需要一条ISP下载线就可以直接把PC上编好的程序写到单片机和程序存储器中,不需要购买仿真器、编程器、擦抹器和芯片适配器等设备。
② 32个可编程的I/O口线。为用户提供了丰富的I/O口资源。 ③ 6个中断源。
④ 2个16位定时/计数器。 ⑤ 128×8字节内部RAM。 ⑥ 全双工串行UART通道。 ⑦ 4.0~5.5V的工作电压范围。 ⑧ 1000次可重复擦写周期。
2 AT89S52芯片引脚及其功能特点介绍
单片机具有体积小、功耗低、功能强、性价比高、易于推广应用等优点,在自动化装置、智能仪器仪表、过程控制、通信、家用电器等许多领域得到日益广泛的应用。
AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止,如图1—1 所示。 ⑴ P0口(39 — 32脚)
P0口是一组8位准双向I/O口。作为输出口时,应外加上拉电阻,每位能驱动8个TTL逻辑电平。若作为输入口使用时,应先将“1”写入此口。当用地址/数据总线使用时,P0口是一个真正的双向接口。 ⑵ P1口(1 — 8脚)
P1口是一个具有内部上拉电阻的8位准双向I/O口。能驱动4个TTL逻辑电平,下面表1—1为P1口引脚第二功能。
引脚号 P1.0(1脚) P1.1(2脚) P1.5(6脚) P1.6(7脚) P1.7(8脚) 第 二 功 能 T2(定时/计数器T2的外部记数输入),时钟输出 T2EX(定时/计数器T2的捕捉/重载出发和方向控制) MOSI(用于系统内部编程) MISO(用于系统内部编程) SCK(用于系统内部编程) 表1—1 P1口第 二 功 能
图4—1 AT89S52 ⑶ P2口(21 — 28脚)
P2口是一个带有内部上拉电阻的8位双向I/O口,作为通用的I/O口使用时,与P1功能相同。与P0口不同的是P2口只能作为地址使用而不作为数据线使用。P2口也是准双向口。 ⑷ P3口(1 0— 17脚)
P3口除作为通用I/O口使用外,在实际应用中它的第二功能信号更为重要,这是与其他3组8为I/O口不同的地方。如下表1—2所示。
引脚号 P3.0(10脚) P3.1(11脚) P3.2(12脚) P3.3(13脚) P3.4(14脚) P3.5(15脚) P3.6(16脚) P3.7(17脚) 第 二 功 能 RXD ( 串行输入 ) TXD ( 串行输出 ) /INT0( 外部中断0 ) /INT1 ( 外部中断1 ) T0(定时/计数器0外部记数输入) T1(定时/计数器1外部记数输入) /WR(外部数据存储器写选通) /WR(外部程序存储器写选通) 表1—2 P3口第 二 功 能
五、硬件电路的设计
1 CPU模块
单片机AT89S52的P0口控制数码管八段吗显示,P2.0-P2.4控制数码管的公共端,P1口采集抢答按键信号,P3.2采集裁判键信号,P3.3采集加分键信号,P3.4采集查分按键信号,P3.5控制蜂鸣器的输出。如图5-1所示:
U1RESETC3R12+S1P1_1P1_2P1_3P1_4P1_5P1_6P1_7P1_812345678P10P11P12P13P14P15P16P17INT1 P3.3INT0 P3.2T1 P3.5T0 P3.4EA/VPX1X2RESETRD P3.7WR P3.68052P00P01P02P03P04P05P06P07P20P21P22P23P24P25P26P2739383736353433322122232425262728A1A2A3A4A5A6A7A8COM1COM2COM3COM4COM5Juge13G_add12VCCC1XTAL1VCCG_ex1am5Warn1431XTAL119XTAL218RESET91716CRY1C2XTAL2P3.0 RXDP3.1 TXDALE/PPSEN10113029 图5-1 单片机系统 2 键盘模块 键盘是人与单片机打交道的主要设备。在单片机应用中键盘用得最多的形式是独立键盘及矩阵键盘。它们各有自己的特点,其中独立键盘硬件电路简单,而且在程序设计上也不复杂,一般用在对硬件电路要求不高的简单电路中;矩阵键盘与独立键盘有很大区别,首先在硬件电路上它要比独立键盘复杂得多,而且在程序算法上比它要烦琐,但它在节省端口资源上有优势得多,因此它更适合于多按键电路。其次就是消除在按键过程中产生的“毛刺”现象。这里采用最常用的方法,即延时重复扫描法,延时法的原理为:因为“毛刺”脉冲一般持续时间短,约为几ms,而我们按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里我们取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。电路中P1_1-P1_8是八位选手的抢答按键信号采集端口,juge时裁判键信号采集端口,G-add、G-exam分别是加分键、查分键信号采集端口。如图5-2所示:
图5-2键盘电路
3 得分显示、倒计时显示模块 数码管采用的是4位七段共阴数码管,其中A~H段分别接到单片机的P0口,由单片机输出的P0口数据来决定段码值,位选码COM1、COM2、COM3、COM4分别接到单片机的P2.0、P2.1、P2.2、P2.3上,由单片机来决定当前该显示的是哪一位。如图5-3所示: COM1COM29COM38COM4123A11A2A37A44A52A6110A7A853ABCDEFGH44 选手编号显示模块 COM59com5 发声模块 声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,再利用延时程序控制“高”“低”电平的持续时间,能改变输出频率,从而改变音调,使喇叭发出不同的声音。如图5-5所示: U2BUZZERVCCR13Q1 COM4-COM1126GradeTime 图5-3显示电路 NumA1A2A3A4A5A6A7A812345678abcdefghafegdbch 图5-4 编号显示 WarnR14 图5-5发声电路
六、软件电路设计
软件电路的设计包括键盘识别、倒计时、蜂鸣器控制、显示控制等几个方面。
1 电路部分功能设计
裁判按键识别:裁判按下裁判键后,将start开始标志置为1,同时清除蜂鸣器及抢答成功标志位succeed,将倒计时恢复为40s.
加分键识别:每按一次查分键,为选手加10分。
查分键识别: 当选手抢答成功时,没按下一位选手编号,同时对应地显示选手得分情况。
抢答键识别:当start位1时,可以采集抢答按键信号,若没有选手抢答,则判断是哪位选手的按键信号,如果是单个选手抢答,则同时将选手编号赋给Num,并置抢答成功标志位succeed位1,表示抢答成功。任何其他情况则视为抢答失败。
倒计时:在定时中断0中实现。当开始抢答和没有抢答成功时,每1s时间减1;当减到0时,如果还没有选手抢答,则清除start,屏蔽抢答按键信号,视为弃权,同时蜂鸣器鸣叫。
蜂鸣器控制:只有选手抢答,蜂鸣器就鸣叫,然后通过判断是否抢答成功来决定鸣叫的时间,若抢答成功,则鸣叫3s,否则则长时间鸣叫知道裁判按下裁判键。
显示控制:显示控制采用定时中断,以10ms为周期进行扫描显示,选手的得分显示对应选手的编号显示。
2 程序流程图
开始是否犯规进入倒计时 Y是否有抢答Y显示选手编号蜂鸣器发声结束图6-1 流程图
N
3 程序设计
/**********************************************************/ 抢答器
1)利用系统复位键作为裁判键。
2)40秒倒计数显示,时间到时,则抢答停止。
3)每次当有一个选手抢答成功,其他选手则被屏蔽,不能再抢答。 4)显示抢答选手编号,回答正确并为该选手加分。同时显示选手的得分情况。 5)提前按键视为作弊,停止抢答,显示犯规选手编号。
/********************************************************/
#include #define uchar unsigned char #define uint unsigned int #define disp_sel P2 #define disp_code P0 #define Player P1 #define ON 0 #define OFF 1 sbit Juge=P3^2; sbit Grade_add=P3^3; sbit Grade_exam=P3^4; sbit Warn=P3^5; bit start,succeed; uchar Num=0,Count=40; uchar s,sec; uint time; uchar m[5],g[8]; uchar disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef}; void delay() { uchar i,j; for(i=0;i<20;i++) for(j=0;j<240;j++); } //键盘键识别 void keyboard() { if(!Juge) { start=1; Warn=OFF; Num=0; Count=40; succeed=0; } if(start) { if(Player!=0xff) { Warn=ON; start=0; switch(Player) { case 0xfe: Num=1;succeed=1;break; //1号选手抢答成功; case 0xfd: Num=2;succeed=1;break; //2号选手抢答成功; case 0xfb: Num=3;succeed=1;break; //3号选手抢答成功; case 0xf7: Num=4;succeed=1;break; //4号选手抢答成功; case 0xef: Num=5;succeed=1;break; //5号选手抢答成功; case 0xdf: Num=6;succeed=1;break; //6号选手抢答成功; case 0xbf: Num=7;succeed=1;break; //7号选手抢答成功; case 0x7f: Num=8;succeed=1;break; //8号选手抢答成功; default:Num=0;succeed=0;break; //违规抢答; } } } //加分键识别 if(!Grade_add) { delay(); if(!Grade_add&&Num) { g[Num]+=10; while(!Grade_add); } } //查分键识别 if(!Grade_exam) { delay(); if(!Grade_exam) { Num++; if(Num>=9) {Num=1;} while(!Grade_exam); } } } //显示模块 void display()interrupt 1 { TH0=(65536-5000)/256; TL0=(65536-5000)%256; m[0]=Num; m[1]=g[Num]/10; m[2]=g[Num]%10; m[3]=Count/10; m[4]=Count%10; disp_code=disp[m[time]]; disp_sel=wei[time]; time++; if(time==5) {time=0;} s++; if(s==200) { s=0; if(succeed)//抢答成功蜂鸣器鸣叫 { sec++; if(sec==3) { sec=0; Warn=1; } } //倒计时 else if(start&&!succeed) { Count--; if(Count<=0) { Count=0; start=0; Warn=0; } } } } void main() { EA=1; ET0=1; TMOD=0x01; TH0=(65536-5000)/256; TL0=(65536-5000)%256; TR0=1; while(1) { keyboard(); } } 七、调试 在电路的焊接时,为了便于焊接,我们采用先小后大的方法进行焊接,其中要注意对晶振的保护。焊接完成后,必须进行对整体电路板的检测,看看有没有漏焊、虚焊、短接和错接等问题,检查无误后,通电检测电路板是否正常。最小系统的电路不工作,首先应该确认电源电压是否正常。用电压表测量接地引脚跟电源引脚之间的电压,看是否符合电源电压,常用的是5V左右。接下来就是检测复位引脚的电压是否正常,EA引脚的电压正常为5V左右。然后利用下载线下载编写的程序,进行整机调试,直到数码管可以正确显示抢答选手的编号及得分情况并有蜂鸣器发声。 八、设计总结: 在以前实训中做过数字电路抢答器,在数字电路抢答器制作中,缺少倒计时,犯规等功能,而且由于用了优先编码器,在理论上也存在不公平,而我们所用的单片机电路,具有倒计时,犯规的功能,在制作上功能更加齐全,结构更加简单,价格也相对降低。但本电路也存在缺点:由于芯片资源问题,它只能用复位键当作开始键使用。但基本功能得到了满足。 在制作抢答器的过程中,我收获颇多,第一:我觉得通过制作抢答器让我更加深刻地理解所学的专业知识,而且学到了书本以外的电子技术知识,并且能够有效地把它们联系起来;第二:在制作的过程中,我体会到了协作精神对于一个团体是多么的重要,而且也培养了我专心致志的工作学习习惯,懂得了相互之间的理解与体谅。我们组的同学互相讨论、交流,增进了我们之间的感情,而且扩大彼此的视野。第三:我将所学到的知识应用到了实践,加深了我对单片机的认识,这使我在使用办公软件和绘图方面的能力得到了提高,可谓获益匪浅。 以上就是我的一些体会,我觉得我们的设计还不够完善,还有待不断地改进,因此我们还必须不断地学习相关的知识来丰富自己。 参考文献: 1 李全利《单片机原理及应用技术》 高等教育出版社 2 张齐 杜群贵 编著《单片机应用系统设计技术》电子工业出版社 3 张凯《单片机的C语言应用程序设计》北京航空航天大学出版社 4 张友汉《电子线路设计应用手册》福建科学技术出版社 5 刘立凯《C语言高级实例解析》 清华大学出版社 6 武志强 王英大 单片机实训基础教程》天津教育出版社 7 龙威林 杨冠声 《单片机应用入门》化学工业出版社 8 施晓琴《C语言编程技能训练》天津教育出版社 因篇幅问题不能全部显示,请点此查看更多更全内容