#include<reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
sbit key1 = P2^4;
sbit key2 = P2^5;
sbit key3 = P2^6;
sbit key4 = P2^7;
unsigned char code leds[] = {
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,
0xC0
};
unsigned int code ledss[17][8] = {
{0xAA,0x55,0xAA,0x55,0xAA,0x55,0xAA,0x55},
{0xE7,0xE3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3},
{0x81,0x81,0x9F,0x81,0x81,0xF9,0x81,0x81},
{0x81,0x81,0x9F,0x81,0x81,0x9F,0x81,0x81},
{0x8F,0x87,0x93,0x99,0x9C,0x00,0x00,0x9F},
{0x81,0x81,0xF9,0x81,0x81,0x9F,0x81,0x81},
{0x81,0x81,0xF9,0x81,0x81,0x99,0x81,0x81},
{0x83,0x83,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F},
{0x81,0x81,0x99,0x81,0x81,0x99,0x81,0x81},
{0x81,0x81,0x99,0x81,0x81,0x9F,0x81,0x81},
{0xE7,0xE3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3},
{0x81,0x81,0x9F,0x81,0x81,0xF9,0x81,0x81},
{0x81,0x81,0x9F,0x81,0x81,0x9F,0x81,0x81},
{0x8F,0x87,0x93,0x99,0x9C,0x00,0x00,0x9F},
{0x81,0x81,0xF9,0x81,0x81,0x9F,0x81,0x81},
{0x81,0x81,0xF9,0x81,0x81,0x99,0x81,0x81},
{0x83,0x83,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F}
};
unsigned int locals = 0;
unsigned int local(unsigned int i)
{
unsigned char b;
switch(i)
{
case 1: P2 = 0xF7;if(key1 == 0){b = 1;}P2 = 0XFB;if(key1 == 0){b = 5;}P2 = 0XFD;if(key1 == 0){b = 9;}P2 = 0xFE;if(key1 == 0){b = 13;}break;
case 2: P2 = 0xF7;if(key2 == 0){b = 2;}P2 = 0XFB;if(key2 == 0){b = 6;}P2 = 0XFD;if(key2 == 0){b = 10;}P2 = 0xFE;if(key2 == 0){b = 14;}break;
case 3: P2 = 0xF7;if(key3 == 0){b = 3;}P2 = 0XFB;if(key3 == 0){b = 7;}P2 = 0XFD;if(key3 == 0){b = 11;}P2 = 0xFE;if(key3 == 0){b = 15;}break;
case 4: P2 = 0xF7;if(key4 == 0){b = 4;}P2 = 0XFB;if(key4 == 0){b = 8;}P2 = 0XFD;if(key4 == 0){b = 12;}P2 = 0xFE;if(key4 == 0){b = 16;}break;
default:break;
}
P2 = 0xF0;
return b;
}
void main()
{
ENLED = 0;
EA = 1;
TMOD = 0x01;
ET0 = 1;
TH0 = 0XFC;
TL0 = 0x67;
TR0 = 1;
P2 = 0xF0;
while(1)
{
if(key1 == 0)
{
locals = local(1);
}
else if(key2 == 0)
{
locals = local(2);
}
else if(key3 == 0)
{
locals = local(3);
}
else if(key4 == 0)
{
locals = local(4);
}
}
}
void InterruptTimer0() interrupt 1
{
static unsigned char i = 0;
TH0 = 0xFC;
TL0 = 0x67;
P0 = 0xFF;
switch(i)
{
case 0: ADDR3 = 0;ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;P0 = ledss[locals][i];i++;break;
case 1: ADDR3 = 0;ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;P0 = ledss[locals][i];i++;break;
case 2: ADDR3 = 0;ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;P0 = ledss[locals][i];i++;break;
case 3: ADDR3 = 0;ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;P0 = ledss[locals][i];i++;break;
case 4: ADDR3 = 0;ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;P0 = ledss[locals][i];i++;break;
case 5: ADDR3 = 0;ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;P0 = ledss[locals][i];i++;break;
case 6: ADDR3 = 0;ADDR0 = 0;ADDR1 = 1;ADDR2 = 1;P0 = ledss[locals][i];i++;break;
case 7: ADDR3 = 0;ADDR0 = 1;ADDR1 = 1;ADDR2 = 1;P0 = ledss[locals][i];i++;break;
case 8: ADDR3 = 1;ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;P0 = leds[locals];i++;break;
case 9: ADDR3 = 1;ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;P0 = leds[locals];i=0;break;
default:break;
}
}
从前用过的按键控制,那时感觉思路简单,但随着学习程度加深,复杂的程序用起来就跑飞了,这里以按键对数码管和点阵的控制呈现如下代码,图案没仔细研究(随便抄了一段数组上去),希望小伙伴们闲暇时刻可以看看,有什么问题的话可以提出来,本人现在对此种代码也仍有疑虑。