多路抢答器的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
&
目录
摘要—————————————————————————————2
一、绪论—————————————————————————————2
1、单片机抢答器的背景—————————————————————2
2、单片机的应用————————————————————————3
3、抢答器的应用————————————————————————4 }
二、方案设计——————————————————————————4
1、总方案设计—————————————————————————4
2、基本功能——————————————————————————5
3、扩展功能——————————————————————————5
三、硬件电路设计————————————————————————6
1、单片机的选择————————————————————————6
2、各模块设计—————————————————————————8
、单片机最小系统——————————————————————8 '
、抢答按键电路———————————————————————8
、显示器电路————————————————————————9
、蜂鸣器音频输出电路————————————————————10
四、软件设计——————————————————————————11
1、程序设计——————————————————————————11
2、主程序设计—————————————————————————12
五、调试—————————————————————————————12
1、仿真测试——————————————————————————12
$
、初始状态仿真———————————————————————12
、抢答开始仿真———————————————————————13
、抢答成功仿真———————————————————————13
、抢答违规仿真———————————————————————14
、抢答过时仿真———————————————————————14
2、仿真结果分析————————————————————————15
六、心得体会——————————————————————————15
附录
:
1.程序清单——————————————————————————16
2.硬件图———————————————————————————23
3.参考文献——————————————————————————23基于单片机的多路抢答器设计—硬件设计
摘要
,
此次设计使用AT89C51单片机为核心控制元件,设计一个简易的抢答器,与数码管、报警器等构成八路抢答器,利用了单片机的延时电路、按键复位电路、时钟电路、定时/中断电路等。
设计的抢答器具有实时显示抢答选手的号码和抢答时间的特点,而复位电路,则使其能再开始新的一轮答题和比赛,与此同时还利用汇编语言编程,使其能够实现一些基本的功能。
本次设计系统实用性强、判断精确、操作简单、扩展功能强等。
它的功能实现是比赛开始,主持人读完题之后按下总开关,则计时开始,此时数码管开始进行1s的减计时,直到有一个选手按下抢答按钮,这时对应的数码管上会显示出该选手的编号和抢答所用的时间,同时该选手的报警器也会发出声音,来提示有人抢答本题。
如果在规定的30s时间内没有选手做出抢答,则此题作废,即开始重新一轮的抢答。
关键词:单片机、抢答器、数码管、报警器
一、绪论
1、单片机抢答器的背景
二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。
这种电脑,通常是指个人计算机,简称PC机。
它由主机、键盘、显示器等组成。
还有一类计算机,大多数人却不怎么熟悉。
这种计算机就是把智能赋
予各种机械的单片机(亦称微控制器)。
单片机的最小系统只用了一片集成电路,即可进行简单运算和控制。
因为它体积小,通常都藏在被控机械的“肚子”里。
它在整个装置中,起着有如人脑的作用,要是它出了毛病,那么整个装置就将瘫痪。
现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。
各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词--“智能型”。
如智能型洗衣机等。
现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。
究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。
在知识竞赛中,特别是做抢答题时,在抢答过程中,为了更确切的知道哪一组或哪一位选手先抢答到题,必须要有一个系统来完成这个任务。
若在抢答中,只靠人的视觉(或者是听觉)是很难判断出哪一组(或哪一个选手)先抢答到题的。
利用单片机编程来设计抢答器,可以使以上问题得以解决,即使两组的抢答时间相差几微秒,也能轻松的分辨出哪一组(或哪个选手)先抢答到题的。
本文主要介绍了抢答器的工作原理及设计,以及它的实际用途。
2、单片机的应用
(
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:
1.在智能仪器仪表上的应用
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。
采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。
例如精密的测量设备(功率计,示波器,各种分析仪)。
2.在工业控制中的应用
用单片机可以构成形式多样的控制系统、数据采集系统。
例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统
等。
3.在家用电器中的应用
可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。
4.在计算机网络和通信领域中的应用
:
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。
5.单片机在医用设备领域中的应用
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。
3、抢答器的应用
随着我国经济和文化事业的发展,在很多的公开竞争场合要求有公正的竞争裁决,诸如证券、股票交易及各种智力竞赛等,因此出现了抢答器。
抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。
因此我们设计了以单片机为核心的新型智能的抢答器,在保留原始抢答器的基本功能的同时又增加了数码管显示电路实现了其它功能。
抢答器又称为第一信号鉴别器,因此能广泛应用于各种知识竞赛、文艺活动等场合。
二、方案设计
1、总方案设计
抢答器的工作原理是采用单片机最小系统(时钟电路、复位电路),用查询式键盘进行抢答。
采用动态显示组号。
主持人按下开始抢答键后选手才可以开始抢答。
若主持人没有按下开始抢答按纽(),而有选手抢答则为抢答违规,此时报警器响起并显示此选手的组号,需要主持人按下开始抢答开关重新抢答。
在主持人按下开始抢答按纽(),蜂鸣响声提示,且数码管进行30秒倒计时(30秒内抢答有效),有选手在30秒抢答,蜂鸣器响声提示并显示他的组号,同时开始60秒倒计时(60秒内必须回答完问题),60秒后主持人按下复位开关为下一题的抢答做准备;若此30秒内没有选手抢答,则此次抢答作废,由主持人按下复位开关进行下一轮重新抢答。
此次设计包括单片机最小系统、抢答按键模块(8个按键)、显示模块、抢答开关模块、蜂鸣器音频输出模块。
如下图所示为总体方框图。
图1 总方框图
2、基本功能
(1)、设计一个智力竞赛抢答器,可同时供8名选手或8个代表队参加比赛,他们的编号分别为0、1、2、3、4、5、6、7,各用一个抢答按钮,按钮的编号与选手的编号相对应,分别为S0-S7。
(2)、给节目主持人设置一个控制开关,用来控制系统的清零(编号显示数码管灭灯)和抢答的开始。
、
(3)、抢答器具有数据锁存和显示的功能。
抢答开始后,若有选手按动抢答按钮,编号立即锁存,并在LED数码管行显示出选手的编号,扬声器给出音响提示,同时封锁输入电路,禁止其他选手抢答。
优先抢答的选手的编号一直保持到主持人将系统清零为止。
(4)、如果主持人未按"抢答开始"键,而有人按了抢答按键,此为犯规抢答,LED上不断闪烁FF和犯规报警器并响个不停,直到主持人按下"停止" 键为止。
3、扩展功能
(1)、抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定(比如30s)。
当节目主持人按下“开始”键后,要求定时器立即减计时,并用显示器显示,同时扬声器发出短暂的声响,声响持续时间左右。
(2)、参赛选手在设定的时间内抢答,抢答有效,定时显示器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零为止。
(3)、如果定时器抢答的时间已到,却没有选手抢答时,本次抢答无效,系统短暂报警,并封锁输入电路,禁止选手超时后抢答。
(4)、为开始抢答,为停止,为八路抢答输入, 数码管段选P0口,位选P2口低3位,蜂鸣器输出为口。
抢答时间调整,回答时间调整,为时间加1调整,为时间减1调整。
三、硬件电路设计
]
1、单片机的选择
单片机(SCM)是单片微型计算机(Single Chip Microcomputer)的简称。
它是把中央处理器CPU、随机存储器RAM、只读存储器ROM、I/O接口电路、定时/计数器以及输入输出适配器都集成在一块芯片上,构成一个完整的微型计算机。
它的最大优点是体积小,可放在仪表内部,但存储量小,输入输出适配器简单,功能较低。
目前,单片机在民用和工业测控领域得到最广泛的应用,早已深深地融入人们的生活中。
近年来,AT89C51在我国非常流行,它最大的特点是内部有可以多次重复编程的ROM,并且ROM可以直接用编程器来擦写,使用起来比较方便。
本设计使用到的元器件包括:AT89C51芯片、数码LED显示器、七段LED数
码管的译码。
其中AT89C51是系统的核心,它主要负责控制各个部分的协调工作。
在其外围接上复位电路,上拉电阻,数码管,按钮以及振荡器,为抢答输入键接口,数码管段选P0口,位选P2口,蜂鸣器输出为口。
本课题在选取单片机时,根据课本上的单片机知识,并且充分借鉴了许多成形产品使用单片机的经验,结合自己的实际情况,选择了Intel公司的89C51单片机。
单片机的引脚排列图如图2所示:
图2 AT89C51单片机引脚排列
各条引脚说明如下:
外接晶振引脚XTAL1和XTAL2
① XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。
当采用外部振荡器时,此引脚接地。
^
② XTAL2内部振荡电路反相放大器的输出端。
是外接晶体的另一端。
当采用外部振荡器时,此引脚接外部振荡源。
③RST复位引脚。
④PSEN片外程序存储器开发信号引脚(输出信号)。
⑤ALE提供把地址的低字节锁存到外部锁存器,ALE 引脚以不变的频率(振荡器频率的1/6)周期性地发出正脉冲信号。
因此,它可用作对外输出的时钟,或用于定时目的。
⑥EA片外程序存储器使用信号引脚/编程电源输入引脚。
⑦~:P0口8位口线,第一功能作为通用I/O接口,第二功能作为存储器扩展时的地址/数据复用口。
~:P1口8位口线,通用I/O接口无第二功能。
~:P2口8位口线,第一功能作为通用I/O接口,第二功能作为存储器扩展时传送高8位地址。
:
~:P3口8位口线,第一功能作为通用I/O接口,第二功能作为单片机的控制信号。
2、各模块设计
、单片机最小系统
单片机的最小系统由时钟电路和复位电路组成。
时钟电路中电容器C起稳定振荡频率、快速起振的作用,电容值一般为5~33pF。
本设计中采用大小为30pF 的电容和12MHz的晶振,晶振提供89C51的时钟脉冲使其工作。
复位电路是使单片机初始化,即使单片机重新开始执行程序。
当复位开关按下,RST由高电平变为低电平,则程序从头开始执行。
通常选择C=10~30μF,R=1K,本设计采用的电容值为22μF的电容和电阻为1K的电阻。
在此次课程设计电路中当一个问题结束主持人后按下复位开关后进行下一题的准备。
如下图所示。
图3 单片机最小系统
、抢答按键电路
抢答电路的功能有两个:一是能分辨出选手按键的先后,并锁存优先抢答者的编号,供译码显示电路用;二是要使其他选手的按键操作无效。
89C51的P1口做一个八路抢答按键。
P1口至对应1~8号8位选手,当主持人按下开始按钮后,电平由高电平变成低电平传入P3口,此时选手可以开始抢答。
此电路中采用10K的电阻起保护作用。
当某一选手按下抢答按钮后,电平由高电平变成低电平传入P1口,经单片机处理后从P0输出由数码管显示抢答者编号,扬声器给出音响提示。
当有一人抢答以后,由于系统已经接收到了一个电平信号,同一时间内它将不再接受另外的电平信号,所以其他选手将不好再抢答。
如图所示。
图4 抢答按键电路
、显示器电路
数码管的显示可以分为两种:静态显示和动态显示。
静态显示的段选位和位选位均单独连接,因此占用的I/O接口多,无法扩展多个数码管。
而数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划的同名端连在一起,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,通过分时轮流控制各个数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
数码显示管分为共阳数码管和共阴数码管两种。
本设计采用共阴极数码显示管做显示电路。
由于采用的是共阴的数码显示管,所以只要数码管的各引脚为高电平,那么其对应的二极管就会发光。
数码管要显示抢答违规者编号、正常抢答者编号、抢答倒计时和回答问题时间倒计时,数码管采用动态显示。
段选位接P0口,P0口显示的是抢答者的编号;位选位接P2口,P2口显示的是抢答倒计时和答题倒计时。
电源供电电压为5V,当上拉电阻选用220Ω电阻时灌电流为22mA。
不会损坏单片机的I/O口,同时也可以为数码显示管起到限制电流的保护作用。
图5 显示器电路
、蜂鸣器音频输出电路
蜂鸣器是一种电子电路中常用的发声器件,蜂鸣器分为有源蜂鸣器和无源蜂鸣器两种。
提供蜂鸣器发声所需要较高的电流,单片机的I/O口驱动能力有限,而我们知道三极管有电流放大的作用。
—
蜂鸣器音频输出电路的功能是用来报警,当遇到报警信号时,发出蜂鸣声,以此来提醒操作者。
本电路通过控制不同频率的矩形脉冲来控制蜂鸣器发声。
此次课程设计中只需要一些简单的提示声音,如有抢答违规,开始抢答,抢答时间结束和回答问题时间到的提示声音。
当主持人按下开始按钮,系统接收到一个低电平,此时蜂鸣器响起;当开始抢答后,某一选手按下抢答按钮,系统接收到一个低电平,此时蜂鸣器响起;当还未开始抢答就有选手按下抢答按钮后,此时系统将接收到一个矩形脉冲由高低电平交换运行来控制蜂鸣器,是低电平时蜂鸣器响起,高电平时蜂鸣器停止发声。
图6 蜂鸣器音频输出电路
四、软件设计
1、程序设计
程序设计(Programming)是指设计、编制、调试程序的方法和过程。
在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。
在单片机控制系统中,大体上可分为数据处理、过程控制两个基本类型。
数据处理包括:数据的采集、数字滤波、标度变换等。
过程控制程序主要是使单片机按一定的方法进行计算,然后再输出。
为了完成上述任务,在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。
把一个程序分成具有多个明确任务的程序模块,分别编制、调试后再把它们连接在一起形成一个完整的程序,这样的程序设计方法称为模块化程序设计。
所谓“模块”,实质上就是能完成一定功能,并相对独立的程序段,这种程序设计方法称为模块程序设计法。
模块程序设计法的主要优点是:
>
(1)单个模块比起一个完整的程序易编写、调试及修改。
(2)程序的易读性好。
(3)程序的修改可局部化。
(4)模块可以共存,一个模块可以被多个任务在不同条件下调用。
(5)模块程序允许设计者分割任务和利用已有程序,为设计者提供方便。
本系统软件采用模块化结构,由主程序﹑键盘子程序、显示驱动子程序等构成。
2、主程序设计
为了能够达到抢答的公平、公正、合理,应该在主持人发布抢答命令之前必须先设定抢答的时间,因而在编开始抢答前的程序得先编写设定时间的程序,当时间设好了之后,主持人按开始键发布抢答命令,若在主持人未按开始键之前,有选手提前答题,则为违规抢答,蜂鸣器会发出警告声,并在显示器上显示犯规的选手编号。
当有选手抢答成功,则程序打开定时中断开始倒计时,然后调用键盘扫描子程序,编写键盘扫描程序,其他选手在此之后按键无效。
当在扫描到有人按下了抢答键,马上关闭T0、调用显示程序、封锁键盘。
】
五、调试
1、仿真测试
由keil软件编译生成hex文件,将此文件导入单片机中,进行硬件仿真。
、初始状态仿真
主持人未按开始按钮且选手都处于准备状态时。
仿真结果如图7。
图7 初始状态仿真图
、抢答开始仿真
&
主持人按下开始按钮后,选手们进入抢答30秒倒计时。
仿真结果如图8。
图8抢答开始仿真图
、抢答成功仿真
主持人按下开始按钮后,30秒内抢答则为成功抢答。
仿真图为3号选手成功
抢答,抢答后进入60秒倒计时答题时间。
仿真结果如图9。
图9 抢答成功仿真图
、抢答违规仿真
}
若在主持人还未按下开始按钮时,选手就抢答则为抢答犯规。
图为4号选手在主持人未宣布开始时就抢答,从而造成犯规。
仿真结果如图10。
图10 抢答违规仿真图
、抢答过时仿真
主持人按下开始按钮后,开始30秒抢答倒计时,如果在这30秒中无人抢答,此次抢答算作失败,系统又将恢复为初始状态。
仿真结果如图11
图11 抢答过时仿真图
2、仿真结果分析
-
通过对电路的仿真,可以看出基于AT89C51单片机控制的抢答器在PROTEUS 软件上可以很好的实现抢答报警、抢答成功显示、抢答倒计时等一系列功能。
当仿真开始运行时,各个模块处于初始状态。
此时显示器并无状态显示,但此时抢答键和蜂鸣器都处于开启状态,若此时有选手按下抢答键,则蜂鸣器会发出报警声,并且在数码管上显示犯规的选手的编号。
主持人重新按下开始键,此时表示抢答正式开始,并且数码管显示30秒倒计时,同时蜂鸣器发出声音提醒选手抢答开始了。
选手抢答成功,同时也进入到倒计时60秒答题时间。
从仿真的测试结果来看,此设计还是能比较好的实现预期的目标。
六、心得体会
通过本次课程设计使我对Proteus仿真软件的使用和汇编语言有了更进一步的了解和掌握。
并且在老师的耐心指导和自己的不懈努力下,我终于顺利的完成了这次科研实践。
在最初编写过程中,我也曾经因为实践经验的缺乏失落过,也曾经因仿真成功而热情高涨。
特别是Proteus仿真软件的使用,一开始因为对软件不熟悉,要慢慢摸索,后来差不多会了以后,画仿真图又浪费了我大量的时间,最后在不断努力中终于把仿真图画出来了,最后要把写好的程序导入芯片。
其实这也是一大难事,由于对于书本上的很多知识还不能灵活运用,尤其是对程序语言的理解和运用,不能够充分理解每个语句的具体含义,导致编程的程序过于复杂。
但后来通过自己和同学的仔细的分析,并认真分析了原来已有的代码和应有的硬件后,经过多次调试和测试终于成功了。
平心而论,这次课程设计耗费了我不少的心血。
虽说这次课程设计有点辛苦,但是苦中还是有乐的,和同学们相互帮助,当LED亮了起来,喇叭响了起来是对我这段日子以来最好的告慰。
而且对于论文的总体构思也有了很多经验,相信自己经过这一次的训练与学习,对于今后的毕业论文会有更多帮助。
同时在查找资料的过程中我也学到了许多新的知识,在和同学协作的过程中增进同学友谊,使我对团队精神的积极性和重要性有了更加充分的理解,为以后进入社会奠定了一些基础。
:
附录
1、程序清单
OK EQU 20H ; 抢答开始标志位
RING EQU 22H ; 响铃标志位
ORG 0000H
AJMP MAIN
ORG 0003H
AJMP INT0SUB
|
ORG 000BH
AJMP T0INT
ORG 0013H
AJMP INT1SUB
ORG 001BH
AJMP T1INT
ORG 0040H
MAIN: MOV R1,#30 ; 初设抢答时间为30s
—
MOV R2,#60 ; 初设答题时间为60s
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 ,NEXT
ACALL DELAY
JB ,NEXT ; 去抖动,如果"开始键"按下就向下执行,否者跳到非法抢答查询
ACALL BARK ; 按键发声
MOV A,R1
MOV R6,A ; 送R1->R6,因为R1中保存了抢答时间
SETB OK ; 抢答标志位,用于COUNT只程序中判断是否查询抢答
MOV R3,#0AH ; 抢答只显示计时,灭号数
AJMP COUNT ; 进入倒计时程序,"查询有效抢答的程序"在COUNT里面NEXT: JNB ,FALSE1
JNB ,FALSE2
JNB ,FALSE3
)
JNB ,FALSE4
JNB ,FALSE5
JNB ,FALSE6
JNB ,TZ1
JNB ,TZ2
AJMP START
TZ1: JMP FALSE7
TZ2: JMP FALSE8
;
;=====非法抢答处理程序=====
FALSE1: ACALL BARK ; 按键发声
MOV R3,#01H
AJMP ERROR
FALSE2: ACALL BARK
MOV R3,#02H
AJMP ERROR
FALSE3: ACALL BARK
…
MOV R3,#03H
AJMP ERROR
FALSE4: ACALL BARK
MOV R3,#04H
AJMP ERROR
FALSE5: ACALL BARK
MOV R3,#05H
AJMP ERROR
)
FALSE6: ACALL BARK
MOV R3,#06H
AJMP ERROR
FALSE7: ACALL BARK
MOV R3,#07H
AJMP ERROR
FALSE8: ACALL BARK
MOV R3,#08H
\
AJMP ERROR
;=====INT0(抢答时间R1调整程序)=====
INT0SUB:MOV A,R1
MOV B,#0AH
DIV AB
MOV R5,A
MOV R4,B
MOV R3,#0AH
/
ACALL DISPLAY ; 先在两个时间LED上显示R1 JNB ,INC0 ; 为+1s键,如按下跳到INCO
JNB ,DEC0 ; 为-1s键,如按下跳到DECO
JNB ,BACK0 ; 为确定键,如按下跳到BACKO
AJMP INT0SUB
INC0: MOV A,R1
CJNE A,#63H,ADD0 ; 如果不是99,R2加1,如果加到99,R1就置0,重新加起。
MOV R1,#00H
:
ACALL DELAY1
AJMP INT0SUB
ADD0: INC R1
ACALL DELAY1
AJMP INT0SUB
DEC0: MOV A,R1
JZ SETR1 ; 如果R1为0, R1就置99,
DEC R1
[
ACALL DELAY1
AJMP INT0SUB
SETR1: MOV R1,#63H
ACALL DELAY1
AJMP INT0SUB
BACK0: RETI
;=====INT1(回答时间R2调整程序)=====
INT1SUB: MOV A,R2
*
MOV B,#0AH
DIV AB
MOV R5,A
MOV R4,B
MOV R3,#0AH
ACALL DISPLAY
JNB ,INC1
JNB ,DEC1
-
JNB ,BACK1
JMP INT1SUB
INC1: MOV A,R2
CJNE A,#63H,ADD1
MOV R2,#00H
ACALL DELAY1
AJMP INT1SUB
ADD1: INC R2
ACALL DELAY1
AJMP INT1SUB
DEC1: MOV A,R2
JZ SETR2
DEC R2
ACALL DELAY1
AJMP INT1SUB
SETR2: MOV R2,#63H。
ACALL DELAY1
AJMP INT1SUB
BACK1: RETI
;=====倒计时程序(抢答倒计时和回答倒计时都跳到改程序)=====
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 ; 取个位
MOV A,R6
SUBB A,#07H
&
JNC LARGER ; 大于5s跳到LARGER,小于等于5s会提醒
MOV A,R0
CJNE A,#0AH,FULL ; 1s中向下运行
CLR RING
AJMP CHECK
FULL: CJNE A,#14H,CHECK ; 下面是1s的情况,响并显示号数并清R0,重新计
SETB RING
MOV A,R6
!
JZ QUIT ; 计时完毕
MOV R0,#00H
DEC R6 ; 一秒标志减1
AJMP CHECK
LARGER: MOV A,R0
CJNE A,#14H,CHECK ; 如果1s向下运行,否者跳到查"停/显示"
DEC R6 ; 计时一秒R6自动减1
MOV R0,#00H
、
CHECK: JNB ,QUIT ; 如按下停止键退出
ACALL DISPLAY
JB OK,ACCOUT ; 如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)
AJMP RECOUNT
ACCOUT:JNB ,TRUE1
JNB ,TRUE2
JNB ,TRUE3
JNB ,TRUE4
…
JNB ,TRUE5
JNB ,TRUE6
JNB ,TZ3
JNB ,TZ4
AJMP RECOUNT
TZ3: JMP TRUE7
TZ4: JMP TRUE8
QUIT: CLR OK ; 如果按下了"停止键"执行的程序
)
CLR RING
AJMP START
;=====正常抢答处理程序=====
TRUE1: ACALL BARK ; 按键发声
MOV A,R2
MOV R6,A;抢答时间R2送R6
MOV R3,#01H
CLR OK ; 因为答题的计时不再查询抢答,所以就锁了抢答
!
AJMP COUNT
TRUE2: ACALL BARK;
MOV A,R2
MOV R6,A
MOV R3,#02H
CLR OK
AJMP COUNT
TRUE3:ACALL BARK;
MOV A,R2
MOV R6,A
MOV R3,#03H
CLR OK
AJMP COUNT
TRUE4:ACALL BARK;
MOV A,R2
MOV R6,A
CLR OK
AJMP COUNT
TRUE5: ACALL BARK;
MOV A,R2
MOV R6,A
MOV R3,#05H
CLR OK
AJMP COUNT
TRUE6: ACALL BARK;
MOV A,R2
MOV R6,A
MOV R3,#06H
CLR OK
AJMP COUNT
TRUE7: ACALL BARK;
"
MOV A,R2
MOV R6,A
MOV R3,#07H
CLR OK
AJMP COUNT
TRUE8:ACALL BARK;
MOV A,R2
MOV R6,A
#
MOV R3,#08H
CLR OK
AJMP COUNT
;=====犯规抢答程序=====
ERROR:MOV R0,#00H
MOV TH1,#3CH
MOV TL1,#0B0H
MOV 34H,R3 ; 犯规号数暂存与(34H)
%
HERE: MOV A,R0
CJNE A,#0AH,FLASH ; 向下运行->灭并停响
CLR RING
MOV R3,#0AH
MOV R4,#0AH
MOV R5,#0AH;三灯全灭
AJMP CHECK1
FLASH: CJNE A,#14H,CHECK1 ; 下面是1s的情况,响并显示号数并清R0,重新计。