基于单片机的八位抢答器

更新时间:2024-03-17 16:17:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

八位抢答器

摘 要随着电子技术的飞速发展,基于单片机的控制系统已广泛应

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

本设计是以八路抢答为基本理念。考虑到依需设定限时回答的功能,利用80c51单片机及外围接口实现的抢答系统,利用单片机的定时器/计数器定时和记数的原理,将软、硬件有机地结合起来,使得系统能够正确地进行计时,同时使数码管能够正确地显示时间。用开关做键盘输出,扬声器发生提示。同时系统能够实现:在抢答中,只有开始后抢答才有效,如果在开始抢答前抢答为无效;抢答限定时间和回答问题的时间可在1-99s设定;可以显示是哪位选手有效抢答和无效抢答,正确按键后有音乐提示;抢答时间和回答问题时间倒记时显示,满时后系统计时自动复位及主控强制复位;按键锁定,在有效状态下,按键无效非法。

关键词: 80C51; 抢答器; 计时; 报警

ABSTRACT

1

With the rapid development of electronic technology, the control system based on SCM has been widely used in industry, agriculture, electricity, electronics, intelligent buildings, industry, micro-computers embedded control system as the main and core, instead of the traditional control System of conventional electronic circuits. At the same time the development of intelligent buildings and maturity, but also based on the lighting control system MCU and popularity of application laid a solid foundation.

This design is eight road Qiangda as the basic concept.By taking into account the need for seting time and limiting to answer the function, which uses 80C51 microcontroller and external interface of Qiangda system, and uses SCM timer / counter timing and the number of mind Principle, the software and hardware organically combined, which could allow the right to conduct time, while the digital display to the correct time. Switching with the keyboard output, speakers in tips. At the same time, system can be realized .In Qiang da and which only begins after the Qiangda only effective, if at the beginning of Qiangda before Qiangda invalid; Qiangda limited time to answer questions and the time can be set in the 1-99 s; players who can show that it is effective and Qiangda Qiang da invalid, right after the music keys tips; Qiangda time to time and answer questions Dao Ji shi, over time, the system automatically reset control and

2

mandatory reduction; keys locked in an active state, the key is invalid illegal.

Key words: 80C51; alphanumeric display; Qiangda; time; alarm

3

目 录

1 概述 ........................................... 5

1.1硬件系统设计 ................................................................................................................................ 5 1.2软件设计 ........................................................................................................................................ 6

2 系统总体方案及硬件计 ........................... 6

2.1控制系统及所需元件 .................................................................................................................... 6 2.2实验原理 ........................................................................................................................................ 7 2.3 80C51 单片机 ............................................................................................................................... 8

3 软件系统设计 .................................. 11 4 系统仿真 ...................................... 18

4.1 Keil uVision2软件 ...................................................................................................................... 18 4.2 PROTUCE 软件 .......................................................................................................................... 18

5 心得体会 ...................................... 21 6 参考文献 ...................................... 23 附1:源程序代码 ................................ 24 附 2:系统原理图 ................................ 39

4

1 概述

《单片微型计算机原理与接口技术》是一门技术性,应用性、实践性很强的学科。课程设计是学好本门课程的又一重要实践性教学环节,课程设计的目的和任务就是配合单片机的教学和平时实验,以达到巩固消化课程的内容,进一步加强综合应用能力及单片机应用系统开发和设计能力的训练,启发创新思维,使之具有独立单片机产品和科研的基本技能,是以培养学生综合运用所学知识的过程,是知识转化为能力和能力转化为工程素质的重要阶段。在实际生活中有好多地方都用到了单片机,因此学习好这门课程有着十分重要的意义。

要求的模拟的抢答器:1) 能容许2-8 组进行抢答。2) 能显示抢答组号。3) 各组记分,并能记分显示。4) 比赛结束时,能发出报警声。

1.1硬件系统设计

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

2)硬件组成及所需元件:该系统的核心器件是80C51。在其外围接上复位电路、上拉电阻、数码管、按钮及扬声器。元件为:晶振X1、电容C1、C2、C3、 电阻RP1。P3.0 和P3.1 由裁判控制,分别是抢答停止和开始键。P1.0-P1.7是8 组抢答的输入口, P2.0--P2.3 口为数码

5

管的段选口, 位选口用的是P0.0--P0.6 口输出,外部中断0、1 和P3.3,P3.4 为抢答记时调整口,实现的对个队进行计时,并且加减调整,外部中断0,1 实现了答题时间调整.P3.4 P3.5分别实现了时间的加一和减一.P3.6 为蜂鸣器的控制口。 1.2软件设计

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

系统仿真还用到了PROTUCE 软件,可通过仿真可以完全显示出所设计系统的功能,对于程序的调试等有很大的帮助。

2 系统总体方案及硬件计

2.1控制系统及所需元件

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

6

LED

时钟频率 复位电路 主控制器显示键盘显示 图2.1硬件设计框图

所需元件:该系统的核心器件是80C51。在其外围接上复位电路、上拉电阻、数码管、按钮及扬声器。元件为:晶振X1、电容C1、C2、C3、 电阻RP1、P3.0 和P3.1 由裁判控制,分别是抢答停止和开始键。P1.0-P1.7 是8 组抢答的输入口, P2.0--P2.3 口为数码管的段选口,位选口用的是P0.0--P0.6 口输出,外部中断0、1 和P3.3,P3.4 为抢答记时调整口,实现的对个队进行计时,并且加减调整,外部中断0,1 实现了答题时间调整.P3.4 P3.5 分别实现了时间的加一和减一.P3.6 为蜂鸣器的控制口。 2.2实验原理

智力竞赛抢答器用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成, 采用单片机80C51,它是低功耗、高性能的CMOS 型8 位单片机。片内带有4KB 的存储器,且允许在系统内改写或用编程器编程。该智力竞赛抢答器的准确度很高,其误差主要由晶振自身的误差所造成。

7

声生器

2.3 80C51 单片机

80C51 单片机由微处理器,存储器,I/O 口以及特殊功能寄存器SFR 等部分构成。其存储器在物理上设计成程序存储器和数据存储器两个独立的空间,片内程序存储器的容量为4KB,片内数据存储器为128 个字节。80C51 单片机有4个8 位的并行I/O 口:P0 口,P1 口,P2 口和P3 口。各个接口均由接口锁存器,输出驱动器,和输入缓冲器组成。P1 口是唯一的单功能口,仅能用作通用的数据输入/输出口。P3 口是双功能口除了具有数据输入/输出功能外,每条接口还具有不同的第二功能,如P3.0 是串行输入口线,P3.1 口是串行输出口线。在需要外部程序存储器和数据存储器扩展时,P0 可作为分时复用的低8 位地址/数据总线,P2 口可作为高8 位的地址总线。P3 口也可作为80C51 的一些特殊功能口,同时为闪烁编程和编程校验接收一些控制信号。 80C51 的管脚图:

图2.2 80C51 的管脚图

外部振荡电路单片机必须在 80c51 的驱动下才能工作.在单片机内

8

部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元。外部振荡电路见

图2.3 外部振荡电路

外部中断和内部中断并存,单片机有硬件复位端,只要输入持续 4 个机器周期的高电平即可实现复位。硬件复位后的各状态可知寄存器及存储器的值都恢复到了初始值,应为本设计功能中有倒计时时间的记忆功能,所以不能对单片机进行硬件复位。只能用软复位。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程。 复位电路:

图2.4 复位电路

9

外部还接有蜂鸣器(由于缺少驱动器,发生器不响,所以,用绿灯换了)用来发出报警音,其图形如下:

图2.5 蜂鸣器

采用七段码 7SEG-MPX4-CC 显示,它是共阴极的由高电平点亮。图形如下:

图2.5 7SEG-MPX4-CC显示

采用八个 BUTTON 按钮作为抢答的选择按键如图所示:

图2.6 八抢答个BUTTON

10

3 软件系统设计

智力竞赛抢答器要求有计时记忆功能,一次时间设置完, 复位后不需重新进行时间设定,通过键盘扫描输出按键信息,再通过单片机将它转换成能在七段数码管上显示字型码.

数码显示模块 非法抢答模块 正确抢答模块 调整抢答时间 调整回答时间系统初始化模块 按键模块 图3.1 软件设计

当抢答完毕时,会在数码管上显示抢答者数字号码提示以表示抢答成功.同时显示其分数,分数的加减可由裁判手动进行. 采用独立式键盘,可实现8 路抢答。

在显示时使用的是七段数码管显示在本设计中根据实际情况采用的是动态显示

方法. 并通过查表法 将其在数码管上显示出来,其中P1 口为字型码

11

输入端,P2口低6 位为字选段输入端.通过查表将字型码送给7 段数码管显示的数字。软件去抖动,如果\开始键\按下就向下执行,否者跳到开始。采用倒计时程序,使其具有倒计时功能。回答倒计时30 秒。抢答时间5 秒。采用发声警报(由于发生器不响,所以,用绿灯换了),起到报警作用。

初始化 显示FFF 开始键按下? Y 去抖动 加一键按下? Y Y 减一键按下? 调整抢 答时间 显示 犯规 非法抢 答处理 正常 抢答

显示抢答 号并倒计时

回答 时间 图3.2 程序流程图

12

1、如果想调节抢答时间或答题时间,按\抢答时间调节\键或\答题时间调节\

键进入调节状态,此时会显示现在设定的抢答时间或回答时间值,如想加一秒按一下\加1s\键,如果想减一秒按一下\键,时间LED 上会显示改变后的时间,调整范围为0s~99s, 0s 时再减1s 会跳到99,99s 时再加1s 会变到0s。主持人按\抢答开始\键,会有提示音,并立刻进入抢答倒计时(预设30s 抢答时间),如有选手抢答,会有提示音,并会显示其号数并立刻进入回答倒计时(预设60s 抢答时间),不进行抢答查询,所以只有第一个按抢答的选手有效。倒数时间到小于5s 会每秒响一下提示音。

如倒计时期间,主持人想停止倒计时可以随时按\停止\按键,系统会自动进入准备状态,等待主持人按\抢答开始\进入下次抢答计时。

4、如果主持人未按\抢答开始\键,而有人按了抢答按键,犯规抢答,LED上不断闪烁FF 和犯规号数并响个不停,直到按下\停止\键为止。

5、P3.0 为开始抢答,P3.1 为停止,p1.0-p1.7 为八路抢答输入 数码管段选P0 口,位选P2 口低3 位,蜂鸣器输出为P3.6 口。P3.2 抢答时间调整结,P3.3回答时间调整,P3.4 为时间加1 调整,P3.5 为时间减1 调整。

下面是部分功能程序(附部分说明): ;=====查询程序=====

13

START: MOV R5,#0BH MOV R4,#0BH MOV R3,#0BH

ACALL DISPLAY;未开始抢答时候显示FFF JB P3.0,NEXT;ddddddd ACALL DELAY

JB P3.0,NEXT;去抖动,如果\开始键\按下就向下执行,否者跳到非法 抢答查询

ACALL BARK;按键发声 MOV A,R1

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

SETB OK;抢答标志位,用于COUNT 只程序中判断是否查询抢答 MOV R7,#01H ;读抢答键数据信号标志,这里表示只读一次有用信号 MOV R3,#0AH;抢答只显示计时,灭号数

AJMP COUNT;进入倒计时程序,\查询有效抢答的程序\在COUNT 里面 NEXT: JNB P1.0,FALSE1 JNB P1.1,FALSE2 JNB P1.2,FALSE3 JNB P1.3,FALSE4 JNB P1.4,FALSE5 JNB P1.5,FALSE6 JNB P1.6,FALSE7

14

JNB P1.7,FALSE8 AJMP START

;=====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 P3.4,INC0;P3.4 为+1s 键,如按下跳到INCO JNB P3.5,DEC0;P3.5 为-1s 键,如按下跳到DECO JNB P3.1,BACK0;P3.1 为确定键,如按下跳到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

15

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

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

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

;然而在检测按键口时动态扫描要调用三次(4ms)延时程序.这样就会导致读数据

口出现滞后,造成1 号优先最高.8 号最低.

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

CJNE A,#0FFH,AA1 ;当不全为1 时的数据为有效数据 AA0: MOV 36H,A ;将有效数据送到36H 暂存 AJMP LOOP2

16

AA1: DEC R7 AJMP AA0

;=====发声程序===== BARK: SETB RING ACALL DELAY1 ACALL DELAY1 CLR RING;按键发声 RET

;=====TO 溢出中断(响铃程序)===== T0INT: MOV TH0,#0ECH MOV TL0,#0FFH JNB RING,OUT;

CPL P3.6;RING 标志位为1 时候P3.6 率的声 音 OUT: RETI

;=====T1 溢出中断(计时程序)===== T1INT: MOV TH1,#3CH MOV TL1,#0B0H INC R0 RETI END

17

口不短取反使喇叭发出一定频

4 系统仿真

4.1 Keil uVision2软件

用到了伟福软件, 集成调试环境,集成了编缉器、编译器、调试器,支持软件模拟,支持项目管理功能强大的观察窗口,支持所有的数据类型。树状结构显示,一目了然,支持ASM(汇编)、C 语言,多语言多模块源程序混合调试,在线直接修改、编译、调试源程序,错误指令定位。功能很强大。用于对程序的调试和编辑。 其界面如下:

图4.1 Keil uVision2软件界面

4.2 PROTUCE 软件

系统仿真还用到了PROTUCE 软件,可通过仿真可以完全显示出所设计

18

系统的功能,对于程序的调试等有很大的帮助。系统仿真时首先要在使用伟福编译器,把所写的程序进行编译,同时在仿真器里设置生成HEX 文件,编译无错误时进行PROTUCE 仿真。首先要新建一个文档是 DNS 型的找出需要的器件,可以使用搜索功能。接着把各个器件放到合适的位置都要放到蓝色框内。然后根据自己的设计要求连线。等所有的元件都连接完成后可以把,伟福编译生成的无错误文件加载到80C51中,方法是,右键点中器件然后在用左键点击,出来一个对话框在program file 后选择要添加文件,文件要求必须是HEX 文件。然后可以点击运行观察现象,看与自己设置的符合否,如果不相符在查找错误进行修改,一般的错误都是程序中的,所以要认真的读取程 序的每一个部分 做好的PROTUCE 图:

图4.2 仿真电路图

19

三号违规抢答时的显示图:

图4.3 三号违规抢答时的显示图

使用加法调整时的图:

图4.4 调整时间(加)图

减法调整图:

图4.5 调整时间(减)图

倒计时还有1秒时的报警显示图:

20

提示灯会呈闪亮状

图4.6 倒计时还有1秒时的报警显示图

5 心得体会

单片机课程设计是一门很实用,很难的设计。这个设计用到了单片机,电路等方面的知识,通过这次课程设计,使我对单片机及其附属电路有了一定的了解,对课本上的知识有了近一步的掌握,也深刻明白了自己的不足。完成本次课程设计的过程,是一个从无到有的过程,经历了兴奋、自信、失落、奋发、所悟、完成几个过程。刚做做课程设计时,仔细阅读设计的题目和要求,以为没什么困难的,所用的知识书上都有。可是当我动手开始做的时候,才发现其中的算法,设计是那么繁琐。经过一天的努力,毫无结果。失落的心情油然而生。

21

于是,再到图书馆和网上查找资料,在经过借鉴很多类似的资料,文献后,总算是有点眉目了。埋头苦干的过程是痛苦的,尤其是在思考算法和程序框架时,迷茫,烦躁,特别是当苦思出来一个结果,又被自己推翻,心痛的无法言绘。在痛苦中挣扎,建立,推翻,参考别人的思路,建立,再次在推翻,在这不断循环中,终于最后完善了程序。其中的煎熬是很痛苦的,深刻明白攻克自己“未知领域”的困难。但当课程设计完成时,那感觉是甜蜜的,没有耕耘,哪来得收获的喜悦,不懂付出怎么能知道回报的快乐,一分耕耘一分收获,有付出才会有回报,就在这样的痛与快乐的交换中,我学到了知识, 学到了做人的道理。

通过这短短一周的实践,我感觉到自己从课本上学到的理论知识和实践仍有很大的差距。最少很多元器件根本不知道有什么功效,在仿真仪器中是什么代码。有的知识,自己感觉已经掌握得差不多了,但是实际操作起来就有问题出现了。我遇到了不少问题,花费了很多的时间。这让我重新反思我们的学习,深刻领悟到我们这个专业动手,实践的重要性。理论不经过实践考验,是没法实施的,就像我们编的程序,很多方面考虑的都不够,几乎没有涉及到实际应用时的防范方 法措施。这次的课程设计,让我学到了很多书本上学不到的东西,学到了实际应用时,是取用成本的最小化,做设计不仅要考虑大的方面,小的方面也必须做到完美。最大的收获是:对键盘,显示器, C51 语言(虽然最后还是用汇编语言编写的,但是,我也试着学用了C51)的应用有了深刻的了解。

22

6 参考文献

【1】中国矿业大学出版社,《单片机原理及应用技术》,余发山,2003

【2】国防工业出版社《单片微型计算机接口技术及其应用》张淑清等,2004

【3】北京航空航天大学出版社《单片机课程设计实例指导》 李光飞 楼然苗 胡佳文 谢象佐编著,2004

【4】科学出版社 《单片微型计算机原理与接口技术》高锋 2008 【5】 沈庆阳、郭庭吉 8051单片机实践与应用 清华大学出版社 2003

23

附1:源程序代码

;-------------------------- ;------06 通信工程2班------ ;--------------------------

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为一次溢出中断

24

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 P3.0,NEXT;ddddddd

ACALL DELAY

JB P3.0,NEXT;去抖动,如果\开始键\按下就向下执行,否者跳到非法抢答查询

ACALL BARK;按键发声

MOV A,R1

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

SETB OK;抢答标志位,用于COUNT只程序中判断是否查询抢答

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

25

用信号

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

AJMP COUNT;进入倒计时程序,\查询有效抢答的程序\在COUNT里面

NEXT: JNB P1.0,FALSE1

JNB P1.1,FALSE2

JNB P1.2,FALSE3

JNB P1.3,FALSE4

JNB P1.4,FALSE5

JNB P1.5,FALSE6

JNB P1.6,FALSE7

JNB P1.7,FALSE8

AJMP START

;=====非法抢答处理程序=====

FALSE1: MOV R3,#01H

AJMP ERROR

FALSE2: MOV R3,#02H

AJMP ERROR

FALSE3: MOV R3,#03H

AJMP ERROR

FALSE4: MOV R3,#04H

AJMP ERROR

FALSE5: MOV R3,#05H

AJMP ERROR

26

FALSE6: MOV R3,#06H

AJMP ERROR

FALSE7: MOV R3,#07H

AJMP ERROR

FALSE8: 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 P3.4,INC0;P3.4为+1s键,如按下跳到INCO

JNB P3.5,DEC0;P3.5为-1s键,如按下跳到DECO

JNB P3.1,BACK0;P3.1为确定键,如按下跳到BACKO

AJMP INT0SUB

INC0: MOV A,R1 CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。

MOV R1,#00H

ACALL DELAY1

27

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 P3.4,INC1

JNB P3.5,DEC1

28

JNB P3.1,BACK1

AJMP 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

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

REPEAT:MOV A,R2 ;使用锦囊时重新计时

MOV R6,A

CLR RING

29

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中0.5s向下运行

CLR RING

AJMP CHECK

FULL: CJNE A,#14H,CHECK;下面是1s的情况,响并显示号数并清R0,重新计

SETB RING

MOV A,R6

JZ QUIT;计时完毕

MOV R0,#00H

30

DEC R6;一秒标志减1

AJMP CHECK

LARGER: MOV A,R0

CJNE A,#14H,CHECK;如果1s向下运行,否者跳到查\停/显示\

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

MOV R0,#00H

CHECK: JNB P3.1,QUIT;如按下停止键退出

JNB OK,CHECKK ;只在回答倒计时才有效

AJMP NEXTT

CHECKK:JNB P3.0,REPEAT ;判断是否使用锦囊

NEXTT: ACALL DISPLAY

JB OK,ACCOUT;如果是抢答倒计时,如是则查询抢答,否者跳过查询继续倒数(这里起到锁抢答作用)

AJMP RECOUNT

ACCOUT:

MOV A,36H

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

31

JNB ACC.7,TZ2

AJMP RECOUNT

TZ1:JMP TRUE7

TZ2: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

32

CLR OK

AJMP COUNT

TRUE4:ACALL BARK

MOV A,R2

MOV R6,A

MOV R3,#04H

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

33

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,#06H,FLASH;0.3s向下运行->灭并停响

CLR RING

MOV R3,#0AH

MOV R4,#0AH

MOV R5,#0AH;三灯全灭

AJMP CHECK1

FLASH: CJNE A,#0CH,CHECK1;下面是0.8s的情况,响并显示号数并清R0,重新计

SETB RING

34

MOV R0,#00H

MOV R3,34H;取回号数

MOV R5,#0BH

MOV R4,#0BH;显示FF和号数

AJMP CHECK1

CHECK1: JNB P3.1,QUIT1

ACALL DISPLAY

AJMP HERE

QUIT1: CLR RING

CLR OK

AJMP START

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

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

MOV A,R3

MOVC A,@A+DPTR

MOV P2,#0feH

MOV P0,A

ACALL DELAY2

MOV DPTR,#DAT2

MOV A,R5

MOVC A,@A+DPTR

MOV P2,#0fdH

35

MOV P0,A

ACALL DELAY2

MOV A,R4

MOVC A,@A+DPTR

MOV P2,#0fbH

MOV P0,A

ACALL DELAY2

RET

DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H

;\灭\灭\

DAT2:DB 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H

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

;====加减时间延时(起到不会按下就加N个数)======

DELAY1: MOV 35H,#08H

LOOP0: ACALL DISPLAY

DJNZ 35H,LOOP0

RET

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

DELAY: MOV 32H,#12H

LOOP: MOV 33H,#0AFH

LOOP1: DJNZ 33H,LOOP1

DJNZ 32H,LOOP

RET

36

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

DELAY2: MOV 32H,#43H

LOOP3: MOV 33H,#1EH

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

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

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

;=====发声程序=====

BARK: SETB RING

ACALL DELAY1

ACALL DELAY1

37

CLR RING;按键发声

RET

;=====TO溢出中断(响铃程序)=====

T0INT: MOV TH0,#0ECH

MOV TL0,#0FFH

JNB RING,OUT;

CPL P3.6;RING标志位为1时候P3.6口不短取反使喇叭发出一定频率的声音

OUT: RETI

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

T1INT: MOV TH1,#3CH

MOV TL1,#0B0H

INC R0

RETI END

38

附 2:系统原理图

39

本文来源:https://www.bwwdw.com/article/hjd8.html

Top