protuse可以做到的 8*8点阵阳极接P2口,阴极接P1口,用下面的代码就可以实现!
#define uchar unsigned char
void Init_int();
void Init_time();
void display(int yin,int yang);
uchar num_num[10][5]={{0xf0,0xf6,0xf6,0xf6,0xf0}, //0
{0xf7,0xf7,0xf7,0xf7,0xf7}, //1
{0xf0,0xfe,0xf0,0xf7,0xf0}, //2
{0xf0,0xfe,0xf0,0xfe,0xf0}, //3
{0xf6,0xf6,0xf0,0xfe,0xfe}, //4
{0xf0,0xf7,0xf0,0xfe,0xf0}, //5
{0xf0,0xf7,0xf0,0xf6,0xf0}, //6
{0xf0,0xfe,0xfe,0xfe,0xfe}, //7
{0xf0,0xf6,0xf0,0xf6,0xf0}, //8
{0xf0,0xf6,0xf0,0xfe,0xf0}}; //9
uchar num_zero[5]={0xf0,0xf6,0xf6,0xf6,0xf0};
uchar num_one[5]={0xfe,0xfe,0xfe,0xfe,0xfe};
uchar num_two[5]={0xf0,0xfe,0xf0,0xf7,0xf0};
uchar num_three[5]={0xf0,0xfe,0xf0,0xfe,0xf0};
uchar num_fore[5]={0xf6,0xf6,0xf0,0xfe,0xfe};
uchar num_five[5]={0xf0,0xf7,0xf0,0xfe,0xf0};
uchar num_six[5]={0xf0,0xf7,0xf0,0xf6,0xf0};
uchar num_seven[5]={0xf0,0xfe,0xfe,0xfe,0xfe};
uchar num_eight[5]={0xf0,0xf6,0xf0,0xf6,0xf0};
uchar num_nine[5]={0xf0,0xf6,0xf0,0xfe,0xf0};
unsigned int count,i=1,weiyi,timer,shu,n=1;
void main()
{
Init_time();
Init_int();
while(1)
{}
}
void Init_time() //定时器初始化
{
TMOD|=0x01;
TH0=0xff;
TL0=0x10;
TR0=1;
ET0=1;
EA=1;
}
void Init_int() //中断初始化
{
EA=1;
EX0=1;
ET0=1;
}
void time() interrupt 1 //定时器函数
{
TH0=0xfd; //50微秒
TL0=0xa8;
count++;
if(count>8)
{
count=0;
display(i-1,i);
i++;
if(i>5)
i=1;
}
timer++;
if(timer>250)
{
timer=0;
weiyi++;
if(weiyi>10)
{
weiyi=0;
shu++;
if(shu>9)
shu=0;
}
}
}
void display(int yin,int yang) //显示函数
{
P2 = 0x00;
P1 = ~(~num_num[shu][yin]<<weiyi);
if(weiyi<3)
{
P1 = ~(~num_num[shu][yin]>>3-weiyi);
}
else
{
P1 = ~(~num_num[shu][yin]<<weiyi-3);
}
switch(yang)
{
case 0 : P2 = 0x01;break;
case 1 : P2 = 0x02;break;
case 2 : P2 = 0x04;break;
case 3 : P2 = 0x08;break;
case 4 : P2 = 0x10;break;
case 5 : P2 = 0x20;break;
case 6 : P2 = 0x40;break;
case 7 : P2 = 0x80;break;
default : P2 = 0x00; break;
}
} |