设计一个抢答器电路程序。出题人提出问题,3个答题人按动按钮,仅仅是最早按的人面前的信号灯亮,然后出题

设计一个抢答器电路程序。出题人提出问题,3个答题人按动按钮,仅仅是最早按的人面前的信号灯亮,然后出题,第1张

这么简单的问题还要用PLC?太浪费了,只要四个继电器就可解决。三个答题人各有一个按钮开关,控制各自的继电器(四触点),继电器的两付常闭接点分别接入另外两个答题人的继电器回路,当他按下按钮时,继电器励磁并自保,常闭接点打开,另外两个答题人的按钮就失去作用,强答人起作用的继电器回路也有另外两个答题人的 继电器常闭接点。主持人控制的继电器有三个常闭接点分别接入三个答题人的继电器回路,当答题完成后主持按动按钮,他的继电器励磁(不带自保),常闭接点断开,原答题人的继电器被释放恢复初始状态,新一轮答题重新开始。如果你的钱多也可以用这个结构画成梯形图,只要调用PLC中的接点模块组合就行了。

#include <AT89X52H>

unsigned char Con,leddata=45;

unsigned int spe;

unsigned char Msel,Secs;

unsigned char keywait;

unsigned char LED_Disp;

unsigned char code LEDCODE[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf};

unsigned char data disp_data[2]={0x00,0x00}; //显示单元数据,共2个数据void key(void);void main(void)

{

TMOD = 0x01;

TH0 = 0xf8; //12M晶振 定时中断 2Ms

TL0 = 0x30;

EA = 1;

ET0 = 1;

TR0 = 1;

while(1)

{

;

}

}

void Timer0Interrupt(void) interrupt 1

{

unsigned char con=0x01;

TH0 = 0xf8;

TL0 = 0x30;

key();

if(++LED_Disp>=2)

LED_Disp=0;

if(++Msel>=10)

{

Msel=0;

if(++Secs>=50) //1000Ms

{

Secs=0;

if(Con==0x0f)

{

if(disp_data[1])

disp_data[1]--;

else

{

if(disp_data[0])

{

disp_data[0]--;

disp_data[1]=9;

}

else

{

Con=0;

spe=1000;

}

}

}

else

{

if(Con>0x0f)

{

Con=0;

spe=1000;

disp_data[0]=0;

disp_data[1]=0;

}

}

}

}

if(spe){spe--;P3_7=0;}

else P3_7=1;

con<<=LED_Disp;

P2=0xf0|con;

P0=LEDCODE[disp_data[LED_Disp]];

}void key(void)

{

unsigned char keydata;

keydata=P1&0x7f;

if(keydata!=0x7f)

{

if(++keywait>=100)keywait=100;

if(keywait==2)

{

switch(keydata)

{

case 0x7e:if(!Con)

{

if(++leddata>60)

leddata=0;

}

disp_data[0]=leddata/10;

disp_data[1]=leddata%10;

break;

case 0x7d:Con=0;

disp_data[0]=leddata/10;

disp_data[1]=leddata%10;

P3=(P3&0xf0)|0x0f;

break;

case 0x7b:if(!Con)

{

Con=0x0f;spe=100;

P3=(P3&0xf0)|0x0f;

disp_data[0]=leddata/10;

disp_data[1]=leddata%10;

}

break;

case 0x77:if(Con==0x0f){Con++;P3_0=0;}break;

case 0x6f:if(Con==0x0f){Con++;P3_1=0;}break;

case 0x5f:if(Con==0x0f){Con++;P3_2=0;}break;

case 0x3f:if(Con==0x0f){Con++;P3_3=0;}break;

}

}

}

else

keywait=0;

}

兄弟~我只懂用汇编语言编写~因为这个星期我刚好做这到题

ORG 0000H

AJMP START

ORG 0030H

START:MOV P0,#00H;显示

MOV P2,#0FFH;

JNB P10,PULSE;开始

LOOP:;MOV P3,#0FFH

JNB PI0,LOOP5

JNB P11,LOOP1; 判断指令

JNB P12,LOOP2

JNB P13,LOOP3

JNB P14,LOOP4

AJMP START;跳转指令

ZHT0:MOV P0,#00H;显示

SE1: MOV P2,#0FEH

JNB P15,ZHT0

AJMP SE1

SE2:MOV P2,#0FDH

JNB P15,ZHT0

AJMP SE2

SE3:MOV P2,#0FBH

JNB P15,ZHT0

AJMP SE3

SE4:MOV P2,#0F7H

JNB P15,ZHT0

AJMP SE4

LOOP1: MOV P0,#01H

MOV P2,#7EH;1号LED亮,发出警告

LCALL DELAY;延时05S

MOV P2,#0FFH;1号LED灭,警告停止

LCALL DELAY;延时05s

AJMP START;跳转指令

LOOP2: MOV P0,#02H

MOV P2,#7DH;2号LED亮,发出警告

LCALL DELAY;延时05S

MOV P2,#0FFH;2号LED灭,警告停止

LCALL DELAY;延时05s

AJMP START;跳转指令

LOOP3:MOV P0,#03H

MOV P2,#7BH;3号LED亮,发出警告

LCALL DELAY;延时05s

MOV P2,#0FFH;3号LED灭,警告停止

LCALL DELAY;延时05s

AJMP START;跳转指令

LOOP4:MOV P0,#04H

MOV P2,#77H;4号LED亮,发出警告

LCALL DELAY;延时05s

MOV P2,#0FFH;4号LED灭,警告停止

LCALL DELAY;延时05s

AJMP START;跳转指令

LOOP5:MOV P2,#00H

MOV TMOD,#01H

MOV DPTR,#TABLE

PULSE:MOV P2,#0FFH

MOV TMOD,#01H

MOV DPTR,#TABLE;连数

NEXT:MOV A,#00H

MOVC A,@A+DPTR

MOV P0,A

JNB P11,SE1;判断1号抢答器是否打开

JNB P12,SE2;判断2号抢答器是否打开

JNB P13,SE3;判断3号抢答器是否打开

JNB P14,SE4;判断4号抢答器是否打开

MOV R3,#20

LCALL DELAY1

INC DPTR

CJNE A,#0FFH,NEXT

MOV P0,#0FFH

AJMP START;跳转到START处循环

DELAY:MOV R5,#250

D1:MOV R6,#20

D2:MOV R7,#248

DJNZ R7,$

DJNZ R6,D2

DJNZ R5,D1

RET

DELAY1:SETB TR0

AGAIN: MOV TL0,#LOW(65536-50000)

MOV TH0,#HIGH(65536-50000)

TEST1: JBC TF0,TEST2

JMP TEST1

TEST2:DJNZ R3,AGAIN

CLR TR0

RET

TABLE:DB 20H,19H,18H,17H,16H,15H,14H,13H,12H,11H

DB 10H,09H,08H,07H,06H,05H,04H,03H,02H,01H,00H

DB 0FFH

END

电路原理如附图,它由IC1和一个编码开关以及控制器等组成。编码开关是由IC1中的输入端A、B、C、D与二极管和按键组成。

验证编码开关是否正确,只要按住任意一个按键。使它有一个正电平输入,数码管就会显示相应的数字来。A、B、C、D这四条编码线。

分别是1、2、4、8。3则是由1+2同时输入一个正电平获得,5则由1+4获得,6则由2+4获得,7则由1+2+4获得,二极管是起反向截止作用的。

扩展资料:

抢答器,原理:如果为四路,当其中任一路控下后,其他几路即失效,结果为第一次按下的,可以用数码管或是LED灯来显示,当然这里只是讲原理与编程,具体可以根据抢答器路数及显示方式更改程序即可。

源程序如下:

<div class="blockcode"><blockquote>/用的是AT89S52开发板,独立按键接口如下,就用这四路。先按下的用LED灯来显示,对应第一个到第四个LED灯,其他再按无效,如果想再次实现,可手动复位单片机/

#include <reg52h>

sbit key1=P3^0;     //定义按键,根据需要连接线路,如独立按键(4路)

sbit key2=P3^1;

sbit key3=P3^2;

sbit key4=P3^3。

参考资料来源:百度百科-抢答器

以上就是关于设计一个抢答器电路程序。出题人提出问题,3个答题人按动按钮,仅仅是最早按的人面前的信号灯亮,然后出题全部的内容,包括:设计一个抢答器电路程序。出题人提出问题,3个答题人按动按钮,仅仅是最早按的人面前的信号灯亮,然后出题、4路抢答器设计,急!!! 程序 解释 设计思路 和仿真图!!!、四路电子抢答器的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9433471.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存