资源描述
1绪论
1.1课题研究背景及意义
此次课程设计制作是智能抢答器。对于抢答器我们大家全部很熟悉:是用于选手做抢答题目时用,选手进行抢答,最先抢到题选手回复问题。本试验设计智能抢答器由主体电路和扩展电路组成。优先编码电路、锁存器、译码电路将参赛队输入信号在显示器上输出;用控制电路和主持人开关开启报警电路,以上两部分组成主体电路。经过定时电路和译码电路将秒脉冲产生信号在显示器上输出实现计时功效,组成扩展电路。经过布线、焊接、调试等工作后智能抢答器成形。
1.2 相关背景介绍
抢答器含有锁存和显示功效。即选手按动按钮,锁存对应编号,并在数码管上显示,同时扬声器发出报警声响提醒。选手抢答实施优先锁存,优先抢答选手编号一直保持到主持人将系统清除为止。
用单片机来实现,她制作比较简单,和我们学《单片机原理》联络紧密,能将我们所学知识用于实际,对巩固所学知识相关键意义,使总体方案易于实现。所以本方案用单片机来实现。
在有些实际竞赛场所,只要满足显示抢答有效和有效组别即可,所以我们计划用一片74HC373(8位数据锁存器)来实现本课程设计简易抢答器功效,这是一个显示方法简单,价格低廉,经济实用抢答器设计方案。在要求不高场所,能完全符合要求。
2 总体设计方案
2.1 智能抢答器关键功效
抢答器原理:每个选手座位前安装一只抢答按钮开关和一只信号灯。主持人座位前安装一只复原按钮开关、一只蜂鸣器和一只抢答器工作状态指示灯。每当主持人口头发出许可抢答号令以后,哪个队先按下座位上按钮开关,该座位信号灯就先被点亮,同时封锁其它按钮开关活动。而且熄灭主持人座位上状态指示灯和发出 3 声类似于电话振铃提醒声,以“申明”此次抢答动作已经完成。在主持人确定后,按下复原按钮,状态指示灯重新点亮,而且同时发出“笛——笛——”声,为下一次抢答作好准备。电路中蜂鸣器FM是一只带有助音腔压电陶瓷蜂鸣器,用于模拟发出报警声功率放大器和喇叭。发声原理是,作用在两个电极极板电位在发生改变时,陶瓷材料就发生弯曲,从而振动空气发出声音。FM和 4 只按钮开关 SWa~SWd全部是在演示板基础上额外添加。因为RB端口内部含有上拉电阻,只要用软件设置其有效,即可省略在4 只端口引脚上外接上拉电阻。
参赛选手在设定时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手编号和抢答时间,并保持到主持人将系统清除为止。假如定时时间已到,无人抢答,此次抢答无效,系统报警并严禁抢答,定时显示器上显示0。
利用单片机能够用极少元件实现功效。单片机性能稳定,可操作性强。能够只用P0口连接排阻(用作上拉电阻),完成驱动LED功效,串接按键能够由选手自己控制抢答机会。利用单片机程序判定选手按键是否有效,但当选手违规抢答时,利用简单程序显示选手序号,开启蜂鸣器并不间断,告诉主持人有些人违规操作,抢答无效。给出对应延时,选手按正常操作抢答,软件倒记时。
假如有选手在要求时间以前完成问题,主持人经过按键开始按钮来复位,开始新问题作答,因为程序不是很大不需要扩展存放空间,选手按键跳入对应子程序,回复倒记时
和一般抢答器相比,我们还加入了部分不一样想法:
1、含有清零装置和抢答控制,可由主持人操纵避免有些人在主持人说“开始”前提前抢答违反规则。
2、含有定时功效,在10秒内无人抢答表示全部参赛选手获参赛队对本题弃权。
3、10秒时仍无人抢答其报警电路工作表示抢答时间耗尽并严禁抢答。
2.2 电路设计
本抢答器电路关键有四部分组成:数字抢答电路、时序控制电路、报警电路和可预置时间定时电路。其中数字抢答部分有一个74HC373锁存器和数码管显示器组成,能够将八位抢答者按钮经过数码管显示器显示出她们最先抢答者序号。而时序控制电路功效是当参赛选手按动抢答器时,使扬声器发声,这时抢答电路和定时电路停止工作。而且设定时间(本课题设置为10秒)抵达后若无人抢答,则报警电路工作。报警电路工作条件是当设定时间抵达后或有些人抢答时,报警电路被输入一个高电平,这时此电路工作。
2.3 八位抢答器设计要求
此次设计智能抢答器(八位抢答器)将含有以下功效:
(1)抢答器同时供8名选手比赛抢答用,有8个按钮S0 ~ S7表示。
(2)设置一个系统清除和抢答控制开关“开始”,“结束”,该开关由主持人控制。
(3)抢答器含有锁存和显示功效。即选手按动按钮,锁存对应编号,扬声器发出声响提醒,并在数码管上显示选手号码。选手抢答实施优先锁存,优先抢答选手编号一直保持到主持人将系统清除为止。
另外还有部分扩展功效:
(1)抢答器含有定时抢答功效,且一次抢答时间由主持人设定(如10秒)。当主持人开启“开始”键后,定时器进行减计时。
(2) 参赛选手在设定时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手编号和抢答时间,并保持到主持人将系统清除为止。
(3) 假如定时时间已到,无人抢答,此次抢答无效,系统报警并严禁抢答,定时显示器上显示0。
2.4硬件介绍
2.4.1 AT89C52单片机介绍
AT89C52是8位通用微处理器。采取标准C51内核,在内部功效及管脚排布上
PDIP封装AT89C52引脚图
和通用8xc52 相同,其关键用于会聚调整时功效控制。功效包含对会聚主IC 内部寄存器、数据RAM及外部接口等功效部件初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR接收解码及和主板CPU通信等。关键管脚有:XTAL1(19 脚)和XTAL2(18 脚)为振荡器输入输出端口,外接12MHz 晶振。RST/Vpd(9 脚)为复位输入端口,外接电阻电容组成复位电路。VCC(40 脚)和VSS(20 脚)为供电端口,分别接+5V电源正负端。P0~P3 为可编程通用I/O 脚,其功效用途由软件定义,在本设计中,P0 端口(32~39 脚)被定义为N1 功效控制端口,分别和N1对应功效管脚相连接,13 脚定义为IR输入端,10 脚和11脚定义为I2C总线控制端口,分别连接N1SDAS(18脚)和SCLS(19脚)端口,12 脚、27 脚及28 脚定义为握手信号功效端口,连接主板CPU 对应功效端,用于目前制式检测及会聚调整状态进入控制功效。
P0 口:P0 口是一组8 位漏极开路型双向I/O 口, 也即地址/数据总线复用口。作为输出口用时,每位能吸收电流方法驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。
在访问外部数据存放器或程序存放器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。
P1 口:P1 是一个带内部上拉电阻8 位双向I/O 口, P1 输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口写“1”,经过内部上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
引脚号
功效特征
P1.0
T2,时钟输出
P1.1
T2EX(定时/计数器2)
和AT89C51 不一样之处是,P1.0 和P1.1 还可分别作为定时/计数器2 外部计数输入(P1.0/T2)和输入(P1.1/T2EX),参见表1。
Flash 编程和程序校验期间,P1 接收低8 位地址。
P2 口:P2 是一个带有内部上拉电阻8 位双向I/O 口,P2 输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑 门电路。对端口P2 写“1”,经过内部上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。
在访问外部程序存放器或16 位地址外部数据存
储器(比如实施MOVX @DPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址外部数据存放器(如实施MOVX @RI 指令)时,P2 口输出P2 锁存器内容。
表1 P1.0和P1.1功效
P3 口:P3 口是一组带有内部上拉电阻8 位双向I/O 口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低P3 口将用上拉电阻输出电流(IIL)。
P3 口除了作为通常I/O 口线外,更关键用途是它第二功效
P3 口还接收部分用于Flash 闪速存放器编程和程序校验控制信号。
RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。
ALE/PROG:当访问外部程序存放器或数据存放器时,ALE(地址锁存许可)输出脉冲用于锁存地址低8 位字节。通常情况下,ALE 仍以时钟振荡频率1/6 输出固定脉冲信号,所以它可对外输出时钟或用于定时目标。要注意是:每当访问外部数据存放器时将跳过一个ALE 脉冲。
PSEN:程序储存许可(PSEN)输出是外部程序存放器读选通信号,当AT89C52 由外部程序存放器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存放器,将跳过两次PSEN信号。
EA/VPP:外部访问许可。欲使CPU 仅访问外部程序存放器(地址为0000H—FFFFH),EA 端必需保持低电平(接地)。需注意是:假如加密位LB1 被编程,复位时内部会锁存EA端状态。
如EA端为高电平(接Vcc端),CPU 则实施内部程序存放器中指令。
XTAL1:振荡器反相放大器及内部时钟发生器输入端。
XTAL2 :振荡器反相放大器输出端。
2.4.2锁存器
锁存器是一个对脉冲电平敏感存放单元电路,它们能够在特定输入脉冲电平作用下改变状态。由若干个钟控D触发器组成一次能存放多位二进制代码时序逻辑电路,叫锁存器件。
逻辑结构和功效表见图2-4:
图2-4 锁存器逻辑结构和功效表
8位锁存器74HC373逻辑图以下图所表示。其中使能端G加入CP信号,D为数据信号。输出控制信号为0时,锁存器数据经过三态门进行输出。
图2-5 74HC373引脚(管脚)图:
图2-6 74LS373内部逻辑图
图2-7 74LS373真值表
所谓锁存器,就是输出端状态不会随输入端状态改变而改变,仅在有锁存信号时输入状态被保留到输出,直到下一个锁存信号到来时才改变。在一些运算器电路中有时采取锁存器作为数据暂存器数据有效延迟后于时钟信号有效。这意味着时钟信号先到,数据信号后到。
经典锁存器逻辑电路是 D 触发器电路。
锁存,就是把信号暂存以维持某种电平状态。锁存器最关键作用是缓存,其次完成高速控制其和慢速外设不一样时问题,再其次是处理驱动问题,最终是处理一个 I/O 口既能输出也能输入问题。
3系统硬件设计
3.1 硬件电路总体框图
本数字抢答器硬件电路总体框图见图3-1:
CPU
按键和按钮电路
复位等辅助电路
数码管显示电路
总体开关
电源系统
图3-1 数字抢答器电路框图
3.2 电路器件选择
此次设计数字抢答器采取AT89C52单片机作为系统控制单元。
就抢答器而言,通常可采取液晶显示或数码管显示。因为数码管作为一个主动显示器件,含有亮度高、价格廉价等优点,而且市场上也有专门时钟显示组合数码管。本试验用数码管来显示。
3.3最小系统设计
3.3.1时钟频率电路图
单片机必需在时钟驱动下才能工作.由之前所学《单片机原理》最小系统内容,在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定时钟信号送到单片机内部各个单元,决定单片机工作速度。晶振电路见图3-2:
·
图3-2晶振电路
3.3.2复位电路图设计
单片机第9脚RST为硬件复位端,只要将该端连续4个机器周期高电平即可实现复位,复位后单片机各状态全部恢复到初始化状态。
复位电路图见图3-3所表示:
图3-3复位电路
3.3.3 键盘扫描电路设计
在单片机应用中键盘用得最多形式是独立键盘及矩阵键盘。本试验用是独立式键盘。
键盘扫描电路图见图3-4:
图3-4独立键盘
3.3.4功效键及发声系统设计
声音频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线“高”电平或低电平,则在该口线上就能产生一定频率矩形波,接上喇叭就能发出一定频率声音,若再利用延时程序控制“高”“低”电平连续时间,就能改变输出频率,从而改变音调,使喇叭发出不一样声音。
经过添加部分具体功效键能够使系统功效愈加完善。
功效键及发声系统结构图见图3-5:
图3-5功效键及发声系统结构图
3.4总体设计结构图
数字抢答器总体设计结构见图3-6:
图3-6总体结构图
4 个人小结
这次课程设计在学期开始时进行,经过一个暑假“沉淀”,对做课程所要求严谨科学态度还不适应了,所以一开始选题时候是很不知所措,再加上考研时间需要,这次就选了个比较简答抢答器。
当日选了题目以后,就开始找资料,先是就之前所学《单片机原理及应用技术》进行相关芯片研究,以后又去图书馆找了单片机实训教程,最终确定了用芯片AT89C52。这次课程设计我们期望能加入部分新想法:比如说不准有些人抢答,设定抢答时间。关键是考虑到以前看节目标时候常常会看到主持人还没说开始时候有些人已经抢答了,而且也算是为以后课程设计奠定基础。找了相关资料,在P3口添加了6个按键,设定了主持人复位键(开始,结束),设定抢答时间。确定了电路图。
然后是在proteus中画电路,由搭档在keil中编写程序,经过反复检验,修改。总算是调试出来了。
接着就是去采集器件了,一开始也没想到要用插针,根据电路图在版子上描画电路图,就开始焊,以后发觉可能是排版不够严谨吧,板子后面排线焊出来会很杂乱。于是就想到了插针,又去电子市场买了些。最终是焊好了,一调试结果也是正确,应该说关键是之前工作做比较充足。
设计电子智能抢答器,采取了单片机技术、数字电子、模拟电子等相关技术。把在学校三年所学知识连成一串。理论联络实践是我知道了在系统设计中设计方法选择是系统设计能否成功关键。在以后道路中,我会严格要求自己,追求完美。
5 致谢
这次课程设计是对过去所学知识系统提升和扩充过程,为以后发展打下了良好基础。经过反复查资料和向同学请教,我学会了很多做课题思想,套路。老师给我们安排课程设计就是在之前理论学习基础上增加自己动手能力,是我们思维更活跃,不至于做只会理论知识“书呆子”。这对以后我们出路奠定了很好基础。
在此,我要感谢指导老师庄志红和还有其它帮助过我们同学。
6 参考文件
1.《单片机原理及应用技术》 范力旻 电子工业出版社
2.《单片机应用技术实训教程》 胡文金 钟秉翔 杨健 重庆大学出版社
3.《8051单片机根本研究实习篇》 林申茂编著 人民邮电出版社
4.《单片机原理及接口技术实践教程》 胡建编著 机械工业出版社
5.《新型单片机接口器件和技术》 林凌,李刚,丁茹,李小霞.西安:西安电子科技大学出版社,
6.《单片机原理和应用及C51程序设计》 谢维城,杨加国.清华大学出版社,
7. .com
附录
附录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,#10;初设抢答时间为10s
MOV R2,#10;初设答题时间为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 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
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
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
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
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
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
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
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
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
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
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
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
;"灭","1","2","3","4","5","6","7","8","9","灭","F"
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
;=====延时4236个机器周期(显示用到)=====
DELAY2: MOV 32H,#43H
LOOP3: MOV 33H,#1EH
MOV A,R7 ;每隔60~70个机器周期读一次P1口,全为1时为无效数据,继续读,有一个不为1时,转到正常抢答处理
JNZ AAAA1 ;没读到有效数据时继续转到AAAA1
LOOP2: DJNZ 33H,LOOP2
展开阅读全文