ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:402KB ,
资源ID:5482364      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5482364.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(8路抢答.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

8路抢答.docx

1、8路抢答八路抢答器系统设计0 引言随着科技的飞速发展,单片机已经渗透到我们生活的各个领域,几乎在每个领域都能找到单片机的影子。上至军用航空导弹导航系统下至生活中使用的电子表等用品,都离不开单片机应用。单片机产生于20世纪70年代末,大致经历了三个阶段。单片微型计算机(Single Chip Microcomputer)阶段,微控制器(Micro Controller Unit)阶段,SoC单片机(System On Chip)阶段。著名的单片机生产企业有Atmel、STC、飞利浦、Intel、Philips等公司。1单片机出现方便了人们的生活,所以单片机的使用也使抢答器的电路更加简便和实用。抢

2、答器的运用虽然很广泛,但是,传统的抢答器具有以下的问题亟待解决:有的传统抢答器由数字电路组成,在使用现场会有多名选手或代表团参加比赛,所以会造成布线繁琐等麻烦,现场不美观等问题;由于传统抢答器由电子元器件集成制作而成,所以就会造成可靠性低,元器件集成工艺复杂,花费比较高等麻烦:由与传统的抢答器由数字电路构成,所以可能造成抢答时控制不精确,功能单一等缺陷。2所以,为了改进传统抢答器的各种缺点,本课题采用STC89C52单片机设计抢答器系统。采用单片机设计抢答器,不仅可以避免布线复杂,集成工艺复杂等问题,还可以减小误差,降低开支,充分利用现有资源。使得抢答器工作效率高,反应灵敏。采用单片机设计的抢

3、答器可以简单的实现拓展功能,可以扩至16路。而且单片机具有方便、低功耗、抗干扰性强等特点,使得本设计具有更强的实用价值。通过本次课程设计,我们应该熟悉单片机的基本结构,将理论所学知识运用到实际中来,能熟练运用Proteus仿真软件,和Keil51编程软件。从而提高自身的编程能力以及解决问题的能力。 1 系统基本组成及工作原理11设计要求利用单片机使用方便、低功耗、抗干扰性强、可靠性高等特点,设计一个8路智能抢答器。以单片机为核心处理器,实现一个智能抢答器,要求同时供8名选手或8个代表队参加比赛。同时要设置一个用于控制整个电路的开关,用来控制整个抢答器系统的清零、开始抢答及定时器预置等。抢答器具

4、有锁存抢答选手编号和显示功能,抢答正式开始后,若有参赛选手或代表队按下自己按钮,锁存并显示选手编号,并禁止其他选手抢答。12设计内容利用单片机实现8路智能抢答器功能。先在Proteus软件上画出系统的各部分硬件电路设计框图,并且在Keil软件上完成对应的软件程序设计,实现系统的主要功能。硬件设计内容主要包括:复位电路,晶振电路,矩阵键盘输入,LED显示模块,报警电路部分。软件设计内容主要包括:键盘扫描,编码显示,抢答选手扫描,中断程序控制,定时器的使用。抢答器要求可同时供8名选手或8个代表队参加抢答比赛。此外,设置一个控制开关,用来控制系统的清零、抢答开始及定时器的预置等。抢答器具有数据锁存和

5、显示功能。13系统基本组成本系统运用单片机来实现抢答器设计,主要包括一下几个模块:复位电路,晶振电路,矩阵键盘输入,LED显示模块,报警电路。14系统工作原理将16位选手编号1-16,接通电源后,主持人按下开始键则开始抢答,16位选手在规定时间内抢答,当有选手按键抢答时,在屏幕上显示选手号码且显示剩余时间,并禁止其他选手抢答;此时,主持人读完题目按下开始答题按钮则开始答题,选手要在规定时间内完成作答,若答题时间快到时会报警。当无选手抢答时,剩余抢答时间小于5秒时会通过闪亮小灯响起蜂鸣器来报警,如果抢答时间耗尽还没有选手按下抢答键,则此轮抢答无效。主持人按下复位按钮则抢答重新开始。2 系统硬件设

6、计2.1 时钟频率电路设计 单片机工作时需要时钟电路产生时钟信号,指令执行中各信号之间的相互关系就是时序所研究的内容。为保证同步工作方式实现,电路应在唯一的时钟信号控制下按照时序进行工作。时钟信号可以通过两种电路形式得到:内部振荡方式和外部振荡方式。外部振荡方式是把外部已有的时钟信号引入单片机内。这种方式适宜用来使单片机的时钟与外部信号保持同步。本系统采用内部振荡方式产生时钟信号。STC89C52单片机内部带有时钟电路,因此,只需要将定时控制元件(晶体振荡器和电容)通过XTAL1和XTAL2引脚接入单片机芯片,即可形成一个稳定的自激振荡器。如图所示为内部振荡方式的外部电路:时钟频率电路电路中采

7、用11.0592Mhz的石英晶体振荡器产生时钟信号,两个电容均为33pf,电容的作用是为了帮助振荡器起振以及对电路频率的微调。2.2 复位电路设计 在抢答器电路中,难免会出现操作失误,使得程序跑偏,或者出错,所以需要复位电路来使得在出错时使电路恢复正常工作。复位电路是单片机的初始化操作,使单片机从0开始执行程序。复位不仅能使单片机进入系统正常初始化,而且当程序运行出错或操作不当使系统死锁时,按下复位按钮重新启动,使单片机正常工作。 复位方式有以下四种:上电自动复位、按键电平复位、外部脉冲复位、和自动复位。即外部产生复位信号由单片机的9脚(RST)输入,从而使单片机完成复位操作。复位信号是高电平

8、有效,有效时间应持续两个机器周期以上。 本系统采用的是按键电平复位方式,如图所示复位电路:复位电路图中所示复位电路由电源、电解电容C3、电阻R2和按键组成。当复位按钮按下,产生高电平的复位信号送入9脚。电解电容充电放电使得复位高电平信号持续2个机器周期以上。当放起按键时,9脚缓慢达到低电平则退出复位。程序从头开始执行。2.3按键输入电路设计在抢答器电路中每位选手会通过手中的抢答按键来获得优先答题权。每位选手的按键就构成抢答器电路的键盘输入。键盘输入电路是单片机外围电路中最常见的一种电路。键盘有两种形式,编码键盘和非编码键盘。当有键盘被按下时,通过一种专用的硬件编码器来识别按键闭合,并且确定出键

9、盘编码号码,这种键盘称为编码键盘,如计算机键盘。而通过软件编程方式来确定某个按键的闭合的键盘称为非编码键盘,在单片机组成的各种系统中,用的比较多的是非编码键盘。非编码键盘又分为:独立键盘和行列式键盘(或称矩阵键盘)。对于每一个按键需要与单片机的I/O口相连,从而读出键盘的状态。单片机可以通过软件编程读出哪个键按下,从而做出对应的操作。24 独立式键盘电路设计独立式键盘是单片机电路中用的最多的键盘输入,独立键盘是由键盘的两端直接和单片机的I/O口与接地相连。当键盘按下时,对应端口与地相连,则直接将对应的端口变成低电平,然后做出相应的操作。每个独立键盘需要单独使用一根I/O线,所以当一个电路中键盘

10、输入较多时采用独立键盘设计就会造成I/O口的大量浪费,从而造成I/O口不够用。所以,只有按键数量不多时,采用独立键盘输入。电路中的开始抢答按键和开始答题按键采用的就是独立式键盘输入。独立键盘的好处就是:每个按键单独使用一根I/O线,键盘扫描容易,且独立键盘每个按键互不影响。本电路中用到的独立键盘有下面几处。如图所示电路:控制电路当按下开始抢答按键时候,P2.0口被硬件置为低电平,控制整个电路开始,开始抢答;当按下开始答题按键时候,P2.1被硬件置为低电平,显示答题时间。25 矩阵键盘电路设计 在矩阵键盘中,每4个键盘构成一行,一共四行四列。每一行按键的一端连接起来,每一列按键的另一端连接起来,

11、总共构成8路,所以,一个单片机的P3口就可以构成16个键盘电路的输入端口了。 在本次设计中,有16个选手或代表队参加比赛,每一个代表队需要一个抢答按键,就需要16个按钮。在设计中发现,如果采用独立键盘连接电路,则需要一个端口连接一个按键,所以需要占用16个I/O口,就会造成资源的浪费,成本增高。所以当有16位选手参加抢答比赛时,需要16个键盘,采用4 X 4矩阵键盘只需要8个I/O口,从而大大减少了I/O口资源的浪费。当键盘个数超过8个,采用矩阵键盘是最为合适的。相比独立键盘,矩阵键盘的特点是:电路的I/O口需要相对较少,能有效节省I/O口资源浪费;但是硬件电路相对复杂,键盘扫描比独立键盘扫描

12、繁琐,需要独立软件编程,完成键盘扫描,从而确定那个按键按下,做出相应操作,矩阵键盘更适合多按键电路。以下是抢答器系统的矩阵键盘输入电路,P3口高四位(P3.4-P3.7)作为列线,P3口低四位(P3.0-P3.3)作为行线,电路如图所示: 矩阵键盘电路矩阵键盘接好以后,就要对应的键盘扫描工作,判断出那个按键按下,从而做出对应操作。当没有按键按下的时候所有行线和列线是开路的。当键盘上的一个按键被按下的时候,该按键的行线和列线就会被短路。将所有的列线都置为高电平,行线逐个置为低电平。例如当把第一行线置为低电平,第一行有按键按下时该按键的列线也会变成低电平,从而判断第一行的某个按钮被按下,以此类推,

13、单片机根据电平的变化从而扫描出键盘操作。键盘的扫描分为循环扫描工作方式和中断扫描工作方式。循环扫描工作方式,是在单片机工作的过程中调用键盘扫描子程序来响应按键输入。此种扫描方式缺点是,不管键盘有无按下,单片机都会扫描键盘,然而在工作的过程中不需要按键按下,此时系统处于空扫描状态。为了提高单片机的工作效率,采用中断扫描,即只有按键按下时,才发送中断申请,进行键盘扫描。5本次设计采用了循环扫描的工作方式。按键在按下的过程中有可能会产生抖动,此时逻辑电平是不稳定,所以在键盘扫描过程中,一定要在软件设计过程加入去抖部分。在本次设计中,我们通过在软件编程过程中,对按键扫描进行延时的方法中来去除抖动。在按

14、下按键并处理完相应操作时,可以在软件编程中增加键盘释放的程序。26显示电路设计显示电路是最常用的输出设备。为观察单片机的运行状态,往往需要显示器来直观的表现出来。抢答器电路需要通过显示电路,来显示抢答选手的标号,和倒计时显示。本系统采用四位一体共阴数码管显示,数码管前两位显示倒计时,后两位显示抢答选手的标号。下图是抢答器系统的显示电路:显示电路上图所示是抢答器系统的显示电路,显示电路用到了一个上拉电阻、两个透明锁存器和一个四位一体共阴数码管。下面介绍显示电路的原理。2.7 报警电路设计在抢答器系统里,当抢答时间快要结束时或者答题时间快要结束时,需要一个报警电路来提示抢答选手,所以在本次设计中添

15、加了报警电路部分。当答题时间和抢答时间小于5秒后,则会启动报警电路。如图所示,为报警电路。报警电路如上图所示为报警电路,当P2.2口为低电平时,LED灯通路,则LED灯亮。单片机的P2.3口负责发声电路,当P2.3为低电平时候,三极管导通,扬声器工作,从而完成发声电路。当抢答时间和答题时间剩余5秒时,为了及时提示选手,设置LED灯和扬声器隔1秒工作一次,从而达到警示选手的作用。报警电路中,扬声器部分采用PNP三极管驱动,当基极为低电平时,三极管导通,从而驱动扬声器电路工作。2.8 总体电路设计本章详细叙述了抢答器各个模块的设计原理以及具体电路。在以STC89C52为核心电路的基础上,结合显示电

16、路、键盘输入电路、报警电路、复位电路和外部时钟电路等外围电路,就设计出了基于单片机的抢答器系统。下图是单片机抢答器系统的总图。基于单片机的抢答器电路总图3 系统软件设计软件设计分为以下五个部分:主程序设计,开始键扫描子程序,抢答键盘扫描子程序,显示程序,定时器中断。 主程序系统框图上图为主程序系统框图,程序代码部分均参照上述逻辑设计。任何一个C语言程序,都先从主程序开始执行,从主程序执行开始键扫描程序,若开始键按下,则触发定时器中断1,并扫描键盘,若有抢答选手按下按键,则显示剩余答题时间,并显示锁存抢答选手号码,并且伴随提示音。此外,当有选手按下后,就要封锁电路,禁止其他选手抢答。若无选手抢答

17、,则倒计时,当剩余五秒时,触发报警程序,即定时器中断2。当主持人按下开始键,活着复位键时,复位电路。重新开始电路。下图为程序流程图: 程序流程图4软件设计4.1主程序设计 主程序是软件设计的灵魂部分,是关系到程序能否顺利执行的关键部分,主程序如下所示。 以下是定时参数的初始化:void init() TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET0=1; ET1=1; 这部分选择定时器工作方式的选择;通过对方式寄存器TM

18、OD的设置,定时器/计数器T0,T1可选择4种不同的工作方式。定时器中断是当数据溢出时触发中断,并且计数器是加1计数的,所以需要预先置入初始值,当数据溢出时触发中断。主程序首先将执行判断开始键是否按下,以下是开始键的扫描程序:void start_scan() if(K0=0) delay(10); if(K0=0) while(!K0); TR0=1; time=qdtime; flag=1; s_flag=1; b_flag=1; beep=1; gled=1; key=0; 判断是否开始键是否按下,对按键进行去抖操作后,若开始键按下,则打开倒计时,将各个标志位初始化,flag为开始标志位

19、。当开始按下时,即会显示倒计时。当判断完开始按键的操作后,如果开始按键按下,则会出现两种情况:开始键按下,无人抢答;开始键按下,有人抢答。当开始键按下,有人抢答时:if(flag=1)&(s_flag=0) /当开始键按下并有人抢答,进行答题倒计时 if(K_time=0) /开始答题按键扫描 delay(10); /去抖操作 if(K_time=0) while(!K_time); time=dttime; TR0=1; 当开始键按下时,s_flag是矩阵键盘的标志位,s_flag=0表示矩阵键盘有人按下,即有人抢答。当开始键按下,且矩阵键盘中有人按下,程序开始判断答题按键是否按下,当答题控

20、制键按下,则启动答题倒计时。 当开始键按下,无人抢答时:if(flag=1)&(s_flag=1) /开始键按下且答题键没有人按下,进行键盘扫描 keyscan(); /键盘扫描子函数调用 当开始键按下,s_flag=1表示没人抢答,则进行矩阵键盘扫描。矩阵键盘扫描过程中,如果键盘没有人按下,则s_flag=1,所以一直扫描键盘,当倒计时剩余5秒,就会报警。若倒计时为0秒时还没人抢答,则主持人按下开始按钮即可。若键盘有人按下则s_flag=0,进入有人抢答的程序中。94.2延时子程序 在单片机软件操作过程中会用到许多的延时程序,譬如,当要去除键盘抖动时,就需要延时程序来达到。在数码管的动态显示

21、上,也需要通过延时程序来达到目的。void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-);以上就是延时函数,参数z为形式参数,当需要调用延时函数时,只需在函数里赋值,即可达到所需的延长时间,如delay(50000)就为半秒钟延时。4.3键盘扫描程序 抢答器中每位选手配备一个抢答器,当选手按下时,需要一个键盘扫描程序来扫描。并将扫描结果返回。在矩阵键盘扫描的过程中,需要先将端口赋值,然后通过电平的变化来扫描出键盘的按键按下。void keyscan() P3=0xfe; /将P3口赋值 temp=P3; temp=temp&0x

22、f0; /判断电平是否有变化; if(temp!=0xf0) /电平有变化,说明有按键按下 delay(15); /键盘去抖操作 temp=P3; temp=temp&0xf0; if(temp!=0xf0)当扫描矩阵键盘的第一行键盘时,将第一行线置为低电平,若第一行中有键盘按下,则对应的列线就会变为低电平。通过temp=temp&0xf0就可以对比出那个按键按下。 temp=P3; switch(temp) case 0x7e:key=1;TR0=0;TR1=1;s_flag=0; break; /当第一个键按下时,触发事件操作 case 0xbe:key=2;TR0=0;TR1=1;s_f

23、lag=0; break; /当第二个键按下时,触发事件操作 case 0xde:key=3;TR0=0;TR1=1;s_flag=0; break; /当第三个键按下时,触发事件操作 case 0xee:key=4;TR0=0;TR1=1;s_flag=0; break; /当第四个键按下时,触发事件操作 default:key=0; /当有两人同时按下时,键盘显示 while(temp!=0xf0) /释放 temp=P3; temp=temp&0xf0; 以上是第一行键盘的扫描过程,当第二行键盘扫描时将处置设为P3=0xfd;当第三行扫描时将设置为P3=0xfb;当第四行键盘扫描时将处置

24、设为P3=0xf7。每行键盘扫描都是以此类推,当键盘扫描完毕后,将释放键盘,这样将会及时清理掉缓存。4.4显示程序设计显示程序是程序中唯一的输出部分,显示程序部分包括数据编码,和位选控制。当无选手按下时,需要显示抢答倒计时;有选手按下时,需要显示选手号码。如下为显示子程序代码部分: if(flag=1) if(key!=0) /判断是否有选手抢答 shi=key/10; ge=key%10; WL=1; /位选打开 P1=0xfb; /第三位显示 WL=0; /位选关闭 DL=1; /段选打开 P0=tableshi; delay(5); WL=1; P1=0xf7; /第四位显示 WL=0;

25、 DL=1; P0=tablege; delay(5); 当flag=1,即开始键按下,时开始判断key的值,若key不为0,则有选手抢答,显示选手抢答号码,并显示剩余倒计时。 WL=1; P1=0xfe; /第一位显示 WL=0; DL=1; P0=tabletime/10; delay(5); WL=1; P1=0xfd; /第二位显示 WL=0; DL=1; P0=tabletime%10; delay(5); 无论是否有选手抢答,都需要进行倒计时,所以,倒计时操作一直在进行。倒计时操作是在数码的前两位,当有选手按下时,锁存选手号码,并保存剩余答题时间,当控制答题按钮按下时,将显示20秒

26、剩余答题时间。显示过程中,首先要打开位选,选通那一位显示,其次才能打开段选,进行段选码控制。动态显示,需要借用余晖和人眼暂留的效果,所以每显示一位需要短暂的延时。4.5中断函数设计抢答器中会用到倒计时显示,所以会用到单片机内部的定时器中断,当用到定时器中断的时候就需要写中断服务函数。以下是中断服务函数:定时器T0的中断服务函数:void timer0() interrupt 1 TH0=(65536-50000)/256; /对定时器重新赋值 TL0=(65536-50000)%256; if(b_flag) /蜂鸣器标志位 beep=0; else beep=1;下面部分为报警程序设计,当倒

27、计时剩下5秒时,蜂鸣器和小灯交替工作,即小灯亮一下,蜂鸣器响一下,提示选手。 if(time5) if(time%2=0) b_flag=1; gled=0; else b_flag=0; gled=1; 下面程序为倒计时程序部分。当每次进入中断函数,num会自动加1,当num=20时表示,计数器计数满,到达1秒,则完成时间减少1秒,关闭蜂鸣器。 num+; if(num=20) num=0; time-; b_flag=0;当剩余时间为0秒时,关闭定时器,关闭各个标志位。抢答无效。 if(time=0) TR0=0; time=0; s_flag=1; gled=1; 当启动定时器T1时,蜂

28、鸣器开始工作,当工作1秒后,关闭定时器,同时关闭蜂鸣器,定时器T1的中断服务函数:void timer1() interrupt 3 TH1=(65536-50000)/256; TL1=(65536-50000)%256; beep=0; num+; if(num=160) num=0; TR1=0; beep=1; 这是单片机内置定时器T1的工作函数,触发蜂鸣器发声,即是当按键按下时,蜂鸣器发声提示,此部分为蜂鸣器发声电路。5 结束语在本次基于单片机的抢答器设计过程中,查阅了所用的电子元件的资料,利用单片机STC89C52的功能,设计出所需的外围电路来完成抢答器功能。利用单片机的定时/计数

29、器的计数功能等功能,将软硬件有机结合起来设计单片机。并且对键盘设置原理、数码管显示原理都有了进一步的了解和掌握。设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。下面我对整个设计的过程做一下简单的总结。第一,接到任务以后进行选题。选题是设计的开端,选择恰当的、感兴趣的题目,这对于整个设计是否能够顺利进行关系极大。好比走路,这开始的第一步是具有决定意义的,第一步迈向何方,需要慎重考虑。否则,就可能走许多弯路、费许多周折,甚至南辕北辙,难以到达目的地。因此,选;题时一定要考虑好了。第二,题目确定后就是找资料了。查资料是做设计的前期准备工作,好的开端就相当于成功了一半,到图书馆、书店、资料室去虽说是比较原始的方式,但也有可取之处的。总之,不管通过哪种方式查的资料都是有利用价值的,要一一记录下来以备后用。第三,通过上面的过程,已经积累了不少资料,对所选的题目也大概有了一些了解,这一步就是在这样一个基础上,综合已有的资料来更透彻的分析题目。第四,有了研究方向,就应该动手实现了。其实以前的三步都是为这一步作的铺垫。通过这次设计,我对数字电路设计中的逻辑关系等有了一定的认识,对以前学的数字电路又有了一定的新认识,温习了以前学的知识,就像人们常说的温故而知新嘛,但在设计的过程中,遇到了很多的问题,有一些知识都已经不太清楚了,但是通过一些资料又重新的温习了一下数字电路部分的内

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1