🚗 LED 3位数点阵显示工程:数字布局调整为 [2空+7亮+1空]x3 + 左右各1列边界(附模拟器/C验证)
This commit is contained in:
@@ -0,0 +1,276 @@
|
||||
|
||||
|
||||
const unsigned char Code_Number_16_12[17][32]={ //16点阵高,12点阵宽
|
||||
{0x00, 0x00,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x00, 0x00}, //0
|
||||
{0x00, 0x00,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x00, 0x00}, //1
|
||||
{0x00, 0x00,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x30, 0x00,
|
||||
0x30, 0x00,
|
||||
0x30, 0x00,
|
||||
0x30, 0x00,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x00, 0x00}, //2
|
||||
{0x00, 0x00,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x00, 0x00}, //3
|
||||
{0x00, 0x00,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x00, 0x00}, //4
|
||||
{0x00, 0x00,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x30, 0x00,
|
||||
0x30, 0x00,
|
||||
0x30, 0x00,
|
||||
0x30, 0x00,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x00, 0x00}, //5
|
||||
{0x00, 0x00,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x30, 0x00,
|
||||
0x30, 0x00,
|
||||
0x30, 0x00,
|
||||
0x30, 0x00,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x00, 0x00}, //6
|
||||
{0x00, 0x00,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x00, 0x00}, //7
|
||||
{0x00, 0x00,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x00, 0x00}, //8
|
||||
{0x00, 0x00,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x31, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x01, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x3F, 0x02,
|
||||
0x00, 0x00}, //9
|
||||
{0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00
|
||||
}, //空格
|
||||
};
|
||||
|
||||
|
||||
|
||||
void read_code(void)
|
||||
{
|
||||
static uint16_t roll;
|
||||
uint8_t i,j;
|
||||
uint8_t cc,cd;
|
||||
static uint16_t ROW_8BIT = 0;
|
||||
static uint8_t code12_ram[48][16];
|
||||
uint8_t move_reg1 = 0;
|
||||
uint8_t move_reg2 = 0;
|
||||
|
||||
ROW_8BIT = 0;
|
||||
if(Screen.Uart.First_Receive_Data)
|
||||
{
|
||||
if(Screen.Set.High==16 || Screen.DisplayMode.Work_Mode==2)
|
||||
{
|
||||
if(Screen.Para.Data_LEN%(Screen.Set.Width/8))
|
||||
{
|
||||
Screen.Para.Num = (Screen.Para.Data_LEN/(Screen.Set.Width/8))+1; //
|
||||
}
|
||||
else
|
||||
Screen.Para.Num = Screen.Para.Data_LEN/(Screen.Set.Width/8);
|
||||
}
|
||||
else
|
||||
{
|
||||
if((Screen.Para.Data_LEN)%(Screen.Set.Width/16))
|
||||
{
|
||||
Screen.Para.Num = (Screen.Para.Data_LEN/(Screen.Set.Width/16))+1; //
|
||||
}
|
||||
else
|
||||
Screen.Para.Num = Screen.Para.Data_LEN/(Screen.Set.Width/16);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Screen.Para.Num = 1;
|
||||
}
|
||||
if(Screen.Para.Num == 1)
|
||||
{
|
||||
Screen.Para.Single_Line_Direct_Display_Flag = 0;
|
||||
}
|
||||
|
||||
|
||||
if(!Screen.Uart.First_Receive_Data)
|
||||
{
|
||||
for(roll=0;roll<Screen.Para.Data_LEN;roll++)
|
||||
{
|
||||
cc = Display_data[roll];
|
||||
for(i=0;i<16;i++)
|
||||
{
|
||||
if(cc==0x20) //空格
|
||||
CodeRAM[roll][i] = Code_Number_16[16][i];
|
||||
else
|
||||
CodeRAM[roll][i] = Code_Number_16[cc-0X30][i];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(roll=0;roll<4;roll++)
|
||||
{
|
||||
cc = Display_data[32- Screen.Uart.Receive_ID_Number*4+roll];
|
||||
|
||||
for(i=0;i<16;i++)
|
||||
{
|
||||
if(cc==0x20) //空格
|
||||
{
|
||||
code12_ram[roll*2][i]=Code_Number_16_12[10][i*2];
|
||||
code12_ram[roll*2+1][i]=Code_Number_16_12[10][i*2+1];
|
||||
}
|
||||
else
|
||||
{
|
||||
code12_ram[roll*2][i]=Code_Number_16_12[cc-0X30][i*2] ;
|
||||
code12_ram[roll*2+1][i]=Code_Number_16_12[cc-0X30][i*2+1] << 6;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(i=0;i<16;i++)
|
||||
{
|
||||
move_reg1 = code12_ram[5][i];
|
||||
code12_ram[4][i]=(code12_ram[4][i]<<1) | (move_reg1>>7);
|
||||
code12_ram[5][i]=code12_ram[5][i]<<1; //第二个数左移一位
|
||||
|
||||
move_reg1 = code12_ram[4][i];
|
||||
code12_ram[3][i]=code12_ram[3][i] | (move_reg1>>4);
|
||||
|
||||
move_reg1 = code12_ram[4][i];
|
||||
move_reg2 = code12_ram[5][i];
|
||||
code12_ram[4][i]= move_reg1<<4 | move_reg2>>4;
|
||||
|
||||
move_reg1 = code12_ram[6][i];
|
||||
code12_ram[4][i] |= move_reg1>>6;
|
||||
move_reg1 = code12_ram[6][i];
|
||||
code12_ram[5][i] = (move_reg1<<2) | (code12_ram[7][i]>>6);
|
||||
}
|
||||
|
||||
// TODO: 新的移位要求 LED最左边和最右边的一列不亮;每个数字 左边有两列不亮,右侧一列不亮,也就是说 每个数字单元有10个点阵宽,左侧有两列不亮,右侧有一列不亮。
|
||||
|
||||
memcpy(&CodeRAM[32- Screen.Uart.Receive_ID_Number*4][0],&code12_ram[2][0],64);
|
||||
}
|
||||
memcpy(CodeRAM_Display,CodeRAM,sizeof(CodeRAM));
|
||||
memcpy(CodeRAM2_Display,CodeRAM2,sizeof(CodeRAM2));
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user