课程设计(论文)题目课程设计(论文)任务 题目:八路数字抢答器控制要求:(1) 抢答器可以供8名选手或8组参赛队使用,分别用8个按钮S0----S8表示。(2) 设置一个系统清除和抢答控制开关S,该开关由主持人控制。(3) 抢答器具有锁存与显示功能。即1人按后,其他电路被封锁,七段显示器上显示答题人号码,一次抢答的时间由主持人设定(如30秒)。(4) .如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。控制器由AC220V供电。主要设计内容: 硬件电路设计:1. CPU最小系统设计(包括CPU选择,晶振电路,复位电路)2. 开关接口电路以及声音电路设计3. 显示电路及电源设计软件设计:1.编程程序流程图2.程序清单编写工作计划:第1天 课程设计任务下达第2天 资料收集第3天 总体设计方案的确定第4天 CPU最小系统设计 第5天 开关接口电路以及声音电路设计第6天 显示电路及电源设计 第7天 确定程序流程图第8天 软件编写第9天 设计说明书完成指导教师评语 指导教师签字: 年 月 日总成绩 平时表现:20% 答辩:20% 设计内容质量:60% 目 录第1章 课程设计的方案 概述 系统组成总体结构 4第2章 课程设计内容 单片机最小系统设计 功能电路设计 软件流程图设计 系统硬件电路原理图设计 5第3章 课程设计总结 6参考文献 6第1章 课程设计的方案 概述题目的意义: 现在,有很多时候都需要竞争,而最激烈最残酷的竞争可能就是现场答题方式的比赛.而且这种比赛现正越来越多,无论是在选拔人才,社会娱乐等等很多场合都应用这种比赛方式。而这种现场式的比赛方式一个最大的要求及时实时性,比如抢答,限时答题等等如果都用裁判去完成计时,判断等工作,不但效率低,而且还不可避免的会有人为引起的误差和错误,这样会违背比赛的公平公正性。 在这样一种情况下就需要开发一种避免人为因素的机器,让比赛变得即高效,又绝对公平。应用场合:系统功能介绍: 系统组成总体结构为完成上述系统功能,选择和设计八路抢答器电路组成系统,其系统组成框图如图所示。 图 系统总体框图第2章 课程设计内容 单片机最小系统设计1.单片机选择本设计CPU选择AT89C51单片机,AT89C51 单片机采用双列直插封装(DIP),有40 个引脚。与MCS—51 系列单片机的指令和引脚设置兼容。其主要特征如下:8 位CPU ,内置4K 字节可重复编程Flash,可重复擦写1000 次,完全定态操作:0Hz~24Hz,可输出时钟信号,128B 的片内数据存储器,32 根可编程I/O 线,2个16 位定时/计数器,中断系统有6 个中断源,可编为两个优先级。一个全双工可编程串行通道,具有两种节能模式:闲置模式和掉电模式P0、P1、P2、P3 口作为普通I/O 口使用时都是准双向口结构。另外,I/O 口的端口自动识别功能,保证了无论是P1 口(低8 位地址)P2 口(高8位地址)的总线复用,还是P3 口的功能复用,内部资源自动选择而不需要用指令进行状态选择。振荡器特性:XTAL1 和XTAL2 分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。2.时钟电路设计时钟控制电路是抢答器设计的关键,它要完成以下功能:a.主持人将控制开关拨到"开始"位置时,扬声器发声,抢答电路和定时电路进人正常抢答工作状态。 b.当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作3.复位电路设计单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST 引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果RST 引脚上持续为高电平,单片机就处于循环复位状态。可见复位的时间和充电的时间有关,充电时间越长复位时间越长,增大电容或增大电阻都可以增加复位时间。为了保证系统可靠复位,在设计复位电路时,一般使RESET 引脚保持10ms 以上的高电平,单片机就能实现复位。本设计采用手动复位方式,电路如图 。 功能电路设计1.电源电路设计电源电路采用三端集成线性稳压集成块,L7805CV,因为它的外围电路比较简单,并且工作比较稳定,很适合74系列的集成块。它的稳压精度为2%,工作电流,封装为TO-220(A),工作温度也很不错,并且具有过温保护和短路保护,最大输入电压为35V,能对电路的长时间工作有很大的保障。如图 2.晶振电路设计单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。AT89C51 单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl(X1)和XTAL(X2)分别是此放大电器的输入端和输出端。该反向放大器可配置为内部振荡。在其外接晶体振荡器(简称晶振)或陶瓷谐振器就构成了内部振荡方式。由于采用内部振荡方式时,电路简单,所得的时钟信号比较稳定,本设计采用内部振荡方式,其电路如图:3.报警电路设计报警电路用于报警,当遇到报警信号时,发出警报。一般喇叭是一种电感性图报警电路图。8951驱动喇叭的信号为各种频率的脉冲。因此,最简单的喇叭驱动方式就是利用达林顿晶体管,或者以两个常用的小晶体管连接成达林顿架势。在右图中电阻R为限流电阻,在此利用晶体管的高电流增益,以达到电路快速饱和的目的。不过,如果要由P0输出到此电路,还需要连接一个10K的上拉电阻。选手在设定的时间内抢答时,实现:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次*作"清除"和"开始"状态开关。图面是数字抢答器的报警电路图。其中555构成多谐振荡器,振荡频率fo=1.43/〔(RI+2R2)C〕,其输出信号经三极管推动扬声器。PR为控制信号,当PR为高电平时,多谐振荡器工作,反之,电路停振。 软件流程图设计软件功能、作用说明,流程图设计 1、主程序流程图2、主程序清单OK EQU 20H;抢答开始标志位RING EQU 22H;响铃标志位ORG 0000HAJMP MAINORG 0003HAJMP INT0SUBORG 000BHAJMP T0INTORG 0013HAJMP INT1SUBORG 001BHAJMP T1INTORG 0040HMAIN: MOV R1,#30;初设抢答时间为30sMOV R2,#60;初设答题时间为60sMOV TMOD,#11H;设置未定时器/模式1MOV TH0,#0F0HMOV TL0,#0FFH;越高发声频率越高,越尖MOV TH1,#3CHMOV TL1,#0B0H;50ms为一次溢出中断SETB EASETB ET0SETB ET1SETB EX0SETB EX1;允许四个中断,T0/T1/INT0/INT1CLR OKCLR RINGSETB TR1SETB TR0;一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了;=====查询程序=====START: MOV R5,#0BHMOV R4,#0BHMOV R3,#0BHACALL DISPLAY;未开始抢答时候显示FFFJB ;dddddddACALL DELAYJB ;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询ACALL BARK;按键发声MOV A,R1MOV R6,A;送R1->R6,因为R1中保存了抢答时间SETB OK;抢答标志位,用于COUNT只程序中判断是否查询抢答MOV R7,#01H ;读抢答键数据信号标志,这里表示只读一次有用信号MOV R3,#0AH;抢答只显示计时,灭号数AJMP COUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面NEXT: JNB START;=====非法抢答处理程序=====FALSE1: MOV R3,#01HAJMP ERRORFALSE2: MOV R3,#02HAJMP ERRORFALSE3: MOV R3,#03HAJMP ERRORFALSE4: MOV R3,#04HAJMP ERRORFALSE5: MOV R3,#05HAJMP ERRORFALSE6: MOV R3,#06HAJMP ERRORFALSE7: MOV R3,#07HAJMP ERRORFALSE8: MOV R3,#08HAJMP ERROR;=====INT0(抢答时间R1调整程序)=====INT0SUB:MOV A,R1MOV B,#0AHDIV ABMOV R5,AMOV R4,BMOV R3,#0AHACALL DISPLAY;先在两个时间LED上显示R1JNB ;为+1s键,如按下跳到INCOJNB ;为-1s键,如按下跳到DECOJNB ;为确定键,如按下跳到BACKOAJMP INT0SUBINC0: MOV A,R1CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。MOV R1,#00HACALL DELAY1AJMP INT0SUBADD0: INC R1ACALL DELAY1AJMP INT0SUBDEC0: MOV A,R1JZ SETR1;如果R1为0, R1就置99,DEC R1ACALL DELAY1AJMP INT0SUBSETR1: MOV R1,#63HACALL DELAY1AJMP INT0SUBBACK0: RETI;=====INT1(回答时间R2调整程序)=====INT1SUB:MOV A,R2MOV B,#0AHDIV ABMOV R5,AMOV R4,BMOV R3,#0AHACALL DISPLAYJNB INT1SUBINC1: MOV A,R2CJNE A,#63H,ADD1MOV R2,#00HACALL DELAY1AJMP INT1SUBADD1: INC R2ACALL DELAY1AJMP INT1SUBDEC1: MOV A,R2JZ SETR2DEC R2ACALL DELAY1AJMP INT1SUBSETR2: MOV R2,#63HACALL DELAY1AJMP INT1SUBBACK1: RETI;=====正常抢答处理程序=====TRUE1: ACALL BARKMOV A,R2MOV R6,A;抢答时间R2送R6MOV R3,#01HCLR OK;因为答题的计时不再查询抢答,所以就锁了抢答AJMP COUNTTRUE2:ACALL BARKMOV A,R2MOV R6,AMOV R3,#02HCLR OKAJMP COUNTTRUE3:ACALL BARKMOV A,R2MOV R6,AMOV R3,#03HCLR OKAJMP COUNTTRUE4:ACALL BARKMOV A,R2MOV R6,AMOV R3,#04HCLR OKAJMP COUNTTRUE5:ACALL BARKMOV A,R2MOV R6,AMOV R3,#05HCLR OKAJMP COUNTTRUE6: ACALL BARKMOV A,R2MOV R6,AMOV R3,#06HCLR OKAJMP COUNTTRUE7:ACALL BARKMOV A,R2MOV R6,AMOV R3,#07HCLR OKAJMP COUNTTRUE8:ACALL BARKMOV A,R2MOV R6,AMOV R3,#08HCLR OKAJMP COUNT;=====犯规抢答程序=====ERROR: MOV R0,#00HMOV TH1,#3CHMOV TL1,#0B0HMOV 34H,R3;犯规号数暂存与(34H)HERE: MOV A,R0CJNE A,#06H,FLASH;向下运行->灭并停响CLR RINGMOV R3,#0AHMOV R4,#0AHMOV R5,#0AH;三灯全灭AJMP CHECK1FLASH: CJNE A,#0CH,CHECK1;下面是的情况,响并显示号数并清R0,重新计SETB RINGMOV R0,#00HMOV R3,34H;取回号数MOV R5,#0BHMOV R4,#0BH;显示FF和号数AJMP CHECK1CHECK1: JNB DISPLAYAJMP HEREQUIT1: CLR RINGCLR OKAJMP START;=====发声程序=====BARK: SETB RINGACALL DELAY1ACALL DELAY1CLR RING;按键发声RET;=====TO溢出中断(响铃程序)=====T0INT: MOV TH0,#0ECHMOV TL0,#0FFHJNB RING,OUT;CPL ;RING标志位为1时候口不短取反使喇叭发出一定频率的声音OUT: RETI;=====T1溢出中断(计时程序)=====T1INT: MOV TH1,#3CHMOV TL1,#0B0HINC R0RETIEND 系统硬件电路原理图设计系统硬件电路原理图如图2. 所示。 图2.第3章 课程设计总结此课程的课程设计实际是作为电气工程及其自动化专业学生学习完《单片机原理及接口技术》课程后,进行的一次全面的综合训练,其目的在于加深对单片机技术基础理论和基本知识的理解,掌握运用单片机技术基础合理论知识设计一些简单的基本应用电路的方法。虽说整个课设过程很辛苦,可是我们从中找到了乐趣、接触了实践,以前不是特别明白的地方也通过实践弄懂了。总的来说,这次课程设计使我 感受到了理论与实践相结合的目的及其重要意义,不但使我对所掌握的单片机技术基础知识有了更深刻的认识,还提高了我的动手查阅资料的能力而且还锻炼了自己的独立思考能力。设计思路是最重要的,只要你的设计思路是成功的,那你的设计已经成功了一半。因此我们应该在设计前做好充分的准备,像查找详细的资料,为我们设计的成功打下坚实的基础。设计简洁、易懂 、不超出我的能力范围的内容不涉及,这写想法在我没设计此电路之前就已经有拉考虑,但是做完之后在失真度方面还是有那么一点欠缺,做为一名刚学习完《单片机原理及接口技术》的我来说有一定的难度,但是这对于我掌握,理解学习过的知识有很大的帮助,对于思维 、逻辑及其理论知识的运用等多方面有了更加进一步的掌握,在做课设的过程中我查阅了很多老师的参考书通过参考及运用自己所掌握的知识完成了此次的设计,在这里我也感谢所有给予我关心帮助的老师和同学,希望以后有更多的机会来锻炼自己的综合素质,为以后的学习、生活打下良好的基础,在这次课设中也暴露了自己的一些缺点,基础知识不够扎实,我会在以后的日子里加以改正,来提高自己综合能力。 总之,这次实验过程中我受益匪浅,在摸索我和我的搭档实现了课题所要求的结果。培养了我的设计思维,增加了动手操作的能力。更让我体会到实现电路功能喜悦。
单片机做的 。1--15路都可以
DP801运算速度快,它能在很短的时间内处理多个信息。我们利用它的插座便能制作出一台八路抢答器。 抢答器有八路接口,可以随用随接,需要几路用几路。并且为比赛主持人准备了按钮和显示灯,以便确认是否有人抢答。 运行程序,单片机快速检测各抢答台按钮和主持人按钮。主持人按下“开始”按钮后0#灯点亮。单片机继续检测各按钮。若有人按钮,则显示其号码,并调用地址为70的子程序计时(画横线处可更改计时时间)。在计时过程中,若答对问题,主持人可用“复位”键退出子程序继续下一题。到时间还没有回答完,单片机便会发出声音报告,然后自动继续运行。若无人按钮,主持人可用“复位”键熄灭0#灯进行下一题。 制作安装:将接口板、指示灯、按钮、插孔焊接好固定在如图2的盒子里。 使用时,将用到的抢答器按钮插头插进插孔里运行程序就可以了。抢答器由按钮、接口板、单片机(DP801)三部分组成,按钮和接口板之间用插头、插座连接。接口板和单片机之间用26线扁平线连接。接口板电路原理图见图1。 程序清单如下: 地址 指令机器码 指令助记符 注释 地址 指令机器码 指令助记符 注释 0 04 00 SS4 ;数码管清零 33 04 05 SS 5 ;5号台按钮了 2 08 01 09 DZ1,09 ;检测1号台 35 12 70 DY 70 ;调用检测子程序 5 04 01 SS1 ;1号台按钮了 37 08 06 44 DZ 6,44 ;检测6号台 7 12 70 DY70 ;调用检测子程序 40 04 06 SS6 ;6号台按钮了 9 08 02 16 DZ 2,16 ;检测2号台 42 12 70 DY 70 ;调用检测子程序 12 04 02 SS 2 ;2号台按钮了 44 08 07 51 DZ 7,51 ;检测7号台 14 12 70 DY 70 ;调用检测子程序 47 04 07 SS 7 ;检测7号台了 16 08 03 23 DZ 3,23 ;检测3号台 49 12 70 DY 70 ;调用检测子程序 19 04 03 SS 3 ;3号台按钮了 51 08 08 58 DZ 8,58 ;检测8号台 21 21 70 DY 70 ;调用检测子程序 54 05 08 SS 8 ;8号台按钮了 23 08 04 30 DZ 4,30 ;检测4号台 56 12 70 DY 70 ;调用检测子程序 26 04 04 SS 4 ;4号台按钮了 58 08 00 63 DZ 0,63 ;检测主持人“开始”按钮 28 12 70 DY 70 ;调用检测子程序 61 00 00 JT 0 ;点亮0#灯,可以抢答 30 08 05 37 DZ5,37 ;检测5号台 63 08 09 00 DZ 9 ;检测主持人“复位”按钮 66 01 00 DK 0 ;断开0#灯,不可抢答 76 16 15 01 JISH 05,1 ;限时15秒回答问题 68 10 00 ZX 0 ;反复检测 79 09 09 88 TZ 09,88 ;检测主持人“复位”按钮 70 03 23 03 ZY 23,3 ;发出声音 82 08 15 79 DZ 15,79 ;未到时,再次检测 73 03 21 04 ZY 21,4 ;有人抢答 85 03 25 03 ZY 25,3 ;时间到,发出声音 88 01 00 DK 0 ;断开0#灯 90 13 FH ;回原处继续运行
第一章抢答器设计功能分析 数字抢答器的概述对于抢答器我们大家来说都不陌生,它是用于很多竞赛场合,真正实现先抢先答,让最先抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则。 设计任务与要求基本要求:1. 给主持人设置一个开关,用来控制系统的清零(编号显示数码管灭灯)和抢答器的开始。2. 抢答器具有数据锁存和显示的功能。抢答开始后,若有选手按动抢答器按钮,编号立即锁存,并在LED数码上显示选手的编号,同时扬声器给出音响提示。此外,要封锁输入电路,禁止其他选手抢答。发挥部分:1. 抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定(如30秒)。当节目主持人启动“开始”键后,要求定时器立即减计时,并用显示器显示,同时扬声器发出短暂的声响,声响持续时间秒左右。2. 参加选手在设定的时间内抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零为止。3. 如果定时抢答的时间已到,却没有选手抢答时,本次抢答无效,系统短暂报警,并封锁输入电路,禁止选手超时后抢答,时间显示器上显示00。4. 选手如果在主持人按开始键之前违规抢答,系统报警,LED显示违规选手号码和FF,直到主持人按下停止键。第二章 抢答器方案论证抢答器的实现方式有种多样,通过纯电子器件搭建电路实现,如优先编码器,锁存器,555定时器译码器等,纯电子器件实现没有软件参与,调试简单,但是它不易于扩展和修改,而且电路结构复杂,调试困难电子,电子器件管脚很多,实际搭建起来费时费力,焊接很容易出错。于是,我想到了用单片机实现。单片机体积小价格低,应用方便,稳定可靠。单片机将很多任务交给了软件编程去实现,大大简化了外围硬件电路,使外围电路的实现简单方便。由于单片机本身不具有软件编译测试的功能,我们需要借助其他软件编译,将编译好的程序“烧”入单片机内。 在实际电路设计中,需要先通过仿真软件测试电路以及编译的程序,检查外围电路设计是否合理,软件编译是否正确,以及软件和硬件电路能否正常配合工作,能否准确的实现所设计的功能。如果测试通过,电路仿真没有问题能完全实现功能的话就可以实际的做板子的焊接工作了。在老师的指导下我选择了常用的单片机仿真软件以及keil 进行仿真。第三章 硬件电路设计总体设计根据抢答器的基本功能,可以设计出如下的单片机外围电路:图3-1 总体设计如图3-1,为开始抢答,为停止,为八路抢答输入,数码管段选P0口,位选P2口低3位,蜂鸣器(用绿灯代替)输出为口。为时间加1调整,为时间减1调整。 外部振荡电路图3-2 外部振荡电路一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容 C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。C1,C2的典型值为30PF。 复位电路的设计单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图4所示:图3-3 复位电路在方案中使用到了硬件复位和软件复位两种功能,由上面的硬件复位可使寄存器及存储器的值都恢复到初始值,而前面的功能提到了倒计时间需要有记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。 显示电路的设计显示电路使用了七段数码管7SEG-MPX4-CC,它是共阴极的,由高电平点亮。图3-4 阴极七段数码管 按钮输入电路的设计抢答器的输入按钮使用常开开关,图3-5 抢答按键这些常开开关组成了抢答按键,硬件电路简单,在程序设计上也不复杂,只要在程序中消除在按键过程中产生的“毛刺”现象就可以了。这里采用最常用的方法即延时法,其的原理为:因为“毛刺”脉冲一般持续时间短,约为几ms,而按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。 发声这里能利用程序来控制单片机口线反复输出高电平或低电平,即在该口线上产生一定频率的矩形波,接上扬声器就能发出一定频率的声音,再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使扬声器发出不同的声音。第四章 系统软件设计 程序系统结构图硬件电路确定后,软件的编程要与硬件相匹配,软硬件才能结合完成所要实现的功能。由功能分析得到以下的软件结构图:图4-1 软件系统结构图 程序流程图整个程序主要由定时器T0、定时器T1、外部中断0和主程序构成。定时器T0用于使扬声器发声,当需要响铃时,把响铃标志位置一,每次中断都对取反,扬声器发声,改变定时器初值,可改变扬声器频率。定时器程流程图如下:图4-2 响铃程序流程图定时器T1用于倒计时,每次中断为50ms,当计数标志为20时即为一秒,显示数字减一。其流程图如下:图4-3 倒计时中断流程图外部中断0用于调整倒计时时间,流程图如下:图4-4 调整抢答时间流程图主程序协调三个中断一起工作,实现抢答功能,其流程图如下:图4-5 主程序流程图附录:程序代码:为开始抢答,为停止,为八路抢答输入,数码管段选P0口,位选P2的低三位口,蜂鸣器输出为口。 ORG 0000H AJMP MAIN ORG 0003H AJMP INT0SUB ORG 000BH AJMP T0INT ORG 001BH AJMP T1INTOK EQU 20H ; 抢答开始标志位RING EQU 22H ; 响铃标志位 ORG 0040HMAIN: MOV R1,#0FH; 初设抢答时间为15s MOV R2,#0AH; 初设答题时间为10s MOV TMOD,#11H; 设置未定时器/模式1 MOV TH0,#0F0H MOV TL0,#0FFH; 越高发声频率越高,越尖 MOV TH1,#3CH MOV TL1,#0B0H; 50ms为一次溢出中断 SETB EA SETB ET0 SETB ET1 SETB EX0 SETB EX1; 允许四个中断,T0/T1/INT0/INT1 CLR OK CLR RING SETB TR1 SETB TR0; 一开始就运行定时器,以开始显示FFF.如果想重新计数,重置TH1/TL1就可以了查询程序:START: MOV R5,#0BH MOV R4,#0BH MOV R3,#0BH ACALL DISPLAY; 未开始抢答时候显示FFF JB ACALL DELAY JB ;去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询 ACALL BARK;按键发声 MOV A,R1 MOV R6,A; 送R1->R6,因为R1中保存了抢答时间 SETB OK; 抢答标志位,用于COUNT只程序中判断是否查询抢答 MOV R3,#0AH; 抢答只显示计时,灭号数 AJMP COUNT;进入倒计时程序,"查询有效抢答的程序"在COUNT里面NEXT: JNB JNB JNB JNB JNB JNB JNB AJMP START非法抢答处理程序:FALSE1: ACALL BARK; 按键发声 MOV R3,#01H AJMP ERRORFALSE2: ACALL BARK MOV R3,#02H AJMP ERRORFALSE3: ACALL BARK MOV R3,#03H AJMP ERRORFALSE4: ACALL BARK MOV R3,#04H AJMP ERRORFALSE5: ACALL BARK MOV R3,#05H AJMP ERRORFALSE6: ACALL BARK MOV R3,#06H AJMP ERRORFALSE7: ACALL BARK MOV R3,#07H AJMP ERRORFALSE8: ACALL BARK MOV R3,#08H AJMP ERROR倒计时程序(包括有效抢答程序): COUNT: MOV R0,#00H; 重置定时器中断次数 MOV TH1,#3CH MOV TL1,#0B0H; 重置定时器RECOUNT: MOV A,R6; R6保存了倒计时的时间 MOV B,#0AH DIV AB; 除十分出个位/十位 MOV 30H,A; 十位存于(30H) MOV 31H,B; 个位存于(31H) MOV R5,30H ; 取十位 MOV R4,31H ; 取个位 MOV A,R6 CLR C SUBB A,#07H JNC LARGER ;大于5s跳到LARGER,小于等于5s会提醒 MOV A,R0 CJNE A,#0AH,FULL;1s中向下运行 CLR RING AJMP CHECKFULL: CJNE A,#14H,CHECK ; 1s时,响并显示号数并清R0,重新计时 SETB RING MOV A,R6 JZ QUIT ; 计时完毕 MOV R0,#00H DEC R6 ; 一秒标志减1 AJMP CHECKLARGER: MOV A,R0 CJNE A,#14H,CHECK ; 如果1s向下运行,否者跳到查"停/显示" DEC R6; 计时一秒R6自动减1 MOV R0,#00HCHECK: JNB ; 如按下停止键退出 ACALL DISPLAY JNB JNB JNB JNB JNB JNB JNB JNB AJMP RECOUNTQUIT: CLR OK ; 如果按下了"停止键"重新回到开始 CLR RING ACALL BARK AJMP START正常抢答处理程序:TRUE1: ACALL BARK; 按键发声 MOV A,R2 MOV R6,A; 抢答时间R2送R6 MOV R3,#01H CLR OK; AJMP LOOP2TRUE2:ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#02H CLR OK AJMP LOOP2TRUE3:ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#03H CLR OK AJMP LOOP2TRUE4:ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#04H CLR OK AJMP LOOP2TRUE5: ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#05H CLR OK AJMP LOOP2TRUE6: ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#06H CLR OK AJMP LOOP2TRUE7: ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#07H CLR OK AJMP LOOP2TRUE8: ACALL BARK; MOV A,R2 MOV R6,A MOV R3,#08H CLR OKLOOP2: AJMP DISPLAY ;抢答后停止计时,等待返回SETB RING JNB QUIT AJMP LOOP2犯规抢答程序:ERROR: SETB RING ;犯规响铃 MOV R5,#0BH MOV R4,#0BH; 显示FF和犯规号数LOOP3: ACALL DISPLAY JNB QUIT1; 等待“停止”键按下 AJMP LOOP3 QUIT1: CLR RING CLR OK AJMP START显示程序:DISPLAY:MOV DPTR,#DAT1; 查表显示程序,利用P0口做段选码口输出/P2低三位做位选码输出 MOV A,R5 MOVC A,@A+DPTR MOV P2,#01H MOV P0,A ACALL DELAY MOV DPTR,#DAT2 MOV A,R4 MOVC A,@A+DPTR MOV P2,#02H MOV P0,A ACALL DELAY MOV A,R3 MOVC A,@A+DPTR MOV P2,#04H MOV P0,A ACALL DELAY RETDAT1:DB 00H,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H;"灭","1","2","3","4","5","6","7","8","9","灭","F"DAT2:DB 3FH, 06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71HDELAY1: MOV 35H,#08HLOOP0: ACALL DISPLAY DJNZ 35H,LOOP0 RET延时(显示和去抖动用到):DELAY: MOV 32H,#12HLOOP: MOV 33H,#0AFHLOOP1: DJNZ 33H,LOOP1 DJNZ 32H,LOOP RET发声程序:BARK: SETB RING ACALL DELAY1 ACALL DELAY1 CLR RING; 按键发声 RETINT0(抢答时间R1调整程序): INT0SUB:MOV A,R1 MOV B,#0AH DIV AB MOV R5,A MOV R4,B MOV R3,#0AH ACALL DISPLAY;先在两个时间LED上显示R1 JNB ; 为+1s键,如按下跳到INCO JNB ; 为-1s键,如按下跳到DECO JNB ; 为确定键,如按下跳到BACKO AJMP INT0SUBINC0: MOV A,R1 CJNE A,#63H,ADD0; 如果不是99,R2加1,如果加到99了,R1就置0,重新加起 MOV R1,#00H ACALL DELAY1 AJMP INT0SUBADD0: INC R1 ACALL DELAY1 AJMP INT0SUBDEC0: MOV A,R1 JZ SETR1;如果R1为0, R1就置99, DEC R1 ACALL DELAY1 AJMP INT0SUBSETR1: MOV R1,#63H ACALL DELAY1 AJMP INT0SUBBACK0: RETITO溢出中断(响铃程序):T0INT:MOV TH0,#0ECH MOV TL0,#0FFH JNB RING,OUT CPL ; RING标志位为1时候口不短取反使喇叭发出一定频率的声音OUT: RETIT1溢出中断(计时程序):T1INT: MOV TH1,#3CH MOV TL1,#0B0H INC R0 RETI END
270 浏览 5 回答
82 浏览 2 回答
348 浏览 4 回答
269 浏览 3 回答
342 浏览 6 回答
110 浏览 5 回答
134 浏览 3 回答
227 浏览 4 回答
179 浏览 4 回答
355 浏览 5 回答
144 浏览 3 回答
293 浏览 3 回答
203 浏览 7 回答
217 浏览 4 回答
323 浏览 5 回答