#define uchar unsigned char #define uint unsigned int
uchar code BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB}; //位驱动码 uchar code
DispTab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF}; //字形码
uchar DispBuf[6]; //显示缓冲区 void Timer1() interrupt 3 { uchar tmp;
uchar Count; //计数器,显示程序通过它得知现正显示哪个数码管 TH1=(65536-3000)/256;
TL1=(65536-3000)%256; //重置初值 tmp=BitTab[Count]; //取位值 P2=P2|0xfc; //P2与11111100B相或 P2=P2&tmp; //P2与取出的位值相与 tmp=DispBuf[Count];//取出待显示的数 tmp=DispTab[tmp]; //取字形码 P0=tmp; Count++; if(Count==6) Count=0; }
void main() { uint tmp; P1=0xff; P0=0xff;
TMOD=0x15; //定时器0工作于计数方式1,定时器1工作于定时方式1 TH1=(65536-3000)/256;
TL1=(65536-3000)%256; //定时时间为3000个周期 TR0=1; //计数器0开始运行 TR1=1; EA=1; ET1=1; for(;;)
{ tmp=TL0|(TH0<<8); //取T0中的数值 DispBuf[5]=tmp%10; tmp/=10;
DispBuf[4]=tmp%10; tmp/=10;
DispBuf[3]=tmp%10; tmp/=10;
DispBuf[2]=tmp%10; DispBuf[1]=tmp/10;
DispBuf[0]=0; }}
因篇幅问题不能全部显示,请点此查看更多更全内容