数码管采用共阴数码管;
proteus电路接法如下:
程序如下:
void key_scan() //按键扫描函数
{
unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
P2 = 0xf0; //列扫描
if(P2 != 0xf0)
{
delay(1000);
if(P2 != 0xf0)
{
P2 = 0xef;
// delay(10000);
if(P2 != 0xef) //第一行扫描
{
switch(P2)
{
case 0xee: P1 = 0x1f; P0 = table[0]; break;
case 0xed: P1 = 0x1f; P0 = table[4]; break;
case 0xeb: P1 = 0x1f; P0 = table[8]; break;
case 0xe7: P1 = 0x1f; P0 = table[12]; break;
}
}
P2 = 0xdf;
if(P2 != 0xdf)
{
switch(P2)
{
case 0xde: P1 = 0x1f; P0 = table[1]; break;
case 0xdd: P1 = 0x1f; P0 = table[5]; break;
case 0xdb: P1 = 0x1f; P0 = table[9]; break;
case 0xd7: P1 = 0x1f; P0 = table[13]; break;
}
}
P2 = 0xbf;
if(P2 != 0xbf)
{
switch(P2)
{
case 0xbe: P1 = 0x1f; P0 = table[2]; break;
case 0xbd: P1 = 0x1f; P0 = table[6]; break;
case 0xbb: P1 = 0x1f; P0 = table[10]; break;
case 0xb7: P1 = 0x1f; P0 = table[14]; break;
}
}
P2 = 0x7f;
if(P2 != 0x7f)
{
switch(P2)
{
case 0x7e: P1 = 0x1f; P0 = table[3]; break;
case 0x7d: P1 = 0x1f; P0 = table[7]; break;
case 0x7b: P1 = 0x1f; P0 = table[11]; break;
case 0x77: P1 = 0x1f; P0 = table[15 ]; break;
}
}
}
}
}
void main()
{
while(1)
{
key_scan();
}
}
|