电子抢答器单片机的设计.doc

上传人:西安人 文档编号:5026118 上传时间:2020-01-29 格式:DOC 页数:13 大小:122.50KB
返回 下载 相关 举报
电子抢答器单片机的设计.doc_第1页
第1页 / 共13页
电子抢答器单片机的设计.doc_第2页
第2页 / 共13页
电子抢答器单片机的设计.doc_第3页
第3页 / 共13页
电子抢答器单片机的设计.doc_第4页
第4页 / 共13页
电子抢答器单片机的设计.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《电子抢答器单片机的设计.doc》由会员分享,可在线阅读,更多相关《电子抢答器单片机的设计.doc(13页珍藏版)》请在三一文库上搜索。

1、电子抢答器单片机的设计单片机由硬件系统与软件系统组成。硬件系统是指构成微机系统的实体与装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。其中运算器和控制器一般做在一个集成芯片上,统称中央处理单元(Central Processing Unit),简称CPU,是微机的核心部件。CPU配上存放程序和数据的存储器、输入/输出(Input/Output,简称I/O)接口电路以及外部设备即构成单片机的硬件系统。软件系统是微机系统所使用的各种程序的总称,人们通过它对微机进行控制并与微机系统进行信息交换,使微机按照人的意图完成预定的任务。软件系统与硬件系统共同构成完整

2、的单片微型计算机系统,两者相辅相成,缺一不可。2 系统设计要点系统设计主要包括硬件和软件两大部分,依据控制系统的工作原理和技术性能,将硬件和软件分开设计。硬件设计部分包括电路原理图、合理选择元器件、绘制线路图,然后对硬件进行调试、测试,以达到设计要求。软件设计部分,首先在总体设计中完成系统总框图和各模块的功能设计,拟定详细的工作计划;然后进行具体设计,包括各模块的流程图,选择合适的编程语言和工具,进行代码设计等;最后是对软件进行调试、测试,达到所需功能要求。在系统设计中设计方法的选用是系统设计能否成功的关键。硬件电路是采用结构化系统设计方法,该方法保证设计电路的标准化、模块化。硬件电路的设计最

3、重要的选择用于控制的单片机,并确定与之配套的外围芯片,使所设计的系统既经济又高性能。硬件电路设计还包括输入输出接口设计,画出详细电路图,标出芯片的型号、器件参数值,根据电路图在仿真机上进行调试,发现设计不当及时修改,最终达到设计目的。软件设计的方法与开发环境的选取有着直接的关系,本系统由于是采用51系列单片机,因此使用Keil C语言进行开发。此编程工具相比汇编语言具有结构化、适用范围大、可移植性好等特点。本系统软件设计采用模块化系统设计方法,先编写各个功能模块子程序,然后进行组合与调整,经过调试后,达到设计功能要求。2.1 抢答器的硬件设计要求抢答器同时供8名选手或8个代表队比赛,分别用8个

4、按钮S1S8表示。设置一个系统清除和抢答控制按扭,该按扭由主持人控制。抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。22 计分器系统的软件流程2.3 计分器的硬件设计要求加减计分有三位显示,用串行通信口,显示分数,用4*4阵列式键盘进行同时加减和单组加分。2.4 人机交互程序设计系统的人机交互程序设计,主要是解决按键的扫描与信息的显示,让操作者能够灵活地控制系统工作。键盘用来输入指令,发光数码管用来显示单片机的状态,这是一个比较简单的人机交互形式。2.4.1计

5、分器系统的软件键盘扫描程序流程图本系统的键盘采用的是44矩阵式键盘,矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上。一个44的行、列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。矩阵式键盘中,行、列线分别连接到按键开关的两端,在进行键盘扫描时,首先把矩阵键盘列线的第一根线置高,然后分别再检测矩阵键盘行线是否有高电平的信号,如果有信号,那么就证明这根行线与第一根列线相交处的按键被按下了,单片机就读入这个键值。如果所有的四根行线都没有信号,那么就把第一根列线置低,把第二根列线置高,再一次检测行线有没有信号,然后依次类推。由于键

6、盘扫描的速度很快,而人按键总会持续一定的时间,因此只要单片机处在等待输入的状态,这个键盘扫描程序基本上不会错过任何一个按键信号。由于一般人按键会有抖动,抖动信号造成键盘扫描时会出现一些错误的信号,要不就是扫描不进数据,要不就是重复输入很多次数据,因此需要有一个消除抖动的程序。让单片机不响应一些相关的抖动信号,而只响应一次确实存在的按键信号。消抖动程序是这样实现的,当检测到一个脉冲信号时,并不立即认为是一次按键,而是延时一段时间以后再进行检测,如果三次检测都有信号,那么就认为有一次按键动作发生了。延时的选择非常重要,太快了,起不到消除抖动的效果,太慢了又让键盘太不灵活,错过较多的按键信号。键盘扫

7、描程序的流程图如图2所示。 键盘扫描程序流程图22.5 抢答器系统软件的流程图2.6 抢答数码显示软件程序设计采用静态显示,显示器由9个共阳极数码管组成。输入只有两个信号,它们是串行数据线DIN和移位信号CLK。9个串/并移位寄存器芯片74LS164首尾相连,了九位共阳极七段数码管,共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起,通常,公共阳极接高电平(一般接电源),七它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确

8、定相应的限流电阻,这里的限流电阻选为100。数码显示程序流程如图4。2.7 音乐音频输出程系流程图音乐音频输出由P3.7输出,如图5计分器的电路设计主控制器采用AT89C51单片机作为微处理器,AT89C51是美国ATMEL公司生产的低电压、高性能CMOS 8位单片机,片内含4K bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器(CPU)和Flash 存储单元。5.1.1计分器系统的硬件电路计分器的工作原理是采用最小系统,用4x4键盘来

9、输入是选手需要加减进行分数的加减输入。主板上的6个数码显示,加几分的数,按确定键后分数值从串口p3.0,p3.1传到计分器显示模块上再通过数码管驱动模块显示。原理图如图9所示抢答器显示模块在步进电机控制过程中,系统需要对运行的时间和转向、相数做必要的显示。我们考虑有以下两种显示方案。方案一:使用液晶屏显示时间。液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影像稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强的特点。但由于只需要显示时间和转向、相数这样的数字,信息量比较少,且由于液晶是以点阵的模式显示各种符号,需要利用控制芯片创建字符库,编程工作量大,控

10、制器的资源占用较多,其成本也偏高。在使用时,不能有静电干扰,否则易烧坏液晶显示芯片,不易维护。方案二:在使用传统的数码管显示。数码管具有:低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高(低)温,对外界环境要求低,易于维护,同时其精度高,称量快,精确可靠,操作简单。数码显示是采用BCD编码显示数字,程序编译容易,资源占用较少。静态显示,电路图中所示。显示器由9个共阳极数码管组成。输入只有两个信号,它们是串行数据线DIN和移位信号CLK。9个串/并移位寄存器芯片74LS164首尾相连,每片的并行输出作为LED数码管的段码74LS164的引脚图如图6所示:74LS164为8位串入并出移

11、位寄存器,1、2为串行输入端,Q0-Q7为并行输出端,CLK为移位时钟脉冲上升沿移入一位;MR为清零端,低电平时并行输出为零。根据以上的论述,采用方案二。3.2 控制器模块控制器主要用于各模块控制对显示、抢答、音乐、计分等。控制器的选择有以下两钟方案。方案一:采用FPGA(现场可编程门列阵)作为系统的控制器。FPGA可以实现各种复杂的逻辑功能,规模大,密度高,它将所有器件集成在一块芯片上,3.2 控制器模块控制器主要用于各模块控制对显示、抢答、音乐、计分等。控制器的选择有以下两钟方案。方案一:采用FPGA(现场可编程门列阵)作为系统的控制器。FPGA可以实现各种复杂的逻辑功能,规模大,密度高,

12、它将所有器件集成在一块芯片上,减小了体积,提高了稳定性,并且可以应用EDA软件仿真、调试,易于进行功能扩展。FPGA采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模实时系统的控制核心。但由于本设计对数据处理的速度要求不高,FPGA的高速处理的优势得不到充分体现,并且由于其集成度高,使其成本偏高,同时由于芯片的引脚较多,实物硬件电路板布线复杂,加重了电路设计和实际焊接的工作。方案二:采用ATMEL公司的AT89C51作为系统控制器的CPU方案。单片机算术运算功能强,软件编程灵活、自由度大,可以用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和成本低等优点,使其在各

13、个领域应用广泛。基于以上分析拟订方案二。3.3 电源方案的选择系统需要多个电源,AT89C51使用5V稳压电源,驱动芯片需要5-50V电压驱动,步进电机等需要12V稳压电源。方案一:采用升压型稳压电路。用两片MC34063芯片分别将3V的电池电压进行直流崭波调压,得到5V和12V的稳压输出。只需使用两节电池,既节省了电池,又减小系统体积重量但该电路供电电流小,供电时间短,无法使相对庞大的系统稳定运作。方案二:采用三端稳压集成7805与7812分别得到5V和12V的稳定电压。利用该方法方便简单,工作稳定可靠。综上所述,选择方案二,采用三端稳压器电路。3.4 枪答器键盘的选择键盘是单片机不可缺少的

14、输入设备,是实现人机对话的纽带。键盘按结构形式可以分为非编码键盘和编码键盘,前者用软件方法产生键码,而后者则用硬件方法来产生键码。在单片机中使用的都是非编码键盘,因为非编码键盘结构简单,成本低廉,非编码键盘的类型很多,常用的有独立式键盘,行列式键盘等。方案一:独立式键盘键盘接口中使用多少根I/O线,键盘中就有几个按键,键盘接口使用了8根I/O口线,该键盘就有8个按键,这种类型的键盘,其按键比较少,且键盘中各按键的工作互不干扰。因此可以根据实际需要对键盘中的按键灵活的编码。如图7。最简单的编码方式就是根据I/O输入口所直接反映的相应按键,按下的状态进行编码,称按键直接状态码,对于这样编码的独立式

15、键盘,CPU可以通过直接读取I/O口的状态来获取按键的直接状态编码值,根据这个值直接进行按键识别,这样形式的键盘结构简单,按键识别容易。独立式键盘的缺点是需要占用比较多的I/O口线,当单片机应用系统键盘中需要的按键比较少或I/O口线比较富余时,可以采用这样类型的键盘。方案二:行列式键盘行列式键盘是用N条I/O线作为行线,M条I/O线作为列线组成的键盘,在行线和列线的每个交叉点上,设置一个按键中按键的个数是M*N个。这种形式的键盘结构,能够有效的提高单片机系统中I/O的利用率,列线接P1.0P1.3行线接P1.4P1.7,行列适用于按键输入多的情况。CPU对键盘的扫描可以采用取程序控制的随机方式

16、,即只有在CPU空闲是时才去扫描键盘,响应操作人员的键盘输入,但CPU在执行应用程序的过程中,不能响应键盘输入,对键盘的扫描可以采用定时方式,即利用单片机内部定时器每隔一定时间对键盘扫描一次,这样控制方式,不管键盘上有无键闭合,CPU总是定时的关心键盘状态。在大多数情况下,CPU对键盘可能进行空扫描。为了提高CPU的效率而又能及时响应键盘输入,可以采用中断方式,既CPU平时不必扫描键盘,只要当键盘上有键盘闭合时就产生中断请求,向CPU申请中断后,立即对键盘上有键盘进性扫描,识别闭合键,并做相应的处理。 图8根据以上的论述,采用方案一,在本系统中采用了独立式键盘,其按键比较少,且键盘中各个按键的

17、工作互不干扰。如图8所示。3.5 计分器显示模块显示模块必须要显示三位数为一组,本系统设计为八组,共要显示27位数。采用静态显示,其方案如下:方案一:不带锁存方式。显示器由9个共阴极数码管组成。输入只有两个信号,它们是串行数据线DIN和移位信号CLK。9个串/并移位寄存器芯片74LS164首尾相连,74LS164为8位串入并出移位寄存器,1、2为串行输入端,Q0-Q7为并行输出端,CLK为移位时钟脉冲上升沿移入一位;MR为清零端,低电平时并行输出为零。实验证明在显示位数超出6位,数码管有闪烁的现象。方案二:带锁存方式。采用带有锁存功能的移位寄存器74LS595芯片,74595的数据端:QA-Q

18、H: 八位并行输出端,可以直接控制数码管的8个段。QH: 级联输出端。我将它接下一个595的SI端。SI: 串行数据输入端。74595的控制端说明:SRCLR(10脚): 低点平时将移位寄存器的数据清零。通常接Vcc。SRCK(11脚):上升沿时数据寄存器的数据移位。QA-QB-QC-.-QH;下降沿移位寄存器数据不变。(脉冲宽度:5V时,大于几十纳秒就行了。我通常都选微秒级)RCK(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。(通常我将RCK置为低电平,) 当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。我通常都选微秒级),更新显示数

19、据。13脚: 高电平时禁止输出(高阻态)。如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。比通过数据端移位控制要省时省力。74164和74595功能相仿,都是8位串行输入转并行输出移位寄存器。74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些。74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。这在串行速度慢的场合很有用处,数码管没有闪烁感。与164只有数据清零端相比,595还多有输出端时能/禁止控制端,可以使输出为高阻态。根据以上论证,采用方案二。3.6 计分器键盘的选择方案一:行列式键盘行列式键盘

20、是用N条I/O线作为行线,M条I/O线作为列线组成的键盘,在行线和列线的每个交叉点上,设置一个按键中按键的个数是M*N个。这种形式的键盘结构,能够有效的提高单片机系统中I/O的利用率,列线接P1.0P1.3行线接P1.4P1.7,行列适用于按键输入多的情况。方案二:独立式键盘键盘接口中使用多少根I/O线,键盘中就有几个按键,键盘接口使用了16根I/O口线,需要占用比较多的I/O口线这种类型的键盘,根据以上论证,采用方案一。4 模块的最终方案主控制器模块:采用AT89C51单片几机控制抢答器显示模块:数码管显示电源方案的选择:采用三端稳压器电路枪答器键盘模块:独立式键盘计分器显示模块:采用带有锁

21、存功能的移位寄存器74LS595芯片计分器键盘模块:行列式键盘抢答器软件程序#include #define uchar unsigned char/共阴码/uchar code table=0x00,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe ; /*代码存储区(64KB)*/共阳码uchar code table=0x03,0x9f,0x25,0x0d,0x99,0xc2,0x41,0x1f,0x01,0xff ;void delay (void) /* delay 函数*/uchar i,j; /*这个函数执行时间的延迟 */for (i=0;i20;

22、i+)for(j=0;j0;time-) /*无键按下,则关显示*/ j=table0;SCON=0x00;SBUF=j;while(TI!=1);TI=0;else j=tablekey; /*取键值并显示*/SCON=0x00;SBUF=j;while(TI!=1);TI=0;for(;) /*指示显示,并实现锁键功能*/ P1=temp;delay();抢答器加减记分显示程序:DBUF EQU 30H ;三位显示缓冲区首址ORG 0000HAJMP MAINORG 0030HMAIN: MOV SP,#60HACALL KEYSCAN ;调用键盘扫描子程序判断是加分或减分CJNE A,#

23、0EH,NEXT2 ;不是加分键,则转移判断是减分键?NEXT1: ACALL KEYSZ ;是加分键,调用键盘设置子程序ACALL DISPLAY ;调用串口静态显示子程序SJMP MAINNEXT2: CJNE A,#0FH,MAIN ;都不是,则转MAINAJMP NEXT1 ;是减分键,调用键盘设置子程序ORG 0100HKEYSZ: PUSH PSW ;键盘设置子程序PUSH ACCSETB RS1MOV R0,#DBUF ;R0指向显示缓冲区首地址MOV R7,#3 ;设置键盘输入位数L1: CLR RS1ACALL KEYSCAN ;调用键盘扫描子程序取按下键的键号SETB RS

24、1CJNE A,#0AH,L2 ;键入数合法性检测(是否大于9)L2: JNC L1 ;大于9,重新键入MOV R0,A ;键号送显示缓冲区INC R0DJNZ R7,L1 ;3位数值输入完否?未完继续,否则返回POP ACCPOP PSWCLR RS1RETKEYSCAN:MOV R3, #0F7H ;扫描初值(P1.3=0)MOV R1, #00H ;取码指针L3: MOV A, R3 ;开始扫描MOV P1, A ;将扫描值输出至P1MOV A, P1 ;读入P1值,判断是否有键按下MOV R4, A ;存入R4,以判断按键是否放开SETB C ;C=1MOV R5, #04H ;扫描P

25、1.4P1.7L4: RLC A ;将按键左移一位JNC KEYIN ;判断C=0?有键按下则C=0,跳至KEYININC R1 ;C=1,则无键按下,将取码指针值加1DJNZ R5, L4 ;4列扫描完毕了吗?MOV A, R3 ;扫描值载入SETB C ;C=1RRC A ;扫描下一行(P1.3P1.0)MOV R3, A ;存回扫描寄存器JC L3 ;C=1?是则P1.0尚未扫描到SJMP KEYSCAN ;C=0,则四行已扫描完毕KEYIN: MOV R7, #60 ;延时消除抖动D2: MOV R6, #248 ;DJNZ R6, $ ;DJNZ R7, D2 ;D3: MOV A,

26、 P1 ;延时后再读入P1值XRL A, R4 ;与上次读入值作比较JZ D3 ;A=0,表示按键未放,等待按键释放MOV A, R1 ;按键已放开,取码指针载入累加器MOV DPTR,#TABLE ;键盘码表首地址送DPTRMOVC A, A+DPTR ;查键码RET ;返回TABLE: DB 00H,01H,02H,03H ;键码安排表与键盘相同DB 04H,05H,06H,07HDB 08H,09H,0AH,0BHDB 0CH,0DH,0EH,0FHORG 0200HDISPLAY:MOV R0, #DBUF ;串口静态显示子程序MOV R2,#3 ;显示3位数码MOV DPTR,#SE

27、GTAB;DISP: MOV A,R0 ;MOVC A,A+DPTR ;取字段码MOV SCON,#0 ;置串口工作方式0MOV SBUF,A ;开始发送JNB TI,$ ;等待发送完毕CLR TI ;发送完毕,标志位清零INC R0 ;缓冲单元地址增1DJNZ R2,DISP ;三位数码发送完否?RET ;发送完毕,则返回SEGTAB: DB 0FCH,60H,0DAH,0F2H ;0,1,2,3(共阳极字段码表)DB 66H,0B6H, 0BEH,0E0H ;4,5,6,7DB 0FEH,0F6H,0EEH,3EH ;8,9,A,BDB 9CH,7AH,9EH,8EH ;C,D,+,-EN

28、DDBUF EQU 30H ;三位显示缓冲区首址ORG 0000HAJMP MAINORG 0030HMAIN: MOV SP,#60HACALL KEYSCAN ;调用键盘扫描子程序判断是加分或减分CJNE A,#0EH,NEXT2 ;不是加分键,则转移判断是减分键?NEXT1: ACALL KEYSZ ;是加分键,调用键盘设置子程序ACALL DISPLAY ;调用串口静态显示子程序SJMP MAINNEXT2: CJNE A,#0FH,MAIN ;都不是,则转MAINAJMP NEXT1 ;是减分键,调用键盘设置子程序ORG 0100HKEYSZ: PUSH PSW ;键盘设置子程序PU

29、SH ACCSETB RS1MOV R0,#DBUF ;R0指向显示缓冲区首地址MOV R7,#3 ;设置键盘输入位数L1: CLR RS1ACALL KEYSCAN ;调用键盘扫描子程序取按下键的键号SETB RS1CJNE A,#0AH,L2 ;键入数合法性检测(是否大于9)L2: JNC L1 ;大于9,重新键入MOV R0,A ;键号送显示缓冲区INC R0DJNZ R7,L1 ;3位数值输入完否?未完继续,否则返回POP ACCPOP PSWCLR RS1RETKEYSCAN: MOV R3, #0F7H ;扫描初值(P0.3=0)MOV R1, #00H ;取码指针L3: MOV

30、A, R3 ;开始扫描MOV P0, A ;将扫描值输出至P1MOV A, P0 ;读入P1值,判断是否有键按下MOV R4, A ;存入R4,以判断按键是否放开SETB C ;C=1MOV R5, #04H ;扫描P1.4P1.7L4: RLC A ;将按键左移一位JNC KEYIN ;判断C=0?有键按下则C=0,跳至KEYININC R1 ;C=1,则无键按下,将取码指针值加1DJNZ R5, L4 ;4列扫描完毕了吗?MOV A, R3 ;扫描值载入SETB C ;C=1RRC A ;扫描下一行(P1.3P1.0)MOV R3, A ;存回扫描寄存器JC L3 ;C=1?是则P1.0尚

31、未扫描到SJMP KEYSCAN ;C=0,则四行已扫描完毕KEYIN: MOV R7, #60 ;延时消除抖动D2: MOV R6, #248 ;DJNZ R6, $ ;DJNZ R7, D2 ;D3: MOV A, P0 ;延时后再读入P1值XRL A, R4 ;与上次读入值作比较JZ D3 ;A=0,表示按键未放,等待按键释放MOV A, R1 ;按键已放开,取码指针载入累加器MOV DPTR,#TABLE ;键盘码表首地址送DPTRMOVC A, A+DPTR ;查键码RET ;返回TABLE: DB 00H,01H,02H,03H ;键码安排表与键盘相同DB 04H,05H,06H,

32、07HDB 08H,09H,0AH,0BHDB 0CH,0DH,0EH,0FHORG 0200HDISPLAY:MOV R0, #DBUF ;串口静态显示子程序MOV R2,#3 ;显示3位数码MOV DPTR,#SEGTAB;DISP: MOV A,R0 ;MOVC A,A+DPTR ;取字段码MOV SCON,#0 ;置串口工作方式0MOV SBUF,A ;开始发送JNB TI,$ ;等待发送完毕CLR TI ;发送完毕,标志位清零INC R0 ;缓冲单元地址增1DJNZ R2,DISP ;三位数码发送完否?RET ;发送完毕,则返回SEGTAB: DB 0FCH,60H,0DAH,0F2H ;0,1,2,3(共阳极字段码表)DB 66H,0B6H, 0BEH,0E0H ;4,5,6,7DB 0FEH,0F6H,0EEH,3EH ;8,9,A,BDB 9CH,7AH,9EH,8EH ;C,D,+,-END

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1