编辑代码

#include <stdio.h>

#include <math.h>
 
sbit hang1=P1^7;//一行阵列
sbit hang2=P1^6;
sbit hang3=P1^5;
sbit hang4=P1^4;
sbit lie1=P1^3;//1列阵列按钮
sbit lie2=P1^2;
sbit lie3=P1^1;
sbit lie4=P1^0;

//控制哪个位置灯管亮
sbit ledWei1=P2^2;
sbit ledWei2=P2^3;
sbit ledWei3=P2^4;

//控制亮的数字
sbit ledshu1=P0;

//数字数组
char code shu[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

int n;

void play(int a);
int saohang();
void Delay10ms();

void main(){

while(1){//不停扫描

play(saohang());

}


}


void play(int x){

ledWei1=0;
ledWei2=0;
ledWei3=0;
ledshu1=shu[x];
}



//按行扫描:指定行为0其他行1,判断行中4个列哪个为0;返回数字
int saohang(){

//第一行扫描0111
P1=1;//首先所以有按钮都设为1:默认没按
hang1=0;
if(lie1==0){
    Delay10ms();
    if(lie1==0){
    n= 1;
    }
}else if(lie2==0){
    Delay10ms();
    if(lie2==0){
    n= 2;
    }
}else if(lie3==0){
    Delay10ms();
    if(lie3==0){
    n= 3;
    }
}else if(lie4==0){
    Delay10ms();
    if(lie3==0){
    n= 4;
    }
}

//第2行扫描1011
P1=1;//首先所以有按钮都设为1:默认没按
hang2=0;
if(lie1==0){
    Delay10ms();
    if(lie1==0){
    n= 5;
    }
}else if(lie2==0){
    Delay10ms();
    if(lie2==0){
    n= 6;
    }
}else if(lie3==0){
    Delay10ms();
    if(lie3==0){
    n= 7;
    }
}else if(lie4==0){
    Delay10ms();
    if(lie3==0){
    n= 8;
    }
}

//第3行扫描1101
P1=1;//首先所以有按钮都设为1:默认没按
hang3=0;
if(lie1==0){
    Delay10ms();
    if(lie1==0){
    n= 9;
    }
}else if(lie2==0){
    Delay10ms();
    if(lie2==0){
    n= 10;
    }
}else if(lie3==0){
    Delay10ms();
    if(lie3==0){
    n= 11;
    }
}else if(lie4==0){
    Delay10ms();
    if(lie3==0){
    n= 12;
    }
}

return n;


}


 
 
void Delay10ms()		//@11.0592MHz
{
	unsigned char i, j;
 
	i = 18;
	j = 235;
	do
	{
		while (--j);
	} while (--i);
}