#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Table_OF_Digits[]=
{
0X00,0X3C,0X66,0X42,0X42,0X66,0X3C,0X00,
0X00,0X08,0X38,0X08,0X08,0X08,0X3E,0X00,
0X00,0X3C,0X42,0X04,0X08,0X10,0X7E,0X00,
0X00,0X3C,0X42,0X1C,0X02,0X42,0X3C,0X00,
0X00,0X04,0X0C,0X14,0X24,0X3E,0X04,0X00,
0X00,0X7E,0X40,0X7C,0X02,0X42,0X3C,0X00,
};
uint r=0;
uchar offset=0;
uchar Current_Level=1,Dest_Level=1,x=0;
void main()
{
P3=0X80;
Current_Level=1;
Dest_Level=1;
TMOD=0X01;
TH0=-4000/256;
TL0=-4000%256;
TR0=1;
EA=1;
ET0=1;
while(1);
}
void LED_Screen_Display() interrupt 1
{
uchar i;
if(P1!=0XFF&&Current_Level==Dest_Level)
{
if(P1==0XFE) Dest_Level=5;
if(P1==0XFD) Dest_Level=4;
if(P1==0XFB) Dest_Level=3;
if(P1==0XF7) Dest_Level=2;
if(P1==0XEF) Dest_Level=1;
}
TH0=-4000/256;
TL0=-4000%256;
P3=_crol_(P3,1);
i=Current_Level*8+r+offset;
P0=~Table_OF_Digits[i];
if(Current_Level<Dest_Level)
{
if(++r==8)
{
r=0;
if(++x==4)
{
x=0;
if(++offset==8)
{
offset=0;
Current_Level++;
}
}
}
}
else
if(Current_Level>Dest_Level)
{
if(++r==8)
{
r=0;
if(++x==4)
{
x=0;
if(--offset==-8)
{
offset=0;
Current_Level--;
}
}
}
}
else
{
if(++r==8)
r=0;
}
}
這個程序里面定時器中斷起到什么作用,還有是怎么實現數字顯示的滾動的(包括上升和下降)?求大神指點!!!
|