让点阵led实现0~9的倒计时 (翻页而不是滑动)
#include<reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
unsigned char code image[10][8]=
{
{0xFF,0xE7,0xDB,0xDB,0xDB,0xDB,0xE7,0xFF},
{0xFF,0xE3,0xE7,0xE7,0xE7,0xE7,0xC3,0xFF},
{0xFF,0xE7,0xDB,0xEF,0xF7,0xFB,0xC3,0xFF},
{0xFF,0xE7,0xDB,0xEF,0xF7,0xEF,0xDB,0xE7},
{0xEF,0xE7,0xEB,0xED,0x81,0xEF,0xEF,0xFF},
{0xFF,0xE3,0xFB,0xE3,0xDF,0xDF,0xEB,0xF7},
{0xEF,0xF7,0xFB,0xE3,0xDD,0xDD,0xE3,0xFF},
{0xFF,0xC3,0xDF,0xDF,0xDF,0xDF,0xDF,0xFF},
{0xE7,0xDB,0xBD,0xC3,0xBD,0xDB,0xE7,0xFF},
{0xC1,0xDD,0xDD,0xC1,0xDF,0xDF,0xC1,0xFF},
} ;
void main()
{
ADDR3 = 0;
ENLED = 0;
EA=1;
ET0=1;
TMOD = 0x01;
TH0 = 0xFC;
TL0 = 0x67;
TR0 = 1;
while(1);
}
void InterruptTimer0() interrupt 1
{
static unsigned char i = 0;
static unsigned char j=0;
static unsigned int tmr = 0;
TH0 =0xFC;
TL0 =0x67;
P0 = 0xFF;
switch(j)
{
case 0 : ADDR2=0;ADDR1=0;ADDR0=0;j++;P0=image[i][0];break;
case 1 : ADDR2=0;ADDR1=0;ADDR0=1;j++;P0=image[i][1];break;
case 2 : ADDR2=0;ADDR1=1;ADDR0=0;j++;P0=image[i][2];break;
case 3 : ADDR2=0;ADDR1=1;ADDR0=1;j++;P0=image[i][3];break;
case 4 : ADDR2=1;ADDR1=0;ADDR0=0;j++;P0=image[i][4];break;
case 5 : ADDR2=1;ADDR1=0;ADDR0=1;j++;P0=image[i][5];break;
case 6 : ADDR2=1;ADDR1=1;ADDR0=0;j++;P0=image[i][6];break;
case 7 : ADDR2=1;ADDR1=1;ADDR0=1;j=0;P0=image[i][7];break;
default : break;
}
tmr++;
if(tmr==1000)
{
tmr=0;
i++;
if(i==10)
{
i=0;
}
}
}