通过调用GB2312字库在LCD上显示22号汉字,但是22号字不能被八整除,该怎么解决?
1.插值算法:可以使用插值算法对22号字的像素进行处理,以填充缺失的像素。常用的插值算法包括双线性插值、双立方插值等。
2.切割算法:可以将22号字切割成多个小块,然后将它们分别显示在LCD上。这种方法虽然可以解决像素显示不整齐的问题,但是可能会导致显示效果的分割线不自然,因此需要根据具体情况进行调整。
3.放大算法:可以对22号字进行放大并增加像素的数量,使其能够被8整除。然后再将处理后的字体显示在LCD上。
在实际应用中,可以根据具体情况选择适合的方法。如果需要高质量的显示效果,可以使用插值算法或切割算法。如果需要快速简单的实现,可以使用放大算法。
由于LCD-12864的点阵点亮是八位DB0~DB7一次性操作一个page,代表一次只能八位一起操作,无法根据某一点的line,column点亮一个点,这里采用了位与或的思想,即根据某一点的line算出此坐标点对应的page中所在的位,后读取这点所在整列的数据与此位进行位或,即可在不改变原始数据的情况下点亮此点,熄灭相似,先对位信息进行取反,后与所在整列的数据与此位进行位与,即可熄灭某一具体点。
// 位转16进制
int bitTo16(uint8 wei){
switch (wei){
case 0:return 0x01;break;
case 1:return 0x02;break;
case 2:return 0x04;break;
case 3:return 0x08;break;
case 4:return 0x10;break;
case 5:return 0x20;break;
case 6:return 0x40;break;
case 7:return 0x80;break;
//default:return 0x00;break;
}
}
// 点亮一个点,行列
void show_p(uint8 screen, uint8 line, uint8 column) {
SelectScreen(screen);
dat = read_LCD_data(line / 8, column);
write_LCD_data(dat | bitTo16(line % 8));
}
// 熄灭一个点,行列
void out_p(uint8 screen, uint8 line, uint8 column) {
SelectScreen(screen);
dat = read_LCD_data(line / 8, column);
write_LCD_data(dat & ~(bitTo16(line % 8)));
}