我同学要我帮他写段代码,要求是用六个按键(光电传感器类似按键挡一下一个信号,数字的)接在P3口,每个独立按键控制一位数码管显示加或者循环,都相互独立,不知为何我写的代码要不是只能两个数码管可以独立,要不就是只能一个一个抡着按并在相应位上显示,这样就不独立 下面是我的两个程序(弄好请发我邮箱!1902228532@qq.com)
#include<reg52.h>//??????????????????λ
#define uint unsigned int
#define uchar unsigned char
sbit d1=P1^0;
sbit d2=P1^1;
sbit d3=P1^2;
sbit d4=P1^3;
sbit d5=P1^4;
sbit d6=P1^5;
sbit d7=P1^6;
sbit dula=P2^6;
sbit wela=P2^7;
sbit zhi0=P3^0;
sbit zhi1=P3^1;
sbit zhi2=P3^2;
sbit zhi3=P3^3;
sbit zhi4=P3^4;
sbit zhi5=P3^5;
sbit zhi6=P3^6;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar num,flag,aa,bb,cc,ba,sh,g,din,pin_value;
//void display(uchar aa,uchar bb,uchar cc,uchar ba,uchar sh,uchar g,uchar din);
void zhiscan();
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=250;y>0;y--);
}
void main()
{
while(1)
{
if(flag==0)
{zhiscan(); //flag=1;
delay(250);
} //display(aa,bb,cc,ba,sh,g,din);
}
d1=1;d2=1; d3=1; d4=1;d5=1; d6=1; d7=1;
/* delay(250);
dula=1;
P0=table[num];
dula=0; */
}
void zhiscan()
{
P3=0xff;
pin_value=P3;
switch(pin_value)
{
case 0xfe:zhi0=0;
wela=1;P0=0xfe;wela=0;if(zhi0==0)din++;d1=0;delay(10);
dula=1;P0=table[din];dula=0;delay(10);if(din==10)din=0;
break;
case 0xfd:zhi1=0;
wela=1;P0=0xfd;wela=0;if(zhi1==0)g++;d2=0;delay(10);
dula=1;P0=table[g];dula=0;delay(10);if(g==10)g=0;
break;
case 0xfb:zhi2=0;
wela=1;P0=0xfb;wela=0;if(zhi2==0)sh++;d3=0;delay(10);
dula=1;P0=table[sh];dula=0;if(sh==10)sh=0;delay(10);
break;
case 0xf7:zhi3=0;
wela=1;P0=0xf7;wela=0;if(zhi3==0)ba++;d4=0;delay(10);
dula=1;P0=table[ba];dula=0;if(ba==10)ba=0;delay(10);
break;
case 0xef:zhi4=0;
wela=1;P0=0xef;wela=0;if(zhi4==0)cc++;d5=0;delay(10);
dula=1;P0=table[cc];dula=0;if(cc==10)cc=0;delay(10);
break;
case 0xdf:zhi5=0;
wela=1;P0=0xdf;wela=0;if(zhi5==0)bb++;d6=0;delay(10);
dula=1;P0=table[bb];dula=0;if(bb==10)bb=0;delay(10);
break;
case 0xbf:zhi6=0;
wela=1;P0=0xbf;wela=0;if(zhi6==0)aa++;d7=0;delay(10);
dula=1;P0=table[aa];dula=0;if(aa==10)aa=0;delay(10);
break;
}}
#include<reg52.h>//只可以两个工作且只能轮流
#define uint unsigned int
#define uchar unsigned char
sbit d1=P1^0;
sbit d2=P1^1;
sbit d3=P1^2;
sbit d4=P1^3;
sbit d5=P1^4;
sbit d6=P1^5;
sbit d7=P1^7;
sbit dula=P2^6;
sbit wela=P2^7;
sbit zhi0=P3^0;
sbit zhi1=P3^1;
sbit zhi2=P3^2;
sbit zhi3=P3^3;
sbit zhi4=P3^4;
sbit zhi5=P3^5;
sbit k1=P3^6;
sbit k2=P3^7;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar num,flag;
void zhiscan();
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=250;y>0;y--);
}
void main()
{
if(k1==0)
{
P1=~P1;
}
if(k2==0)
{
delay(1);
if(k2==0)
{
d7=0;
delay(1);
d7=1;
}
}
while(1)
{
if(flag==0){
zhiscan();
}
d1=1;d2=1; d3=1; d4=1;d5=1; d6=1;
}}
void zhiscan()
{
if(zhi0==0)
{ wela=1;
P0=0xfe;
wela=0;
P3=0xff;
delay(250);
if(zhi0==0)
{
d1=0;
delay(250);
num++;
delay(250);
if(num==16)
num=0;
}
while(!zhi0);
delay(250);
while(!zhi0);
delay(250);
dula=1;
P0=table[num];
dula=0;
}
if(zhi1==0)
{ wela=1;
P0=0xfd;
wela=0;
P3=0xff;
delay(250);
if(zhi1==0)
{
d2=0;
delay(250);
num++;
delay(250);
if(num==16)
num=0;
}
while(!zhi1);
delay(250);
while(!zhi1);
delay(250);
dula=1;
P0=table[num];
dula=0;
}
if(zhi2==0)
{ wela=1;
P0=0xfb;
wela=0;
P3=0xff;
delay(250);
if(zhi2==0)
{
d3=0;
delay(250);
num++;
delay(250);
if(num==16)
num=0;
}
while(!zhi2);
delay(250);
while(!zhi2);
delay(250);
dula=1;
P0=table[num];
dula=0;
}
if(zhi3==0)
{ wela=1;
P0=0xf7;
wela=0;
P3=0xff;
delay(250);
if(zhi3==0)
{
d4=0;
delay(250);
num++;
delay(250);
if(num==16)
num=0;
}
while(!zhi3);
delay(250);
while(!zhi3);
delay(250);
dula=1;
P0=table[num];
dula=0;
}
if(zhi4==0)
{ wela=1;
P0=0xef;
wela=0;
P3=0xff;
delay(250);
if(zhi4==0)
{
d5=0;
delay(250);
num++;
delay(250);
if(num==16)
num=0;
}
while(!zhi4);
delay(250);
while(!zhi4);
delay(250);
dula=1;
P0=table[num];
dula=0;
}
if(zhi5==0)
{ wela=1;
P0=0xdf;
wela=0;
P3=0xff;
delay(250);
if(zhi5==0)
{
d6=0;
delay(250);
num++;
delay(250);
if(num==16)
num=0;
}
while(!zhi5);
delay(250);
while(!zhi5);
delay(250);
dula=1;
P0=table[num];
dula=0;
}
}
|