哥,你还有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的数组】分别对按键进行编号,并置高!有键按下,判定该口是否为低,是低,显示该编好号的数!记住因为是抢答器,一个人按下,下一个人按下无效,且不显示,按键显示后加一个死循环!!这个程序很简单,有问题可以把图弄清晰了!帮你写出来!不过你还是自己试一试!毕竟知识是自己练出来的……