🚗 LED 3位数点阵显示工程:数字布局调整为 [2空+7亮+1空]x3 + 左右各1列边界(附模拟器/C验证)
This commit is contained in:
@@ -0,0 +1,275 @@
|
||||
|
||||
|
||||
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];
|
||||
// 注: 原 move_reg1/move_reg2 已随旧移位逻辑移除
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ========== 新布局: 32列 = 1空 | [2空 + 7数字 + 1空]x3 | 1空 ==========
|
||||
// 数字本体(区域内列2-8, 7列) → 全局列 3-9 / 13-19 / 23-29
|
||||
// 左边界1列 + 每数字左2右1空 + 右边界1列, 数字间空隙3列
|
||||
for(i=0;i<16;i++)
|
||||
{
|
||||
uint8_t s2 = code12_ram[2][i]; // 数字1 高字节(区域内列0-7)
|
||||
uint8_t s3 = code12_ram[3][i]; // 数字1 低字节(区域内列8-15)
|
||||
uint8_t s4 = code12_ram[4][i]; // 数字2 高字节
|
||||
uint8_t s5 = code12_ram[5][i]; // 数字2 低字节
|
||||
uint8_t s6 = code12_ram[6][i]; // 数字3 高字节
|
||||
uint8_t s7 = code12_ram[7][i]; // 数字3 低字节
|
||||
|
||||
code12_ram[2][i] = (s2 >> 1) & 0x1F; // 数字1 → 列3-7
|
||||
code12_ram[3][i] = ((s2 & 0x01) << 7) | ((s3 >> 1) & 0x40) // 数字1 → 列8-9
|
||||
| ((s4 >> 3) & 0x07); // 数字2 → 列13-15
|
||||
code12_ram[4][i] = ((s4 & 0x07) << 5) | ((s5 & 0x80) >> 3) // 数字2 → 列16-19
|
||||
| ((s6 >> 5) & 0x01); // 数字3 → 列23
|
||||
code12_ram[5][i] = ((s6 & 0x1F) << 3) | ((s7 & 0x80) >> 5); // 数字3 → 列24-29
|
||||
}
|
||||
|
||||
|
||||
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