求~51单片机的八路抢答器设计程序和原理图,PCB

求~51单片机的八路抢答器设计程序和原理图,PCB,第1张

ORG 0000H

M: MOV P1, #0FEH

MOV P3, #00H

JNB P20, C1

JNB P21, C2

JNB P22, C3

SJMP M

C1: MOV P3, #06H

SJMP S1

C2: MOV P3, #5BH

SJMP S1

C3: MOV P3, #4FH

SJMP S1

S1: NOP

SJMP S1

END

这个是我以前做过的三路的抢答器的 你可以稍加改动一下就能实现八路的 我只会这一部分 很久没有接触了 都忘的差不多了

单片机来判断先后,是相当粗放的。

如果两人按键相差在十多微秒之内,单片机即判断不出先后了,无法关断第二人的输入。

应该在单片机,和选手按键之间,加入硬件,如ALSTTL/HC类型的锁存器,它就可以区分出来几个纳秒的时间差。

如果有两人同时按下怎么解决呢?

只能通过软件编程,按照编者自定的顺序来查找 “先按下”的按键。

查到一个,便认定是它“先按下”,其它的选手,哪怕是先按下几个纳秒,也不理它了。

其实,那个庙里面,都有屈死的鬼。

另外,抢答器的按键,应该采用硬件消抖,不要用软件延时消抖。

共阴极数码管也就是说,当控制信号为1时该段LED点亮,8段数码管的数字0~9定义为:

3FH,06H,5BH,4FH,66H

;01234

6DH,7DH,07H,7FH,6fh

;56789

以下为简易8路抢答器的例程:

#include<reg51h>

#define

uchar

unsigned

char

uchar

table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};

sbit

rstkey=P2^2;

sbit

speaker=P2^0;

void

delay()//延时约400毫秒

{

uchar

i,j;

for(i=0;i<200;i++)

for(j=0;j<250;j++);

}

main()

{

uchar

i,key;

P2=0xff;

while(1)

{

i=0;

P1=table[i];

while(1)

{

key=P3;

if(key!=0)break;

}

switch(key)

{

case

0x01:i=1;break;

case

0x02:i=2;break;

case

0x04:i=3;break;

case

0x08:i=4;break;

case

0x10:i=5;break;

case

0x20:i=6;break;

case

0x40:i=7;break;

case

0x80:i=8;break;

default:break;

}

P1=table[i];//显示按下抢答器的号

P0=key;//显示按下键号的LED

while(1)

{

if(rstkey==0)break;//主持人按下复位键则重新开始

speaker=~speaker;//否则蜂鸣器报警

delay();

}

}

}

要让51单片机共阴数码管显示数字,只需要将单片机的P2端口输出数字对应的段码即可。

以显示数字“0”为例,c语言程序如下:

#include<reg52h>

#define uchar unsigned char

#define uint unsigned int

//数码管的段码编码

Uchar table[10] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

void main(){//主函数

P0 = table[0];//显示0,大家可以修改里面的数据。

while(1);//程序不再执行其他步骤;

}

扩展资料:

数字0-9的对应段码:

数字0      0x3f

数字1      0x06

数字2      0x5b

数字3      0x4f

数字4      0x66

数字5      0x6d

数字6      0x7d

数字7      0x07

数字8      0x7f

数字9      0x6f

基于51单片机的抢答器设计属于电子信息工程领域。

51单片机是一种经典的嵌入式微控制器,广泛应用于各种电子产品中。抢答器又是一种基于电子技术的教育器材,通过电子信号控制来实现对比赛或考试过程中的答题者进行快速抢答。因此,基于51单片机的抢答器设计需要涉及到电路设计、程序开发、通信协议等多个方面的知识和技能,是典型的电子信息工程领域的应用案例之一。

此外,抢答器作为一种教育辅助器材,还常常被应用于学校、科研机构等场合,具有一定的社会意义和应用价值。

#include<reg51h>

#define uchar unsigned char

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};

sbit rstkey=P2^2;

sbit speaker=P2^0;

void delay()//延时约400毫秒

{

uchar i,j;

for(i=0;i<200;i++)

for(j=0;j<250;j++);

}

main()

{

uchar i,key;

P2=0xff;

while(1)

{

i=0;

P1=table[i];

while(1)

{

key=P3;

if(key!=0)break;

}

switch(key)

{

case 0x01:i=1;break;

case 0x02:i=2;break;

case 0x04:i=3;break;

case 0x08:i=4;break;

case 0x10:i=5;break;

case 0x20:i=6;break;

case 0x40:i=7;break;

case 0x80:i=8;break;

default:break;

}

P1=table[i];//显示按下抢答器的号

P0=key;//显示按下键号的LED

while(1)

{

if(rstkey==0)break;//主持人按下复位键则重新开始

speaker=~speaker;//否则蜂鸣器报警

delay();

}

}

}

以上就是关于求~51单片机的八路抢答器设计程序和原理图,PCB全部的内容,包括:求~51单片机的八路抢答器设计程序和原理图,PCB、基于51单片机的抢答器如果有两人同时按下怎么解决呢 比如有四组 当其中一组按下抢答键时 屏蔽其他组、51单片机的共阴数码管怎么显示数字(c语言)知道等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10017402.html

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

发表评论

登录后才能评论

评论列表(0条)

保存