void VFD_Draw_Num(unsigned char c, unsigned char position) { int dignum; if(position < 1 || position > 4) { dprintk(2, "num position error! %d\n", position); return; } if(c > 9) { dprintk(2, "unknown num!\n"); return; } dignum =10 - position / 3; if(position % 2 == 1) { if(NumLib[c][1] & 0x01) VFD_Seg_Dig_Seg(dignum, SEGNUM1, VfdSegAddr[dignum].CurrValue1 | 0x80); else VFD_Seg_Dig_Seg(dignum, SEGNUM1, VfdSegAddr[dignum].CurrValue1 & 0x7F); VfdSegAddr[dignum].CurrValue2 = VfdSegAddr[dignum].CurrValue2 & 0x40;//sz VFD_Seg_Dig_Seg(dignum, SEGNUM2, (NumLib[c][1] >> 1) | VfdSegAddr[dignum].CurrValue2); } else if(position % 2 == 0)
void VFD_Clear_All(void) { int i; for(i = 0; i < 13; i++) { VFD_Seg_Dig_Seg(i + 1,SEGNUM1,0x00); VfdSegAddr[i + 1].CurrValue1 = 0x00; VFD_Seg_Dig_Seg(i + 1,SEGNUM2,0x00); VfdSegAddr[i + 1].CurrValue2 = 0; } sec_0 = 0; }
void VFD_Draw_ASCII_Char(char c, unsigned char position) { if(position < 1 || position > 8) { dprintk(2, "char position error! %d\n", position); return; } if(c >= 65 && c <= 95) c = c - 65; else if(c >= 97 && c <= 122) c = c - 97; else if(c >= 42 && c <= 57) c = c - 11; else { dprintk(2, "unknown char!\n"); return; } VFD_Seg_Dig_Seg(position, SEGNUM1, ASCII[(unsigned char)c][0]); VFD_Seg_Dig_Seg(position, SEGNUM2, ASCII[(unsigned char)c][1]); VFD_Show_Content(); }