我也来发一个吧。我自己用的LED的驱动程序,Freescale 08 的片子,改一下就可以用到51上。主要大家看一下思路。
使用一个定时中断,并用了一个缓冲。这样做想显示什么都很方便了。而且点用CPU的资源很少。
其实只要加几个函数就可以显示数字,字符,字符串都可以。
#define LEDNUM 8
uhar uLedBuf[LEDNUM];
void InitLed(void)
{
memset(uLedBuf,' ',LEDNUM);
T1MOD = 0x01000;
}
void interrupt 7 LedDrv(void) //10ms
{
static uchar i = 0;
static uchar bBit = 0x01;
if(i >= LEDNUM){
i = 0;
bBit = 0x01;
}
PTC = 0;
PTD = uLenBuf[i];
PTC = bBit;
bBit <<= 1;
i++;
T1SC_TOF = 0; //清中断标志
}
void Dis(uchar uBit, char Ch)
{
if(uBit >= LEDNUM)
return;
uLedBuf[uBit] = Ch;
}
void DisNum(uint n)
{
sprintf(uLedBuf,"%d",n);
return;
}