想要进行一个数组的输出显示:arr[11] = {-3, -15, 2, 64, 487, 41, -888, 654, 9, 10};
共阴极数码管,段码转换函数如下
void SMG_Trans(unsigned char *SMG_String, unsigned char *SMG_Buf)
{
unsigned char temp;
unsigned char i,j=0;
for(i=0;i<6;i++,j++)
{
switch(SMG_String[j])
{
case '0': temp = 0x3f; break;
case '1': temp = 0x06; break;
case '2': temp = 0x5b; break;
case '3': temp = 0x4f; break;
case '4': temp = 0x66; break;
case '5': temp = 0x6d; break;
case '6': temp = 0x7d; break;
case '7': temp = 0x07; break;
case '8': temp = 0x7f; break;
case '9': temp = 0x6f; break;
case '-': temp = 0x40; break;
case ' ': temp = 0x00; break;
default: temp = 0x31;
}
SMG_Buf[i] = temp;
}
}
函数调用过程中,switch语句没有出现为default的情况,说明段码转换后,在SMG_Buf中的段码应该是正常的。
数码管显示函数如下:
void SMG_Disp(unsigned char *SMG_Buf, unsigned char pos)
{
P2 = (P2 & 0x3f) | 0x80;
P0 = ~(0x01 << pos);
P2 &= 0x3f;
P2 = (P2 & 0x3f) | 0x40;
P0 = 0x00;
P2 &= 0x3f;
P2 = (P2 & 0x3f) | 0x40;
P0 = SMG_Buf[pos];
P2 &= 0x3f;
}
从Debug来看P0口也能输出像 ‘-’ 对应的段码 0x40 之类的,但像 ‘-’ 、‘1’、‘3’ 这些特定的符号和数字,最后数码管就是不会显示。