单片机六位抢答器c语言程序,八路电子抢答器(基于51单片机的8路抢答器设计C语言程序)...

哥,你还有AT89C51单片机8路抢答器的资料吗

哥,你还有AT89C51单片机8路抢答器的资料吗

AT89C51单片机8路抢答器的资料

源程序如下

#include

#define uchar unsigned char

#define uint unsigned int

sbit k1=P1^7;

unsigned char code disp_code[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00,0x40};

uchar biaozhi,xuanshou,s,z,z1,tiaoshi,bianliang1,bianliang2;

signed char time[]={0,0};

void delay(uint x)? ?? ?? ???//延时函数

{

uint i,j;

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

for(j=125;j>0;j--);

}

void xianshi()? ?? ???//显示函数

{

P3_6=1;

P3_0=0;

P3_7=1;

P0=disp_code[xuanshou];

delay(5);

if(xuanshou!=10)

{

P3_0=1;

P3_6=0;

P3_7=1;

P0=disp_code[time[0]/10];

delay(5);

P3_0=1;

P3_6=1;

P3_7=0;

P0=disp_code[time[0]%10];

delay(5);

}

if(tiaoshi==1)

{

P3_0=1;

P3_6=0;

P3_7=1;

P0=disp_code[time[1]/10];

delay(5);

P3_0=1;

P3_6=1;

P3_7=0;

P0=disp_code[time[1]%10];

delay(5);

}

P3_0=1;

P3_6=1;

P3_7=1;

}

void anjian()? ?? ?? ?? ?? ? //按键的识别和代码的输出

{

if(biaozhi==1)

{

if(P2!=0xff)

{

if(P2_0==0)

{

xuanshou=1;

}

if(P2_1==0)

{

xuanshou=2;

}

if(P2_2==0)

{

xuanshou=3;

}

if(P2_3==0)

{

xuanshou=4;

}

if(P2_4==0)

{

xuanshou=5;

}

if(P2_5==0)

{

xuanshou=6;

}

if(P2_6==0)

{

xuanshou=7;

}

if(P2_7==0)

{

xuanshou=8;

}

s=0;

time[0]=bianliang2;

biaozhi=2;

}

}

if(biaozhi==0)

{

if(P2!=0xff)

{

TR1=1;

}

}

}

void int1(void) interrupt 3? ?? ?? ?? ?? ? //蜂鸣器驱动函数的设计

{

k1=0;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

z++;

if(z==5)

{

z=0;

z1++;

k1=~k1;

}

if(z1==3)

{

k1=1;

z1=0;

TR1=0;

biaozhi=0;

xuanshou=10;

}

}

void int4(void) interrupt 0? ?? ???//调节抢答时间函数

{

biaozhi=3;

tiaoshi=0;

xuanshou=12;

time[0]++;

bianliang1=time[0];

}

void int5(void) interrupt 2? ?? ???//调节做题时间函数

{

tiaoshi=1;

biaozhi=3;

xuanshou=10;

time[1]++;

bianliang2=time[1];

}

void int0(void) interrupt 1? ?? ?? ?? ?? ? //中断递增

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

s++;

if(s==20)

{

s=0;

time[0]--;

}

if(time[0]==0)

{

time[0]=0;

TR0=0;

TR1=1;

}}

void main()//主函数

{

IT0=1;? ?? ???//开启外部中断0和1,用来控制强大时间和做题时间

EX0=1;

IT1=1;

EX1=1;

TMOD=0x11;? ?? ???//定时中断的初始化

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

TF1=0;

ET1=1;

TF0=0;

EA=1;

ET0=1;

xuanshou=10;? ?? ???//xuanshou=10 是让其显示“--”

P2=0xff;

P1_7=1;

while(1)? ?? ???//死循环

{

if(biaozhi!=3)? ?? ???//判断主持开始抢答键是否按下

{

if(P3_1==0)

{

delay(2);

if(P3_1==0)

{

time[0]=bianliang1;? ?? ?? ?? ?? ? //把调节好的抢答时间代入显示time[0]

TR0=1;

biaozhi=1;

xuanshou=11;

}}}

if(P1_2==0)? ?? ?? ?? ?? ?? ?//判断是否按下调节时间 的确定按钮

{

delay(2);

if(P1_2==0)

{

TR0=0;

TR1=0;

biaozhi=0;

tiaoshi=0;

xuanshou=10;

}}

if(P1_4==0)

{

delay(150);

if(P1_4==0)

{

biaozhi=3;

tiaoshi=0;

xuanshou=12;

time[0]--;

if(time[0]<=0)

{

time[0]=0;

}}}

if(P1_5==0)

{

delay(150);

if(P1_5==0)

{

tiaoshi=1;

biaozhi=3;

xuanshou=10;

time[1]--;

if(time[1]<=0)

{

time[1]=0;

}} }

anjian();

xianshi();

}}

数字电子技术课程设计:八路智力竞赛抢答器的仿真电路图

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

向左转|向右转

另一电路

基于4511的八路抢答器:

向左转|向右转

仿真电路3:

向左转|向右转

求一个单片机的C语言的八路抢答器程序,要求主持人按下按钮后有30秒抢答时间?10秒回答时间

数码管采用的是共阴极数码管。

加电后,数码管无显示;当主持人按下开始键时,数码管显示30S倒计时开始,等待抢答。

当有人抢答时,单位数码管显示序号,10S倒计时开始。

程序已发送到你邮箱,有时间请查收。

有问题随时联系我。

基于51单片机的8路抢答器设计C语言程序

看不清楚你的图!具体接口不清楚!我就用文字写几个小步骤哈!!!全局先定义【位选口数组】【数码管显示0~9的数组】分别对按键进行编号,并置高!有键按下,判定该口是否为低,是低,显示该编好号的数!记住因为是抢答器,一个人按下,下一个人按下无效,且不显示,按键显示后加一个死循环!!这个程序很简单,有问题可以把图弄清晰了!帮你写出来!不过你还是自己试一试!毕竟知识是自己练出来的……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值