通用数码LED显示模块
移植到 nu-lb-nuc140
struct DigitTube{
unsigned char aDispBuffer[8]; //显示缓冲区开始指针
};
aDispBuffer数组每个字节 对应一个数码管
DigitTest_Loop 负责 把数组aDispBuffer[] 每个字节,填入对应的 数字
关键函数 解析:
//-------------------------------------------------------------
//循环
//演示:0000 0000计数到FFFF FFFF,每0.3秒加1
//输出结果存放在OutBuffer[8]中
//20ms进入一次
//-------------------------------------------------------------
void DigitTest_Loop(void)
{
unsigned char i;
if( ++sInDigitTest.mCount > (300/20) ){
sInDigitTest.mCount = 0;
i = 0;
do{
if( i>7 )break; // 到达8位数字
if( sDigitTube.aDispBuffer[i] == 0x09 ){
sDigitTube.aDispBuffer[i] = 0;
}
else {
sDigitTube.aDispBuffer[i]++;
}
}
while( sDigitTube.aDispBuffer[i++] == 0);
}
}
其中的i =7 表示 8位数码管 ,计数到达8位整数的时候
aDispBuffer[0] ----- 个位数字 ----- 一个数码管位
aDispBuffer[1] ----- 十位数字 ----- 一个数码管位
aDispBuffer[2] ----- 百位数字 ----- 一个数码管位
aDispBuffer[3] ----- 千位数字 ----- 一个数码管位
需要注意的地方: 需要加上__packed ( 下面的参考代码中没有加上)
__packed struct QueueBuffer
{
unsigned char *aBufferStart; //缓冲区起始点
unsigned char *aBufferEnd; //缓冲区结束点
unsigned char *pIn; //写指针
unsigned char *pOut; //读指针
unsigned char mCount; //缓冲区数据个数
};