1、河南理工大学本科课程设计智力竞赛抢答器摘要设计要求:1)能容许2-8组进行抢答。2)能显示抢答组号。3)各组记 分,并能记分显示。4)比赛结束时,能发出报警声。硬件系统设计1)控制系统主要由单片机应用电路、存储器接口电路、显示接口电路组成。其中单片机A T89c51是系统工作的核心,它主要负责控制各个部分协调工作.2)硬件组成及所需元件:该系统的核心器件是A T89C5U在其外围接上复 位电路、上拉电阻、数码管、按钮及扬声器。元件为:晶振XI、电容Cl、C2、C3、电阻RP1。P3.0和P3.1由裁判控制,分别是抢答停止和开始键。P1.0-P1.7 是8组抢答的输入口,P2.0-P2.3 口为
2、数码管的段选口,位选口用的是 P0.0P0.6 口输血 外部中断0、1和P3.3,P3.4为抢答记时调整口,实现的对 个队进行计时,并且加减调整,外部中断0,1实现了答题时间调整.P3.4 P3.5分别实现了时间的加 和减一.P3.6为蜂鸣器的控制口。控制系统防真用到了伟福软件,集成调试环境,集成了编缉器、编译器、调试器,支持软件模拟,支持项II管理功能强大的观察窗口,支持所有的数据类 型。树状结构显示,一目了然,支持A SM(汇编)、C语言,多语言多模块源程序 混合调试,在线直接修改、编译、调试源程序,错误指令定位。功能很强大。系统仿真还用到了 PROTUCE软件,可通过仿真可以完全显示出所
3、设计系统的功能,对于程序的调试等有很大的帮助.http:/电/发烧友http:/电技术论坛河南理工大学本科课程设计目录1概述.32系统总体方案及硬件计.42.1 控制系统及所需元件组成.42.2 实验原理.43软件设计.8.4 Proteus 软件仿真.124.1 伟福软件.124.2 在 Proteus 软件.125心得体会.19参考文献.20附L源程序代码.21附2:计算器模拟系统电图.30http:/电广发烧友电广技术论坛河南理工大学本科课程设计1概述单片机原理及应用技术是一门技术性,应用性、实践性很强的学科。课 程设计是学好本门课程的又一重要实践性教学环节,课程设计的n的和任务就是 配
4、合单片机的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合应 用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立 单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识 转化为能力和能力转化为工程素质的重要阶段。在实际生活中有好多地方都用到 了单片机,因此学习好这门课程有着十分重要的意义。要求的模拟的抢答器:1)能容许2-8组进行抢答。2)能显示抢答组号。3)各组记分,并能记分显示。4)比赛结束时,能发出报警声。硬件系统设计1)控制系统主要由单片机应用电路、存储器接口电路、显示接口电路组成。其中单片机A T89c51是系统工作的核心,它主要负责控制各
5、个部分协调工作.2)硬件组成及所需元件:该系统的核心器件是A T89c51。在其外围接上复 位电路、上拉电阻、数码管、按钮及扬声器。元件为:晶振XI、电容Cl、C2、C3、电阻RPL P3.0和P3.1由裁判控制,分别是抢答停止和开始键。P1.0-P1.7 是8组抢答的输入口,P2.0P2.3 口为数码管的段选口,位选口用的是 PO.0P0.6 口输出,外部中断0、1和P3.3,P3.4为抢答记时调整口,实现的对 个队进行计时,并且加减调整,外部中断0,1实现了答题时间调整.P3.4 P3.5分别实现了时间的加和减一.P3.6为蜂鸣器的控制口。控制系统防真用到了伟福软件,集成调试环境,集成了编
6、缉器、编译器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类 型。树状结构显示,一用了然,支持A SM(汇编)、C语言,多语言多模块源程序 混合调试,在线直接修改、编译、调试源程序,错误指令定位。功能很强大。系统仿真还用到了 PR0TUCE软件,可通过仿真可以完全显示出所设计系统的功能,对于程序的调试等有很大的帮助.2http:/电广发烧友http:/电广技术论坛河南理匚大学本科课程设计1918XTAL1PO O/ADOPO 1/AD1P0 2/AD29XTAL2P0 3/AD3PO 4/AD4PO 5/AD5P0 6/AD6RSTP0 7/AD7P2 0/A8P2 1
7、/A9P2 2/A1022-30PSEN ALE EAP2 3/A11P2 4/A12P2 5/A13P2 6/A14P2 7/A151_P1 0P3 0/RXD4-PI 1P3 1/TXD3_P1 2P3 2/INTO_57PI 3 P14P3 3/INTT P3.4/T0PI 5P3 5/T1P1 6P3 6WRPI 7P3 7/RDAT89C51外部振荡电路单片机必须在A T89c51的驱动下才能工作.在单片机内部有个时 钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的 各个单元。外部振荡电路见图-口口4CRYSTALC2小C31nF.1nF.(图-)外部中断和内部
8、中断并存,单片机有硬件复位端,只要输入持续4个机器周期的 高电平即可实现复位。硬件复位后的各状态可知寄存器及存储器的值都恢复到了 4http:/电广发烧友http:/电广技术论坛河南理工大学本科课程设计初始值,应为本设计功能中有倒计时时间的记忆功能,所以不能对单片机进行硬 件复位。只能用软复位。软复位实际上就是当程序执行完毕之后,将程序指针通 过一条跳转指令让它跳转到程。复位电路采用图二所示:外部还接有蜂鸣器(由于缺少驱动器,发生器不响,所以,用绿灯换了)用来发 出报警音,其图形如下:采用七段码7SE G-MPX4-CC显示,它是共阴极的由高电平点亮。图形如下:lllllll1HI5http:
9、/电广发烧友http:/电广技术论坛河南理工大学本科课程设计采用八个BUTTON按钮作为抢答的选择按键如图所示:o。-J-L IL-:lr 4 -To.on-TJ 4 一!*Li6http:/电广发烧友电广技术论坛河南理工大学本科课程设计3软件系统设计智力竞赛抢答器要求有计时记忆功能,次时间设置完,复位后不需重新进 行时间设定,通过键盘扫描输出按键信息,再通过单片机将它转换成能在七段数 码管上显示字型码.当抢答完毕时,会在数码管上显示抢答者数字号码提示以表示抢答成功.同时显 示其分数,分数的加减可由裁判手动进行.采用独立式键盘,可实现8路抢答.在显示时使用的是七段数码管显示在本设计中根据实际情
10、况采用的是动态显示 方法.并通过查表法 将其在数码管上显示出来,其中P1 口为字型码输入端,P2 口低6位为字选段输入端.通过查表将字型码送给7段数码管显示的数字。软件 去抖动,如果开始键”按下就向下执行,否者跳到开始。采用倒计时程序,使其具 有倒计时功能。回答倒计时30秒。抢答时间5秒。采用发声警报(由于发生器 不响,所以,用绿灯换了),起到报警作用。1、如果想调节抢答时间或答题时间,按“抢答时间调节键或”答题时间调节”键进入调节状态,此时会显示现在设定的抢答时间或回答时间值,如想加 秒按 下“加1s”键,如果想减秒按下 Ts键,时间LE D上会显示改变后的时间,调整范围为0s、99s,0s
11、时再减Is会跳到99,99s时再加Is会变到0s主持人按抢答开始”键,会有提示音,并立刻进入抢答倒计时(预设30s抢答时 间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预 设60s抢答时间),不进行抢答查询,所以只有第 个按抢答的选手有效。倒数 时间到小于5s会每秒响,下提示音。如倒计时期间,主持人想停止倒计时可以随时按“停止按键,系统会自动进入准 备状态,等待主持人按“抢答开始”进入下次抢答计时。4、如果主持人未按“抢答开始键,而有人按了抢答按键,犯规抢答,LE D 上不断闪烁FF和犯规号数并响个不停,直到按下”停止键为止。5、P3.0为开始抢答,P3.1为停止,pl.
12、O-pl.7为八路抢答输入 数码管段 选P0 口,位选P2 口低3位,蜂鸣器输出为P3.6 口。P3.2抢答时间调整结,P3.3 回答时间调整,P3.4为时间加1调整,P3.5为时间减1调整。7http:/电/发烧友http:/电技术论坛河南理工大学本科课程设计下面是部分功能程序(附部分说明):;=查询程序=STA RT:MOV R5,nOBHMOV R4,#OBHMOV R3,#OBHA CA LL DISPLA Y;未开始抢答时候显示FFFJB P3.0,N E XT;dddddddA CA LL DE LA YJB P3.0,N E XT;去抖动,如果开始键“按下就向下执行,否者跳到非法
13、 抢答查询A CA LL BA RK;按键发声MOV A,R1MOV R6,A;送R1-R6,因为RI中保存了抢答时间SE TB OK;抢答标志位,用于COUN T只程序中判断是否查询抢答MOV R7,#01H;读抢答键数据信号标志,这里表示只读一次有用信号MOV R3,#0A H;抢答只显示计时,灭号数A JMP COUN T;进入倒计时程序,”查询有效抢答的程序”在COUN T里面N E XT:JN B Pl.O,FA LSE 1JN B Pl.1,FA LSE 2JN B Pl.2,FA LSE 3JN B Pl.3,FA LSE 4JN B Pl.4,FA LSE 5JXB Pl.5,
14、FA LSE 6JN B Pl.6,FA LSE 7JN B Pl.7,FA LSE 8A JMP STA RT;=ITO(抢答时间Ri调整程序)=IN TOSUB:MOV A,RIMOV B,#OA HDIV A BMOV R5,A8http:/电/发烧友http:/电技术论坛河南理工大学本科课程设计CJN E A,#0FFH,A A 1;当不全为1时的数据为有效数据A A O:MOV 36H,A;将有效数据送到36H暂存A JMP L00P2A A 1:DE C R7A JMP A A O;=发声程序=BA RK:SE TB RIN GA CA LL DE LA Y1A CA LL DE
15、LA Y1CLR RIN G;按键发声RE T;=T0溢出11断(响铃程序)=TOIN T:MOV THO,#OE CHMOV TLO,#OFFHJXB RIN G,OUT;CPL P3.6;RIN G标志位为1时候P3.6 口不短取反使喇叭发出一定频率的声 音 OUT:RE TI;=T1溢出中断(计时程序)=T1IN T:MOV TH1,#3CHMOV TL1,#OBOHIN C RORE TIE N Diohttp:/www.elecfans.coin电/发烧友http:/电广技术论坛河南理大学本科课程设计4系统仿真1:伟福软件用到了伟福软件,集成调试环境,集成了编组器、编译器、调试器,支
16、持软件模 拟,支持项FI管理功能强大的观察窗口,支持所有的数据类型。树状结构显示,一用了然,支持A SV(汇编)、C语言,多语言多模块源程序混合调试,在线直接 修改、编译、调试源程序,错误指令定位。功能很强大。用于对程序的调试和编 辑。其界面如下:传56000:轨件模mH(8031)文件S E1)技索 项目建)执行)外设w 仍其)哥勒Qp,|j|xl t B D e H 团)0B1 0SQE3-0tt第 执行时间 o o k oooom am ooook a oom psy ooh sr on2:PROTUCE 软件系统仿真还用到了 PROTUCE软件,可通过仿真可以完全显示出所设计系统的功能
17、,对于程序的调试等有很大的帮助.系统仿真时首先要在使用伟福编译器,把所写的程序进行编译,同时在仿真器里 设置生成HE X文件,编译无错误时进行PROTUCE仿真。首先要新建个文档是 11http:/电/发烧友http:/电广技术论坛河南理匚大学本科课程设计DS型的找出需要的器件,可以使用搜索功能。接着把各个器件放到合适的位置 都要放到蓝色框内。然后根据H己的设计要求连线。等所有的兀件都连接完成后 可以把,伟福编译生成的无错误文件加载到A T89c51中,方法是,右键点中器件 然后在用左键点击,出来个对话框在program file后选择要添加文件,文件 要求必须是HE X文件。然后可以点击运行
18、观察现象,看与自己设置的符合否,如 果不相符在查找错误进行修改,般的错误都是程序中的,所以要认真的读取程 序的每一个部分作好的PROTUCE图:12http:/电/发烧友http:/电广技术论坛 河南理工大学本科课程设计六号抢答到时时的显示图:13http:/电/发烧友http:/电广技术论坛河南理匚大学本科课程设计使用加法调整时的图:度照嘿黑嬷牒患R6,因为R1中保存了抢答时间SETB OK;抢答标志位,用于COUNT只程序中判断是否套询抢答MOV R7,#01H;读抢答键数据信号标志,这里表示只读次有用信号MOV R3,#0AH;抢答只显示计时,灭号数AJMPCOUNT;进入倒计时程序,”
19、台询有效抢答的程序”在COUNT里面NEXT:JNB Pl AFALSE1JNBP1.1.FALSE2JNBP12FALSE3JNBP13FALSE4JNBP1AFALSE5JNBP1.5.FALSE6JNBP1.6JALSE7JNBP1.7,FALSE8AJMP START;=非法抢答处理程序=FALSE 1:MOVR3,#()1HAJMP ERRORFALSE2:MOV R3,#02HAJMP ERRORFALSE3:MOV R3.#O3HAJMP ERRORFALSE4:MOV R3,#04HAJMP ERRORFALSE5:MOV R3.#O5HAJMP ERRORFALSE6:MOV
20、 R3,#06HAJMP ERRORFALSE7:MOV R3.#O7HAJMP ERRORFALSE8:MOV R3,#08HAJMP ERROR:=INT0(抢答时间RI调整程序)=http:/电/发烧友http:/电技术论坛河南理工大学本科课程设计INT0SU 氏 MOVA.R1MOV B,#OAHDIV ABMOV R5,AMOV R4,BMOV R3,#0AHACALL DISPLAY;先在两个时间LED上显示RIJNB P3.4,INC0;P3.4 为+ls 键,如按 F跳到 INCOJNB P35DEC0;P3.5 为“s 键,如按卜跳到 DECOJNB P3.kBACKO;P3
21、.1为确定键,如按卜制K至lj BACKOAJMPINTOSUBINCO:MOVA,R1CJNE A,#63H,ADD);如果不是99,R2加1,如果加到99,R1就置0,重新加起。MOVRU#OOHACALL DELAY 1AJMPINTOSUBADDO:INC RIACALL DELAY IAJMP INTOSUBDECO:MOV A,RIJZ SETRI;如果 RI 为 0,R1 就置 99,DEC RIACALL DELAY 1AJMP INTOSUBSETRI:MOV RI,#63HACALL DELAY 1AJMP INTOSUBBACKO:RETI;=INTl(问答时间R2调整程
22、序)=INT1SUB:MOVA,R2MOV B,#OAHDIV ABMOV R5,AMOV R4,BMOV R3.#0AHACALL DISPLAYJNB P3.4JNC1JNB P35DECI22http:/电/发烧友http:/电技术论坛河南理工大学本科课程设计JNB P3.LBACK1AJMPINT1SUBINCI:MOVA,R2CJNE A,#63H.ADDIMOV R2,#00HACALL DELAY 1AJMP INTI SUBADD I:INC R2ACALL DELAY 1AJMP INTI SUBDECI:MOVA,R2JZ SETR2DECR2ACALL DELAY 1AJ
23、MP INTI SUBSETR2:MOV R2,#63HACALL DELAY 1AJMP INTI SUBBACK1:RETI尸=倒计时程序(抢答倒计时和问答倒计时都跳到改程序)=REPEAT:MOVA.R2;使用锦囊时重新计时MOV R6,ACLR RINGCOUNT:MOV RO,#()()H;重置定时器中断次数MOV TH 1,#3cHMOV TL1,#()BOH;重置定时器RECOUNT:MOVA,R6;R6保存了倒计时的时间,之前先将抢答时间或回答时间给R6MOV B,#OAHDIV AB;除十分出个位/十位MOV 30H,A;十位存于(30H)MOV 31 H.B;个位存于(31
24、H)MOV R5,30H;取十位MOV R4,3IH;取个位MOV A,R6SUBB A,#()7HJNC LARGER;大于5s跳到LARGER,小于等于5s会提醒MOV A,ROCJNE A.#OAH,FULL;Is 中 0.5s 向下运行23http:/电/发烧友http:/电技术论坛河南理工大学本科课程设计CLR RINGAJMP CHECKFULL:CJNE A.#14H,CHECK;卜面是Is的情况,响并显示号数并清R0,重新计SETB RINGMOVA,R6JZ QUIT;计时完毕MOV RO,#(X)HDECR6;秒标志减1AJMP CHECKLARGER:MOVA,ROCJN
25、E A,#14H,CHECK;如果is向卜运行,否者跳到台“停/显示”DECR6;计时秒R6自动减1MOV RO,#(X)HCHECK:JNB P3.1,QUIT;如按卜停止键退出JNB OKCHECKK;只在问答倒计时才有效AJMPNEXTTCHECKKJNB P3.0REPEAT;判断是否使用锦囊NEXTT:ACALL DISPLAYJB OK,ACCOUT;如果是抢答倒计时,如是则咨询抢答,否者跳过台而继续倒数(这里起到 锁抢答作用)AJMP RECOUNTACCOUT:MOV A,36HJNBACCATRUElJNB ACC.LTRUE2JNB ACC2TRUE3JNB ACC.3,T
26、RUE4JNB ACC.4,TRUE5JNB ACC.5,TRUE6JNB ACC6TziJNB ACC.7,TZ2AJMPRECOUNTTZ1JMPTRUE7TZ2:JMPTRUE8QUIT:CLR OK;如果按卜了“停止键”执行的程序CLR RINGAJMP START正常抢答处理程序=24http:/电/发烧友http:/电技术论坛河南理工大学本科课程设计TRUE 1:ACALL BARKMOVA,R2MOV R6,A;抢答时间R2送R6MOV R3,#01HCLR OK;因为答题的计时不再杳询抢答,所以就锁了抢答AJMP COUNTTRUE2:ACALL BARKMOVA,R2MOV
27、R6,AMOV R3,#02HCLR OKAJMP COUNTTRUE3:ACALL BARKMOVA,R2MOV R6,AMOV R3,#03HCLR OKAJMP COUNTTRUE4:ACALL BARKMOVA,R2MOV R6,AMOV R3,#04HCLR OKAJMP COUNTTRUE5:ACALL BARKMOVA,R2MOV R6,AMOV R3,#05HCLR OKAJMP COUNTTRUE6:ACALL BARKMOVA.R2MOV R6,AMOV R3,#06HCLR OKAJMP COUNTTRUE7:ACALL BARKMOVA,R225http:/电/发烧友h
28、ttp:/电技术论坛河南理工大学本科课程设计MOV R6,AMOV R3,#O7HCLR OKAJMP COUNTTRUE8:ACALL BARKMOVA,R2MOV R6,AMOV R3,#O8HCLR OKAJMP COUNT尸=:二犯规抢答程序=ERROR:MOV RO,#OOHMOV TH1,#3CHMOVTLI,#OBOHMOV 34H.R3;犯规号数暂存与(34H)HERE:MOV A,ROCJNE A,#O6H,FLASH;O.3s向卜运行0灭并停响CLR RINGMOV R3,#0AHMOV R4,#0AHMOV R5.#0AH;三灯全灭AJMP CHECK 1FLASH:CJ
29、NE A,#OCH,CHECK1;1面是0.8s的情况,响并显示号数并清RO,重新计SETB RINGMOV RO,#OOHMOV R3,34H;取【可号数MOV R5,#0BHMOV R4.#0BH;显示FF和号数AJMP CHECK 1CHECK 1:JNB P3.LQUIT1ACALL DISPLAYAJMP HEREQUIT I:CLR RINGCLR OKAJMP START;=显 示 程序=DISPLAY:MOV DPTR.#DAT1;行表显示程序,利用PO 口做段选码口输出/P2低三位做位选码 输出,26http:/电/发烧友http:/电技术论坛河南理工大学本科课程设计MOVA
30、R3MOVC A,A+DPTRMOV P2,#0feHMOV PO,AACALL DELAY2MOV DPTR,#DAT2MOVA,R5MOVC A,A+DPTRMOV P2,#0fdHMOV PO,AACALL DELAY2MOV A,R4MOVC A,A+DPTRMOV P2,#0fbHMOV PO,AACALL DELAY2RETDAT 1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,O7h,7fh,6fh,OOH,71H灭”1 “2“”灭“JF”DAT2:DB 3fh.O6h,5bh,4fh,66h.6dh,7dh,O7h,7fh,6thOOH.71H;第一个为零,其
31、他与上相同,因为十位如果为零显示熄灭 尸=加减时间延时(起到不会按卜.就加N个数)=DELAY 1:MOV 35H,#08HLOOPO:ACALL DISPLAYDJNZ 35HXOOPORET;=延时4236个机器周期(去抖动用到)=DELAY:MOV32H,#I2HLOOP:MOV 33H,#OAFHLOOP1:DJNZ 33HXOOP1DJNZ 32H.LOOPRET;=延时4236个机相周期(显示用到尸=DELAY2:MOV 32H,#43HLOOP3:MOV 33H,#IEHMOVA,R7 陶隔6070个机器周期读一次Pl 口,全为1时为无效数据,继续读,有个不为1时,转到正常抢答处
32、理JNZ AAAAI;没读到有效数据时继续转到AAAA127http:/电/发烧友http:/电技术论坛河南理工大学本科课程设计LOOP2:DJNZ 33H.LOOP2DJNZ 32H.LOOP3RET尸=读抢答按键数据口程序=;由于在读抢答数据口的时候,单片机苜先进入倒计时程序,再调用显示程序,最后才检测 按键口;然而在检测按键口时动态扫描要调用三次(4ms)延时程序.这样就会导致读数据口出现滞后,造成1号优先最高.8号最低.;故采用在延时子程序中加了读数据口程序.保证了灵敏度和可能性AAAA1:MOV ATICJNEA.#OFFH,AA1;当不全为1时的数据为有效数据AAO:MOV 36H
33、,A;将有效数据送到36H暂存AJMPLOOP2AA1:DECR7AJMPAAO;=发 声 程 序=BARK:SETB RINGACALL DELAY 1ACALL DELAY 1CLR RING;按键发声RET;=TO溢出中断(响铃程序)=TOINT:MOV THO,#OECHMOV TLO,#()FFHJNB RING.OUT;CPL P36R1NG标志位为1时候P3.6 口不短取反使喇叭发出 定频率的声音OUT:RETI;=TI溢出中断(计时程序)=T1INT:MOV THI,#3CHMOV TLL#OBOHINC RORETIEND28http:/电/发烧及http:/电广技术论坛河南理匚大学本科课程设计附2:系统原理图29