基于单片机的数码管动态扫描显示问题

1、大致的要求:程序要用C来编,2、实现的功能是:一共有6个led数码显示管,以及6个开关,分别对应1--6,当开关1闭合时,led1显示1;当开关2闭合时,led2显示2;以此类推;但是当有多个开关同时闭合时,所对应的led要同时显示相应的数字。求各位高手帮助,谢谢大家啦!!!
2026年09月24日 14:36
有1个网友回答
网友(1):

#include

#define uint unsigned int
#define uchar unsigned char

unsigned char value[6]={16,16,16,16,16,16};
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};
uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};

////////////////////////////////////////////////////////
void delay(unsigned int cnt)
{
while(--cnt);
}
///////////////////////////////////////////////////////
void keyscan()
{

// P3=0;
// i=i& 0x3f;

/*
if(!P3^0) value[0]=1;else value[0]=16;
if(!P3^1) value[1]=2;else value[1]=16;
if(!P3^2) value[2]=3;else value[2]=16;
if(!P3^3) value[3]=4;else value[3]=16;
if(!P3^4) value[4]=5;else value[4]=16;
if(!P3^5) value[5]=6;else value[5]=16;
*/
if(P3^0==1) value[0]=16;else value[0]=1;delay(20);
if(P3^1==1) value[1]=16;else value[1]=2;delay(20);
if(P3^2==1) value[2]=16;else value[2]=3;delay(20);
if(P3^3==1) value[3]=16;else value[3]=4;delay(20);
if(P3^4==1) value[4]=16;else value[4]=5;delay(20);
if(P3^5==1) value[5]=16;else value[5]=6;delay(20);

}

void disp(uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6)
{

P0=~table[num1];//显示第一个数码管
P2=0x01;//0001 0000
delay(8000);
P0=~table[num2];//显示第二个数码管
P2=0x02;//0010 0000
delay(8000);
P0=~table[num3];//显示第三个数码管
P2=0x04;//0100 0000
delay(8000);
P0=~table[num4];//显示第四个数码管
P2=0x08;//1000 0000
delay(5000);
P0=~table[num5];//显示第wu个数码管
P2=0x10;//1000 0000
delay(5000);
P0=~table[num6];//显示第liu个数码管
P2=0x20;//1000 0000
delay(5000);
}

///////////////////////////////////////////////////////
main()
{

while(1)
{
keyscan();
disp(value[0],value[1],value[2],value[3],value[4],value[5]);
}
}