我来教大家“开心神兽炸金花挂有没有”(确实是有挂)-哔哩哔哩

网上有关“数字电子技术课程设计:八路智力竞赛抢答器的仿真电路”话题很是火热,小编也是针对数字电子技术课程设计:八路智力竞赛抢答器的仿真电路寻找了一些与之相关的一些信息进行分析,如果能碰巧解决你现在面临的问题,希望能够帮助到您。

您好:手机麻将有挂是真的吗这款游戏可以开挂,确实是有挂的,咨询加微信【】很多玩家在这款游戏中打牌都会发现很多用户的牌特别好,总是好牌,而且好像能看到其他人的牌一样。所以很多小伙伴就怀疑这款游戏是不是有挂,实际上这款游戏确实是有挂的
http://www.boyicom.net/sheng/1.jpg
1.手机麻将有挂是真的吗这款游戏可以开挂,确实是有挂的,通过添加客服微信 2.咨询软件加微信【】在"设置DD功能DD微信手麻工具"里.点击"开启". 3.打开工具.在"设置DD新消息提醒"里.前两个选项"设置"和"连接软件"均勾选"开启"(好多人就是这一步忘记做了) 4.打开某一个微信组.点击右上角.往下拉."消息免打扰"选项.勾选"关闭"(也就是要把"群消息的提示保持在开启"的状态.这样才能触系统发底层接口)

下面这个图是五路抢答器的,按照同样的道理多加三个就成了八路抢答器

另一电路

基于4511的八路抢答器:

仿真电路3:

求基于单片机的八路抢答器设计,要用到74LS47N和共阳led,求电路图和程序(最好是C),加急!!

具有定时功能的八路数显抢答器的设计

(中国地质大学(武汉)信息工程学院,武汉 430074)

摘要:

本文介绍了一种用74系列常用集成电路设计的数码显示八路抢答器的电路组成、设计思路及功能。该抢答器除具有基本的抢答功能外,还具有定时、计时和报警功能。主持人通过时间预设开关预设供抢答的时间,系统将完成自动倒计时。若在规定的时间内有人抢答,则计时将自动停止;若在规定的时间内无人抢答,则系统中的蜂鸣器将发响,提示主持人本轮抢答无效,实现报警功能。

关键词:

八路, 抢答器, 设计,定时,计时,报警

Abstract:

In this paper, the electric circuit and designing thought of an answering racer based on the common-used series of 74 IC with 8-wire is introduced, and its function is also described. The answering race’s function includes timing, counting, and alarming, besides the basic function of an answering racer. The host sets the provided time for the answering race through the time-setting switch, after this the system will count down the time automatically. If anybody answer the question on time, the counting of time will stop; If nobody answer the question on time, the alarm will give out some sound, helping the host know the race in this turn is of no use, so the function of alarming is achieved.

Keywords:

8-wire, answering racer, design, timing, counting, alarming

一、引言

工厂、学校和电视台等单位常举办各种智力竞赛, 抢答记分器是必要设备。在我校举行的各种竞赛中我们经常看到有抢答的环节,举办方多数采用让选手通过举答题板的方法判断选手的答题权,这在某种程度上会因为主持人的主观误断造成比赛的不公平性。为解决这个问题,我们小组准备就本次大赛的机会制作一个低成本但又能满足学校需要的八路数显抢答器。

二、设计任务及系统功能简介

1.基本功能:

(1) 抢答器同时供8名选手或8个代表队比赛,分别用8个按钮S0 ~ S7表示。

(2) 设置一个系统清除和抢答控制开关S,该开关由主持人控制。

(3) 抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,扬声器发出声响提示,并在DPY_7-SEG七段数码管上显示选手号码。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。

2.扩展功能:

(1) 抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动"开始"键后,定时器进行减计时。

(2) 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。在这段(3) 如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。

三、实现的原理与电路

1.数字抢答器总体方框图

如图1所示为总体方框图。其工作原理为:接通电源后,主持人将开关拨到"清零"状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置;开始"状态,宣布"开始"抢答器工作。定时器倒计时,扬声器给出声响提示。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次操作"清除"和"开始"状态开关。

总体框图 图1

2.单元电路设计

(1) 抢答器电路

设计电路如图2所示。电路选用优先编码器 74LS148 和锁存器 74LS297 来完成。该电路主要完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号(显示电路采用七段数字数码显示管);二是禁止其他选手按键,其按键操作无效。工作过程:开关S置于"清除"端时,RS触发器的 R、S端均为0,4个触发器输出置0,使74LS148的优先编码工作标志端(图中5号端)=0,使之处于工作状态。当开关S置于"开始"时,抢答器处于等待工作状态,当有选手将抢答按键按下时(如按下S5),74LS148的输出经RS锁存后,CTR=1,RBO(图中4端) =1,七段显示电路74LS48处于工作状态,4Q3Q2Q=101,经译码显示为“5”。此外,CTR=1,使74LS148 优先编码工作标志端(图中5号端)=1,处于禁止状态,封锁其他按键的输入。当按键松开即按下时,74LS148的 此时由于仍为CTR=1,使优先编码工作标志端(图中5号端)=1,所以74LS148仍处于禁止状态,确保不会出二次按键时输入信号,保证了抢答者的优先性。如有再次抢答需由主持人将S开关重新置“清除”然后再进行下一轮抢答。74LS148为8线-3线优先编码器,表1为其功能表。

表一

(2) 定时电路

原理及设计:该部分主要由555定时器秒脉冲产生电路、十进制同步加减计数器74LS192减法计数电路、74LS48译码电路和2个7段数码管即相关电路组成。具体电路如图3所示。两块74LS192实现减法计数,通过译码电路74LS48显示到数码管上,其时钟信号由时钟产生电路提供。74192的预置数控制端实现预置数,由节目主持人根据抢答题的难易程度,设定一次抢答的时间,通过预置时间电路对计数器进行预置,计数器的时钟脉冲由秒脉冲电路提供。按键弹起后,计数器开始减法计数工作,并将时间显示在共阴极七段数码显示管DPY_7-SEG 上,当有人抢答时,停止计数并显示此时的倒计时时间;如果没有人抢答,且倒计时时间到时, 输出低电平到时序控制电路,控制报警电路报警,同时以后选手抢答无效。下面结合图4具体讲一下标准秒脉冲产生电路的原理。结合图4,图中电容C的放电时间和充电时间分别为

于是从NE555的3端输出的脉冲的频率为

,结合我们的实际经验及考虑到元器件的成本,我们选择的电阻值为R1=15K,R2=68K,C=10uF,代入到上式中即得 ,即秒脉冲。

课程设计 八路竞赛抢答器

#include<reg52.h>

#define?uchar?unsigned?char

#define?uint?unsigned?int

sbit?kai=P2^2;

sbit?ting=P2^3;

sbit?hao1=P1^0;

sbit?hao2=P1^1;

sbit?hao3=P1^2;

sbit?hao4=P1^3;

sbit?hao5=P1^4;

sbit?hao6=P1^5;

sbit?hao7=P1^6;

sbit?hao8=P1^7;

sbit?wela=P2^1;

sbit?dela=P2^0;

sbit?P2_6=P2^6;

sbit?P2_7=P2^7;

uchar?code?table[]=

{0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x40};

uchar?a,a1,num,shi,ge,hao,

aa,num1,flag1,flag2,flag3,flag4,

flag5,flag6,flag7,flag8,flag9,flag10;

void?display(uchar?hao,uchar?aa,uchar?shi,uchar?ge);

void?init();

void?delay(uint?z);

void?keyscan();

void?main()

{

init();

while(1)

{

keyscan();

if(flag1==1)

{

display(hao,10,shi,ge);

}

else

{

display(hao,10,0,0);

}

}

}

void?delay(uint?z)

{

uint?x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void?keyscan()

{

if(kai==0)

{

delay(5);

if(kai==0)

{

while(!kai);

hao=0;

num=30;

shi=3;

ge=0;

TR0=1;

flag1=1;

P2_7=0;

P2_6=1;

}

}

if(ting==0)

{

delay(5);

if(ting==0)

{

while(!ting)

{

a=0;

num=30;

num1=0;

hao=0;

shi=3;

ge=0;

TR0=0;

TR1=0;

flag1=0;

P2_6=0;

P2_7=1;

P3=0xff;

}

}

}

if(flag1==1)

{?

if(hao==0&&hao1==0)

{

delay(5);

if(hao1==0)

{

while(!hao1);

P2_6=1;

P2_7=1;

P3=0xfe;

flag2=1;

shi=0;

ge=0;

hao=1;

TR1=1;

TR0=0;

}

}

if(hao==0&&hao2==0)

{

delay(5);

if(hao2==0)

{

flag3=1;

while(!hao2);

P2_6=1;

P2_7=1;

P3=0xfd;

shi=0;

ge=0;

hao=2;

TR0=0;

TR1=1;

}

}

if(hao==0&&hao3==0)

{

delay(5);

if(hao3==0)

{

flag4=1;

while(!hao3);

P2_6=1;

P2_7=1;

P3=0xfb;

shi=0;

ge=0;

TR0=0;

TR1=1;

hao=3;

}

}

if(hao==0&&hao4==0)

{

delay(5);

if(hao4==0)

{

flag5=1;

while(!hao4);

P2_6=1;

P2_7=1;

P3=0xf7;

shi=0;

ge=0;

TR0=0;

TR1=1;

hao=4;

}

}

if(hao==0&&hao5==0)

{

delay(5);

if(hao5==0)

{

flag6=1;

while(!hao5);

P2_6=1;

P2_7=1;

P3=0xef;

shi=0;

ge=0;

TR0=0;

TR1=1;

hao=5;

}

}

if(hao==0&&hao6==0)

{

delay(5);

if(hao6==0)

{

flag7=1;

while(!hao6);

P2_6=1;

P2_7=1;

P3=0xdf;

shi=0;

ge=0;

hao=6;

TR0=0;

TR1=1;

}

}

if(hao==0&&hao7==0)

{

delay(5);

if(hao7==0)

{

flag8=1;

while(!hao7);

P2_6=1;

P2_7=1;

P3=0xbf;

shi=0;

ge=0;

hao=7;

TR0=0;

TR1=1;

}

}

if(hao==0&&hao8==0)

{

delay(5);

if(hao8==0)

{

flag9=1;?

while(!hao8);

P2_6=1;

P2_7=1;

P3=0x7f;

shi=0;

ge=0;

hao=8;

TR0=0;

TR1=1;

}

}

if(!hao==0)

{

if(flag2==1)

{

if(hao1==0)

{

delay(5);

if(hao1==0)

{

TR1=0;

}

}

}

if(flag3==1)

{

if(hao2==0)

{

delay(5);

if(hao2==0)

{

TR1=0;

}

}

}

if(flag4==1)

{

if(hao3==0)

{

delay(5);

if(hao3==0)

{

TR1=0;

}

}

}

if(flag5==1)

{

if(hao4==0)

{

delay(5);

if(hao4==0)

{

TR1=0;

}

}

}

if(flag6==1)

{

if(hao5==0)

{

delay(5);

if(hao5==0)

{

TR1=0;

}

}

}

if(flag7==1)

{

if(hao6==0)

{

delay(5);

if(hao6==0)

{

TR1=0;

}

}

}

if(flag8==1)

{

if(hao7==0)

{

delay(5);

if(hao7==0)

{

TR1=0;

}

}

}

if(flag9==1)

{

if(hao8==0)

{

delay(5);

if(hao8==0)

{

TR1=0;

}

}

}

}?

}

}

void?display(uchar?hao,uchar?aa,uchar?shi,uchar?ge)

{

P0=0xff;

wela=1;

P0=0xfe;

wela=0;

P0=0;

dela=1;

P0=table[hao];

dela=0;

delay(5);

P0=0xff;

wela=1;

P0=0xfd;

wela=0;

P0=0;

dela=1;

P0=table[aa];

dela=0;

delay(5);

P0=0xff;

wela=1;

P0=0xfb;

wela=0;

P0=0;

dela=1;

P0=table[shi];

dela=0;

delay(5);

P0=0xff;

wela=1;

P0=0xf7;

wela=0;

P0=0;

dela=1;

P0=table[ge];

dela=0;

delay(5);

}

void?init()

{

TMOD=0X11;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

ET1=1;

num=30;

num1=0;

a1=0;

a=0;

shi=3;

ge=0;

flag1=0;

P2_6=0;

}

void?timer0()?interrupt?1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

a++;

if(a==18)

{

a=0;

num--;

if(num==0)

{

num=0;

TR0=0;

}

shi=num/10;

ge=num%10;

}

}

void?timer1()?interrupt?3

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

a1++;

if(a1==18)

{

a1=0;

num1++;

if(num1==60)

{

P3=0xff;

P2_6=0;

P2_7=1;

TR1=0;

}

shi=num1/10;

ge=num1%10;

}

}

第一章抢答器设计功能分析

1.1 数字抢答器的概述

对于抢答器我们大家来说都不陌生,它是用于很多竞赛场合,真正实现先抢先答,让最先抢到题的选手来回答问题。抢答器不仅考验选手的反应速度同时也要求选手具备足够的知识面和一定的勇气。选手们都站在同一个起跑线上,体现了公平公正的原则。

1.2 设计任务与要求

基本要求:

1. 给主持人设置一个开关,用来控制系统的清零(编号显示数码管灭灯)和抢答器的开始。

2. 抢答器具有数据锁存和显示的功能。抢答开始后,若有选手按动抢答器按钮,编号立即锁存,并在LED数码上显示选手的编号,同时扬声器给出音响提示。此外,要封锁输入电路,禁止其他选手抢答。

发挥部分:

1. 抢答器具有定时抢答的功能,且一次抢答的时间可以由主持人设定(如30秒)。当节目主持人启动“开始”键后,要求定时器立即减计时,并用显示器显示,同时扬声器发出短暂的声响,声响持续时间0.5秒左右。

2. 参加选手在设定的时间内抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答时刻的时间,并保持到主持人将系统清零为止。

3. 如果定时抢答的时间已到,却没有选手抢答时,本次抢答无效,系统短暂报警,并封锁输入电路,禁止选手超时后抢答,时间显示器上显示00。

4. 选手如果在主持人按开始键之前违规抢答,系统报警,LED显示违规选手号码和FF,直到主持人按下停止键。

第二章 抢答器方案论证

抢答器的实现方式有种多样,通过纯电子器件搭建电路实现,如优先编码器,锁存器,555定时器译码器等,纯电子器件实现没有软件参与,调试简单,但是它不易于扩展和修改,而且电路结构复杂,调试困难电子,电子器件管脚很多,实际搭建起来费时费力,焊接很容易出错。于是,我想到了用单片机实现。单片机体积小价格低,应用方便,稳定可靠。单片机将很多任务交给了软件编程去实现,大大简化了外围硬件电路,使外围电路的实现简单方便。由于单片机本身不具有软件编译测试的功能,我们需要借助其他软件编译,将编译好的程序“烧”入单片机内。

在实际电路设计中,需要先通过仿真软件测试电路以及编译的程序,检查外围电路设计是否合理,软件编译是否正确,以及软件和硬件电路能否正常配合工作,能否准确的实现所设计的功能。如果测试通过,电路仿真没有问题能完全实现功能的话就可以实际的做板子的焊接工作了。在老师的指导下我选择了常用的单片机仿真软件proteus6.9以及keil 进行仿真。

第三章 硬件电路设计

3.1总体设计

根据抢答器的基本功能,可以设计出如下的单片机外围电路:

图3-1 总体设计

如图3-1,P3.0为开始抢答,P3.2为停止,P1.0-P1.7为八路抢答输入,数码管段选P0口,位选P2口低3位,蜂鸣器(用绿灯代替)输出为P3.6口。P3.2为时间加1调整,P3.3为时间减1调整。

3.2 外部振荡电路

图3-2 外部振荡电路

一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容 C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。C1,C2的典型值为30PF。

3.3 复位电路的设计

单片机的第9脚RST为硬件复位端,只要将该端持续4个机器周期的高电平即可实现复位,复位后单片机的各状态都恢复到初始化状态,其电路图如图4所示:

图3-3 复位电路

在方案中使用到了硬件复位和软件复位两种功能,由上面的硬件复位可使寄存器及存储器的值都恢复到初始值,而前面的功能提到了倒计时间需要有记忆功能,该功能实现的前提条件就是不能对单片机进行硬件复位,所以设定了软复位功能。软复位实际上就是当程序执行完毕之后,将程序指针通过一条跳转指令让它跳转到程序执行的起始地址。

3.1.4 显示电路的设计

显示电路使用了七段数码管7SEG-MPX4-CC,它是共阴极的,由高电平点亮。

图3-4 阴极七段数码管

4.1.5 按钮输入电路的设计

抢答器的输入按钮使用常开开关,

图3-5 抢答按键

这些常开开关组成了抢答按键,硬件电路简单,在程序设计上也不复杂,只要在程序中消除在按键过程中产生的“毛刺”现象就可以了。这里采用最常用的方法即延时法,其的原理为:因为“毛刺”脉冲一般持续时间短,约为几ms,而按键的时间一般远远大于这个时间,所以当单片机检测到有按键动静后再延时一段时间(这里取10ms)后再判断此电平是否保持原状态,如果是则为有效按键,否则无效。

3.1.6 发声

这里能利用程序来控制单片机P3.6口线反复输出高电平或低电平,即在该口线上产生一定频率的矩形波,接上扬声器就能发出一定频率的声音,再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调,使扬声器发出不同的声音。

第四章 系统软件设计

4.1 程序系统结构图

硬件电路确定后,软件的编程要与硬件相匹配,软硬件才能结合完成所要实现的功能。由功能分析得到以下的软件结构图:

图4-1 软件系统结构图

4.2 程序流程图

整个程序主要由定时器T0、定时器T1、外部中断0和主程序构成。

定时器T0用于使扬声器发声,当需要响铃时,把响铃标志位置一,每次中断都对P3.7取反,扬声器发声,改变定时器初值,可改变扬声器频率。定时器程流程图如下:

图4-2 响铃程序流程图

定时器T1用于倒计时,每次中断为50ms,当计数标志为20时即为一秒,显示数字减一。其流程图如下:

图4-3 倒计时中断流程图

外部中断0用于调整倒计时时间,流程图如下:

图4-4 调整抢答时间流程图

主程序协调三个中断一起工作,实现抢答功能,其流程图如下:

图4-5 主程序流程图

附录:

程序代码:

P3.0为开始抢答,P3.1为停止,P1.0-P1.7为八路抢答输入,数码管段选P0口,位选P2的低三位口,蜂鸣器输出为P3.6口。

ORG 0000H

AJMP MAIN

ORG 0003H

AJMP INT0SUB

ORG 000BH

AJMP T0INT

ORG 001BH

AJMP T1INT

OK EQU 20H ; 抢答开始标志位

RING EQU 22H ; 响铃标志位

ORG 0040H

MAIN: 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 P3.0,NEXT

ACALL DELAY

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

ACALL BARK;按键发声

MOV A,R1

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

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

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

倒计时程序(包括有效抢答程序):

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中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; 如按下停止键退出

ACALL DISPLAY

JNB P1.0,TRUE1

JNB P1.1,TRUE2

JNB P1.2,TRUE3

JNB P1.3,TRUE4

JNB P1.4,TRUE5

JNB P1.5,TRUE6

JNB P1.6,TRUE7

JNB P1.7,TRUE8

AJMP RECOUNT

QUIT: 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 LOOP2

TRUE2:ACALL BARK;

MOV A,R2

MOV R6,A

MOV R3,#02H

CLR OK

AJMP LOOP2

TRUE3:ACALL BARK;

MOV A,R2

MOV R6,A

MOV R3,#03H

CLR OK

AJMP LOOP2

TRUE4:ACALL BARK;

MOV A,R2

MOV R6,A

MOV R3,#04H

CLR OK

AJMP LOOP2

TRUE5: ACALL BARK;

MOV A,R2

MOV R6,A

MOV R3,#05H

CLR OK

AJMP LOOP2

TRUE6: ACALL BARK;

MOV A,R2

MOV R6,A

MOV R3,#06H

CLR OK

AJMP LOOP2

TRUE7: ACALL BARK;

MOV A,R2

MOV R6,A

MOV R3,#07H

CLR OK

AJMP LOOP2

TRUE8: ACALL BARK;

MOV A,R2

MOV R6,A

MOV R3,#08H

CLR OK

LOOP2: AJMP DISPLAY ;抢答后停止计时,等待返回

SETB RING

JNB P3.1 QUIT

AJMP LOOP2

犯规抢答程序:

ERROR: SETB RING ;犯规响铃

MOV R5,#0BH

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

LOOP3: ACALL DISPLAY

JNB P3.1 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

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

DELAY1: MOV 35H,#08H

LOOP0: ACALL DISPLAY

DJNZ 35H,LOOP0

RET

延时(显示和去抖动用到):

DELAY: MOV 32H,#12H

LOOP: MOV 33H,#0AFH

LOOP1: DJNZ 33H,LOOP1

DJNZ 32H,LOOP

RET

发声程序:

BARK: SETB RING

ACALL DELAY1

ACALL DELAY1

CLR RING; 按键发声

RET

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

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

JNB P3.4,BACK0; P3.4为确定键,如按下跳到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

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

关于“数字电子技术课程设计:八路智力竞赛抢答器的仿真电路”这个话题的介绍,今天小编就给大家分享完了,如果对你有所帮助请保持对本站的关注!

(0)
上一篇 2024年05月15日
下一篇 2024年05月15日

相关推荐