#include "reg51.h" #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,0x8 6,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; DispBuf[4]=tmp%10; tmp/=10; tmp/=10; DispBuf[3]=tmp%10; tmp/=10; DispBuf[2]=tmp%10; DispBuf[1]=tmp/10; DispBuf[0]=0; } }
一个计数器程序,将T0 作为计数器来使用,对外部信号计数,将所计数字 显示在数码管上。
这程序中的这一部分难以理解,请高人指点 { tmp=TL0|(TH0<<8); //取T0 中的数值 DispBuf[5]=tmp%10; DispBuf[4]=tmp%10; tmp/=10; tmp/=10; DispBuf[3]=tmp%10; tmp/=10; DispBuf[2]=tmp%10; DispBuf[1]=tmp/10; DispBuf[0]=0; }
|