电子抢答器单片机的设计_第1页
电子抢答器单片机的设计_第2页
电子抢答器单片机的设计_第3页
电子抢答器单片机的设计_第4页
电子抢答器单片机的设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 a, r3 ;开始扫描mov p0, a ;将扫描值输出至p1mov a, p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论