八路电子抢答器电路设计

来源:互联网 发布:农产品淘宝店 编辑:程序博客网 时间:2024/05/01 23:42

2010-01-14

 

 

科信学院

课程设计说明书

2008/2009学年第二学期)

 

 

 

课程名称     单片机课程设计       

      八路电子抢答器电路设计

专业班级

学生姓名          

    号:       068072212         

指导教师   吴开兴 刘会军 马永强  

   贾少锐 李晓东 侯华   

设计周数           2             

 

设计成绩                          

 

         2009  6  

 

                  

1课程设计目的……………………………………………………………2

2系统分析……………………………………………………………3

2.1 设计任务……………………………………………………………3

2.2设计思想……………………………………………………………4

3硬件总体设计……………………………………………………………4

3.1硬件设计……………………………………………………………4

3.2系统设计原理框图…………………………………………………5

   3.3 总电路图(见附录)…………………………………………5

4 单元电路分析与设计………………………………………………………5

4.1单元电路设计………………………………………………………5

4.2模块性能分析………………………………………………………9

4.3最小系统图……………………………………………………………11

5元器件选择…………………………………………………………………13

6运行描述……………………………………………………………………13

7软件总体设计………………………………………………………13

7.1程序流程图……………………………………………………………13

7.2源代码……………………………………………………………14

 8设计总结……………………………………………………………22

 9参考文献……………………………………………………………23

附录 总电路图

前 言

随着电子技术的飞速发展,基于单片机的控制系统已经广泛应用于工业、农业、电力、电子、智能楼宇等行业。微型计算机作为嵌入式控制系统的主体与核心,代替了传统的控制系统的常规电子线路。同时楼宇智能化的发展与成熟,也为基于单片机的照明控制系统的普及与应用奠定了坚实的基础。

电子智能抢答器在抢答过程中,为了知道哪一组或哪一位选手先回答问题,必须要设计一个系统来完成这个任务。如果在抢答中,靠视觉是很难判断出哪组先答题。利用单片机系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒也可以分辨出使哪组优先回答问题。抢答组数可以在八组以内任意使用,本系统设计为模块形式采用九针插头进行连接,系统工作原理本系统采用AT89C52单片机作为核心。控制系统的五个模块分别为:单片机最小系统、显示模块、显示驱动模块、抢答开关模块、音乐音频输出模块。

1课程设计目的

通过设计学习单片机最小系统的基本设计方法,掌握单片机应用系统的开发调试过程。

(1)        学习单片机开发工具功能、特点和使用方法。

(2)        学会单片机控制系统程序的编制和编制和调试方法。

(3)        设计单片机抢答器硬件电路,绘制出电路原理图。

(4)        编制并调试出键盘扫描程序和显示驱动程序。

(5)        掌握单片机定时器的基本用法,编制出定时器的中断程序。

2 系统分析

系统设计主要包括硬件和软件两大部分,依据控制系统的工作原理和技术性能,将硬件和软件分开设计,硬件设计部分包括电路原理图、合理选择元器件、绘制线路图。然后对硬件进行调试、测试,以达到设计要求,软件设计部分,首先在总体设计中完成系统总框图和各模块的功能设计,拟定详细的工作计划;然后进行具体的设计,包括各模块的流程图,选择合适的编程语言和工具,进行代码设计等;最后是对软件进行调试、测试,以达到所需功能要求。

在系统设计中设计方法的选用时系统设计是否成功的关键,硬件电路是采用结构化系统设计方法,该方法保证设计电路的标准化、模块化。硬件电路的设计最重要的选择用于控制的单片机,并确定与之配套的外围芯片,使所设计的系统既经济又高性能。硬件电路设计还包括输入输出接口设计,画出详细电路图,标出芯片的型号、器件参数值,根据电路图在仿真机上进行调试,发现设计不当及时修改,最终达到设计目的。软件设计的方法与开发环境的选取有着直接的关系,本系统由于是采用52系列单片机,因此使用汇编语言进行开发。此编程工具比较简单实用。本系统软件设计采用模块化系统设计方法,先编写各个功能模块子程序,然后再进行组合与调整,经过调试后,达到设计功能要求。

2.1技术要求

(1)  选择常用单片机芯片进行电路系统设计。

(2)  实现具有按键、显示功能的单片机最小系统。

(3)  完成电子抢答器的基本功能。

(4)  要求具有自动计时功能。

2.2 设计思想

电子抢答器设计了八路抢答,选用了AT89C52芯片,采用外扩电路。主要功能有编程实现。抢答器具有记忆功能每一次时间设置完成,复位后不需要重新进行时间设定,P1口连接独立式键盘,通过键盘输出按键信息,在通过单片机将它转换成能在七段数码管上相应显示.P0P2P3连接七段数码管。由编程实现定时功能,在选定回答组之后,进行倒计时。

3 硬件总体设计

3.1硬件设计

(1)         控制系统主要由单片机应用电路、存储器接口电路、显示接口电路组成,其中单片机AT89C52是系统工作的核心。它主要负责控制各个部分协调工作。

(2)         硬件组成及所需元件:该系统的核心器件是AT89C52。在其外围接上复位电路、上拉电阻、数码管、按钮及扬声器。元件为晶振X1、电容电阻。

控制系统仿真用到了伟福软件,集成调试环境,集成了编译器,编辑器,调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。树状结构显示,一目了然,支持ASM(汇编)、C语言、多语言多模块源程序混合调试,在线直接修改、编译、调试源程序,错误指令定位。总之功能十分强大。

抢答器要求同时供8名选手或者8个代表队比赛,分别用8个按钮S1S8表示。抢答器具有锁存和显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到系统清除为止。

3.2系统设计原理框图

根据系统分析,能够根据实际需求通过原理框图形式显示出来。

如图所示

 

 

 

 

 

 

 

 

 

1系统设计原理框图

3.3  总电路图(见附录)

  其中,XTAL1XTAL2为晶振输入引脚,VCC接电源(+5V),RESET复位引脚,GND接地,   P0P2P3分别连接LED七段数码管,P1口连接独立式键盘。另外需外接上拉电阻限制电流。

4 单元电路分析与设计

4.1单片机芯片的选择

单片机选用的是Atmel公司推出的AT89S52,它是一种低功效、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。在单芯片上拥有灵巧的8CPU和在线系统可编程Flash,使得AT89S52具有以下标准功能:8K字节Flash256字节RAM32I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。空闲模式下,CPU停止工作,允许RAM、定时器/计数器串口、中断继续工作。掉电保护方式下RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。而且,它还具有一个看门狗(WDT)定时/计数器。如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。T89S5240个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中端口,216位可编程定时计数器,2个全双工串行通信口,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

4.1.2 AT89S52芯片引脚图

如图所示

 

 

 

2   AT89C52引脚图

4.1.3单片机管脚说明

1Vcc:供电电压。

2GND:接地。

3P0口:P9口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在Flash编程时,P0口作为原码输入口,当Flash进行校验时,P0输出原码,此时P0外部必须被拉高。

4P1口:P1口是一个内部提供的上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故,。在Flash编程和校验时,P1作为第八位地址接收。

5P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在Flash编程和校验时接收高八位地址信号和控制信号。

6P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89S52的一些特殊功能口,如下表所示:

1  P3口功能引脚简介

P3口引脚

第二功能

P3.0

RXD(串行口输入)

P3.1

TXD(串行口输出)

P3.2

INT0(外部中断0输入)

P3.3

INT1(外部中断1输入)

P3.4

T0(定时器0外部脉冲输入)

P3.5

T1(定时器1外部脉冲输入)

P3.6

WR(外部数据存储器写脉冲输出)

P3.7

RD(外部数据存储器读脉冲输出)

P3口同时为闪烁编程和编程校验接收一些控制信号。

7RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

8ALE/RPOG:当访问外部存储器时,地址锁存允许的输出电平由于锁存地址的地位字节。在Flash编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6.因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳出一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0.此时,ALE只有在执行MOVXMOVC指令时ALE才起作用。另外该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。

9/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

10/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH,不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在Flash编程期间,此引脚也用于施加12V编程电源(VPP)。

11XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

12XTAL2:来自反向振荡器的输出。

4.2模块性能分析

模块部分主要分为AT89C52芯片、独立式键盘、LED数码管显示部分,下面对这后两部分进行介绍,其中对LED七段数码管显示器做详细介绍,并根据实际工作情况采用合适的工作方式。

4.2.1独立式键盘

  利用8个常开按钮开关S1~S88只电阻R1~R8组成抢答器的输入电路。S1~S8为自复式常开按钮开关,分别作为8位抢答按钮,与它相连的8只电阻为下拉电阻,以保证按钮未按下时,锁存器的输入端为低电平。

当程序执行时,按下按键,七段数码管显示器上即显示相应的是哪个组按下抢答。

4.2.2 LED数码管显示

译码器的逻辑功能是将每一个输入的二进制代码译成对应的输出高、低电平信号,是编码器的反操作。数码管可以用TTLCMOS集成电路直接驱动,所以使用译码器将BCD编码译成数码管所需要的驱动信号,以便使数码管用十进制数字显示出BCD编码表示的数值。

七段数码管的段排列和内部结构如图所示

 

 

 

                

 

 

 

 

 

 

 

 

 

3 七段数码管的段排列和内部部结构

应根据实际情况决定究竟采用共阳(图3左图)还是共阴(图2右图)方式,其基本原则是:若单片机口线直接驱动数码管各段,最好采用共阳极数码管,因为8051系列单片机口线输出高电平时,输出的电流很小,数码管不会太亮。若数码管通过驱动芯片与单片机相连,就要看驱动芯片对数码管极性的要求了

点亮显示器分为静态和动态显示两种方法。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或是截止。例如,其段数码管的abcdef、导通,g截止,则显示0.这对这种显示方式每一位都要有一个8位输出口控制,所占硬件较多,一般用于显示位数较少(很少)的场合。当位数较多时,用静态显示所需的I/O过多,一般采用动态显示方法。

所谓动态显示,就是逐位地轮流点亮各位显示器(扫描),对于每一位显示器而言,每个一段时间点亮一次。显示器的点亮既与点亮时的导通电流有关,也与点亮时间和间隔时间比例有关。调整电流和时间参数,可是实现亮度较高、较为稳定的显示,同时可减少工作电流。

   3中的COM是选通位,对于共阳极数码管,当abcdefgh端接低电平时,COM位高电平,数码管各段全部点亮。例如,想让数码管显示“1”,就必须使数码管的bc段点亮,其它段熄灭;所以使bc段为低电平,其它各引脚均为高电平。在设计电路时,可将这几位分别接到单片机的引脚上,还要加上限流电阻,这样就可由程序控制数码管的工作情况了。但是如果用一个端口驱动一个数码管,四位数码管就需要四个空闲端口,而在许多系统中并无四个端口可用。此外,使用四个端口往往使得每一个数字都需要独立驱动(缓冲)电路和排阻,这将大大增加系统的成本。

  最常见的解决方案是采用多路复用显示。这是指对于每一个显示只驱动1/4时间。只要在20Hz-50Hz之间循环所有显示,由于人眼存在视觉残留,在这样的显示方式下,数码管看起来时同时点亮的。

在这次课程设计中根据实际需要采用了七段数码管共阳极和静态显示方式。

4.3最小系统图

最小系统图由AT89C52芯片、外部晶振电路、复位电路、电源电路构成。使用到的连接引脚为:VCCRST XTAL1XTAL2

最小系统图如下图所示

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4 最小系统图

5 元器件选择

选用了AT89C52芯片、电阻、电容、LED数码管显示器以及按键。

2 电路元件配置表

元件名称

参数

个数

电阻

4.7K

4

晶振电容

给定

1

普通电容

给定

2

按键

给定

8

LED数码管显示器

给定

3

6 运行描述

   软件仿真使用了伟福仿真软件,将程序导入后,选择正确的COM口和适合的仿真频率,进行编译和构建。检查程序是否正确。由于动态显示我们没有办法实现,只能在经过多次商讨以后,将本应该是动态显示的LED数码管显示改为了静态显示。 定时部分用软件实现的,采用中断方法,进行倒计时。 程序无误后,开发板显示屏有所显示。按键按下后,LED显示屏上显示是哪一组抢答,并且倒计时开始。由于在读抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后才检测按键口

故采用在延时子程序中加了读数据口程序.保证了灵敏度和可靠性

7 软件总体设计

   7.1程序流程图

    根据硬件电路图分析,软件程序实现流程图如下所示

   5软件程序流程图

7.2源代码

 源代码如下:

   ORG 0000H

        AJMP MAIN

        ORG 001BH

        AJMP T1INT

        ORG 0040H

MAIN:

        MOV R2,#60;初设答题时间为60s

        MOV TMOD,#10H;设置未定时器/模式1

        MOV TH1,#3CH

        MOV TL1,#0B0H;50ms为一次溢出中断

        SETB EA

        SETB ET1

;允许中断T1

        SETB TR1

        ;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了

;=====查询程序=====

START:   MOV R5,#0BH

         MOV R4,#0BH

         MOV R3,#0BH

         ACALL DISPLAY;未开始抢答时候显示FFF

         ACALL DELAY

         MOV A,R2

         MOV R6,A;R1->R6,因为R2中保存了抢答时间

         MOV R7,#01H  ;读抢答键数据信号标志,这里表示只读一次有用信号

         MOV R3,#0AH;抢答只显示计时,灭号数

         MOV A,P1

         CJNE A,#0FFH,ACCOUT;若查询到抢答转ACCOUT,对其各位进行处理

         AJMP START;否则转到START

;=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=====

COUNT:   MOV R0,#00H;重置定时器中断次数

         MOV TH1,#3CH

         MOV TL1,#0B0H;重置定时器

RECOUNT: MOV A,R6;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6

         MOV B,#0AH

         DIV AB;除十分出个位/十位

         MOV 30H,A;十位存于(30H)

         MOV 31H,B;个位存于(31H)

         MOV R5,30H;取十位

         MOV R4,31H;取个位

LARGER:

         DEC R6;计时一秒R6自动减1

         CJNE R6,#03H,NEXTT

HERE:    SJMP HERE

NEXTT:   ACALL DISPLAY

         AJMP RECOUNT

ACCOUT:

         JNB ACC.0,TRUE1

         JNB ACC.1,TRUE2

         JNB ACC.2,TRUE3

         JNB ACC.3,TRUE4

         JNB ACC.4,TRUE5

         JNB ACC.5,TRUE6

         JNB ACC.6,TZ1

         JNB ACC.7,TZ2

         AJMP RECOUNT

TZ1:     JMP TRUE7

TZ2:     JMP TRUE8

         AJMP START

;=====正常抢答处理程序=====

TRUE1:

         MOV A,R2

         MOV R6,A;抢答时间R2R6

         MOV R3,#01H

         AJMP COUNT

TRUE2:

         MOV A,R2

         MOV R6,A

         MOV R3,#02H

         AJMP COUNT

TRUE3:

         MOV A,R2

         MOV R6,A

         MOV R3,#03H

         AJMP COUNT

TRUE4:

         MOV A,R2

         MOV R6,A

         MOV R3,#04H

         AJMP COUNT

TRUE5:

         MOV A,R2

         MOV R6,A

         MOV R3,#05H

         AJMP COUNT

TRUE6:

         MOV A,R2

         MOV R6,A

         MOV R3,#06H

         AJMP COUNT

TRUE7:

         MOV A,R2

         MOV R6,A

         MOV R3,#07H

         AJMP COUNT

TRUE8:

         MOV A,R2

         MOV R6,A

         MOV R3,#08H

         AJMP COUNT

;=====显示程序=====

DISPLAY: MOV DPTR,#DAT1;查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出,

         MOV A,R3

         MOVC A,@A+DPTR

         MOV P0,A

         ACALL DELAY2

         MOV DPTR,#DAT3

         MOV A,R4

         MOVC A,@A+DPTR

         MOV P3,A

         ACALL DELAY2

         MOV DPTR,#DAT2

         MOV A,R5

         MOVC A,@A+DPTR

         MOV P2,A

         ACALL DELAY2

         RET

DAT1:DB 0FFh,0F9h,0A4H,0B0h,99h,92h,82h,0F8h,80h,90h,0FFH,8EH

;"","1","2","3","4","5","6","7","8","9","","F"

DAT2:DB 03H,9FH,25H,0DH,99H,49H,41H,1FH,01H,09H,0FFH,71H

;第一个为零,其他与上相同,因为十位如果为零显示熄灭

DAT3:DB 0C0H,0F9h,0A4H,0B0h,99h,92h,82h,0F8h,80h,90h,0FFH,8EH

;=====延时4236个机器周期(去抖动用到)=====

DELAY:   MOV 32H,#12H

LOOP:    MOV 33H,#0AFH

LOOP1:   DJNZ 33H,LOOP1

         DJNZ 32H,LOOP

         RET

;=====延时4236个机器周期(显示用到)=====

DELAY2:  MOV 32H,#0FFH

LOOP3:   MOV 33H,#0FFH

         mov 34H,#0FFH

         MOV A,R7           ;每隔60~70个机器周期读一次P1,全为1时为无效数据,继续读,有一个不为1,转到正常抢答处理

         JNZ  AAAA1         ;没读到有效数据时继续转到AAAA1

         NOP

         NOP

         LOOP4:  DJNZ 34H,LOOP4

         LOOP2:  DJNZ 33H,LOOP2

         DJNZ 32H,LOOP3

         RET

;=====读抢答按键数据口程序=====

;由于在读抢答数据口的时候,单片机首先进入倒计时程序,再调用显示程序,最后才检测按键口

;然而在检测按键口时动态扫描要调用三次(4ms)延时程序.这样就会导致读数据口出现滞后,造成1号优先最高.8号最低.

;故采用在延时子程序中加了读数据口程序.保证了灵敏度和可靠性

AAAA1:   MOV A,P1

         CJNE A,#0FFH,AA1           ;当不全为1时的数据为有效数据

AA0:     MOV 36H,A          ;将有效数据送到36H暂存

         AJMP LOOP2

AA1:     DEC R7

         AJMP AA0

 

;=====T1溢出中断(计时程序)=====

T1INT:   MOV TH1,#3CH

         MOV TL1,#0B0H

         INC R0

         RETI

END

8 设计总结

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9参考文献

[1]             徐时亮等.单片微机控制技术.上海:复旦大学出版社,199411

[2]             夏宽理等.程序设计.上海:复旦大学出版社,20007

[3]             雷思孝,冯育长.单片机系统设计及工程应用.西安:西安电子科技大学出版社,2005

[4]             张洪润,蓝清华.单片机应用技术教程.北京:清华大学出版社,1999

[5]             张毅坤,等,单片微型计算机原理及应用.西安:西安电子科技大学出版社,2001

[6]             毛敏.MCS-51系列单片机系统及应用实践教程.北京:     高等教育出版社,2006

[7]             赵文博,刘文涛.单片机语言C51程序设计.北京:人民邮电出版社,2005

[8]             李玉梅.基于单片机MCS-51系列单片机原理的应用设计.北京:国防工业出版社,2006

附录 总电路图

 

 

 

 

 

课程设计

   

 

课程设计

   

 

指导教师

(签字)

 

                    

 

 

 

 

 

原创粉丝点击