标题:
单片机四路抢答器程序,按键没有反应? 求帮助
[打印本页]
作者:
棒棒糖123
时间:
2019-6-28 12:23
标题:
单片机四路抢答器程序,按键没有反应? 求帮助
仿真的图
捕获.PNG
(191.16 KB, 下载次数: 36)
下载附件
2019-6-28 12:23 上传
为什么按照程序只能实现按下开始键就倒计时,按K1,K2,K3,K4没反应的,?
下面是程序:
#include<reg51.h>
typedef unsigned char uchar;
typedef unsigned int uint;
sbit K0=P3^2;//?????
sbit beep=P3^7;//??????
sbit D0=P3^3;//????
sbit K1=P1^0;//1???????????
sbit K2=P1^1;//2???????????
sbit K3=P1^2;//3???????????
sbit K4=P1^3;//4???????????
sbit D1=P1^4;//1??????
sbit D2=P1^5;//2??????
sbit D3=P1^6;//3??????
sbit D4=P1^7;//4??????
sbit S1=P3^4;//?????????
sbit S2=P3^5;//????1
sbit S3=P3^6;//????1
char s;
uchar num=0;
char time1;//???????
char time2;//??????????
uint m,n;//T0,T1???????????
bit flag1,flag2,flag3,flag4; //???λ
bit aa,bb;//?????????λ
//????????
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
uchar code table1[]={
//?????????????
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
uchar code table2[]={
//?????????λ???
0xfe,0xfd,
0xfb,0xf7
};
//??????????
void init()
{
TMOD=0x11;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
ET0=1;
ET1=1;
EA=1;
P0=0x00;
time1=8;
time2=8;
flag2=1;
}
//?????????????
void key1()
{
uchar i=100;
if(K0==0)
{
delay(8);
if(K0==0)
{
while(K0==0&&i)
{
i--;
delay(8);
}
TR0=1;
s=time1;
m=0;
flag1=1;
flag2=1;
flag3=1;
num=0;
beep=1;
flag4=0; //???Υ????λ
aa=0;
bb=0;
}
}
}
//?????????????????
void key()
{
uchar i=100;
if(K1==0)
{
delay(8);
if(K1==0)
{
while(K1==0&&i)
{
i--;
delay(8);
}
num=1;
P2=0x01;
D1=0; //????????1??"1"
TR0=0; //???????0,?????
TR1=1; //???????1,????????????
flag2=0; //??????????λ,????????????????????
}
}
if(K2==0) //?????????????????
{
delay(8);
if(K2==0)
{
while(K2==0&&i)
{
i--;
delay(8);
}
num=2;
D2=0;
TR0=0;
TR1=1;
flag2=0; //???
}
}
if(K3==0)
{
delay(8);
if(K3==0)
{
while(K3==0&&i)
{
i--;
delay(8);
}
num=3;
D3=0;
TR0=0;
TR1=1;
flag2=0;
}
}
if(K4==0)
{
delay(10);
if(K4==0)
{
while(K4==0&&i)
{
i--;
delay(8);
}
num=4;
D4=0;
TR0=0;
TR1=1;
flag2=0;
}
}
}
//?????????????
void display()
{
if(flag1==1) //?????????,??????????
{
if(num!=0) //???????????,?????????????
{
P0=table1[num]; //?????????????
P2=table2[0];
delay(2);
}
else //???????????,????治???????
{
P0=0x00;
P2=table2[0];
}
P0=table1[s/10]; //???????????????
P2=table2[2];
delay(2);
P0=table1[num];
P2=table2[0];
P0=table1[s%10];
P2=table2[3];
delay(2);
P0=0;
P2=table2[0];
P2=table2[1];
P2=table2[2];
P2=table2[3];
}
else //??????????а???,?????F FF(????Υ????,?????Υ????? FF)????????
{
if(flag4==1) //Υ?????
{
if(num!=0)
{
P0=table1[num]; //???????Υ????
P2=table2[1];
D0=1;
delay(2);
P0=0x00;
P2=0xff;
P0=table1[15]; //??????? FF,???Υ????
P2=table2[2];
delay(2);
P0=0x00; //????
P2=0xff;
P0=table1[15];
P2=table2[3];
delay(2);
P0=0x00;
P2=0xff;
P0=table1[15];
P2=table2[0];
delay(2);
P0=0x00;
P2=0xff;
}
else
{
P0=0x00;
P2=0xff;
}
}
else //?????Υ?????????????
{
if(aa==1)
{
P0=0x76; //???λ????????"5(S)"(?????????????)
P2=table2[0];
delay(2);
P0=0x00;
P2=0xff;
P0=table1[time1/10]; //????????????????????
P2=table2[2];
delay(2);
P0=0x00;
P2=0xff;
P0=table1[time1%10];
P2=table2[3];
delay(2);
P0=0x00;
P2=0xff;
}
else if(bb==1)
{
P0=0x38; //???λ????λ?????????????"T",?????????????
P2=table2[0];
delay(2);
P0=0x00;
P2=0xff;
P0=table1[time2/10];
P2=table2[2];
delay(2);
P0=0x00;
P2=0xff;
P0=table1[time2%10];
P2=table2[3];
delay(2);
P0=0x00;
P2=0xff;
}
else //???????F FF
{
P0=table1[15];
P2=table2[0];
delay(2);
P0=0x00;
P0=table1[15];
P2=table2[2];
delay(2);
P0=0x00; //????
P2=0xff;
P0=table1[15];
P2=table2[3];
delay(2);
P0=0x00;
P2=0xff;
}
}
}
}
//????????????????
void key2()
{
uchar i=100;
if(S2==0) //??????????
{
delay(8);
if(S2==0)
{
while(S2==0&&i)
{
i--;
delay(80);
}
time1++;
if(time1==61)
{
time1=8;
}
aa=1; //???????????λ??1
bb=0; //?????????????λ
}
}
if(S3==0) //??????????
{
delay(8);
if(S3==0)
{
while(S3==0&&i)
{
i--;
delay(8);
}
time2++;
if(time2==61)
{
time2=8;
}
bb=1;
aa=0;
}
}
}
//??????
void main()
{
uchar i=100;
init();//???ó?????????
while(1)
{
key1();//????????????????
if((flag1==0)&(flag2==1)) //??????????????????Υ???????????????
{
key2();
}
if((flag1==1)&(flag2==0)) //???????????????????????п????????????
{
if(S1==0)
{
delay(8);
if(S1==0)
{
while(S1==0&&i)
{
i--;
delay(8);
}
s=time2;
TR0=1;
m=0;
TR1=1;
}
}
}
if((flag1==0)&(flag2==1)) //Υ??
{
key();
if(num!=0) //???????а????,???????????????,????Υ????λ
{
flag4=1;
D0=0;
}
}
if((flag1==1)&(flag2==1)) //???????????????????????????,????а?·????????
{
key();
}
display();//????????????
}
}
//?????0?ж??????
void t0() interrupt 1
{
TH0=(65536-2000)/256; //2ms
TL0=(65536-2000)%256;
if(flag3) //???(START)??????,????(??1??),??????????
{
beep=~beep;
}
else
beep=1;
if(s<5) //????????????,??1??????????????,??????
{
if(s%2==0)
{
flag3=1;
D0=0;
}
else
{
flag3=0;
D0=1;
}
}
m++;
if(m==500) //1??
{
m=0;
s--;
flag3=0; //????????????????????
if(s==-1)
{
s=20;
TR0=0;
flag1=0; //???F FF
flag2=1;
num=0;
D0=1;
}
}
}
//?????1?ж??????
void t1() interrupt 3 //?????1?????????????????????(??1??)
{
TH1=(65536-2000)/256;
TL1=(65536-2000)%256;
beep=~beep;
n++;
if(n==500)
{
n=0;
TR1=0;
}
}
复制代码
作者:
xianfajushi
时间:
2019-6-28 20:50
https://blog.csdn.net/xianfajushi/article/details/90022291
作者:
007
时间:
2019-6-29 10:59
你这LED灯接错了吧,共阳极一端不应该是VCC吗,你怎么接地了
作者:
007
时间:
2019-6-29 11:00
电路有问题,程序你再查查吧
作者:
wc86110
时间:
2019-6-29 23:20
没反应复位电路是罪魁祸首, LED 电路也有问题,实物上蜂鸣器少拿 SPEAER 代替
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1