金牌会员
 
- 积分
- 1159
- 金钱
- 1159
- 注册时间
- 2018-5-30
- 在线时间
- 151 小时
|
本人STM32新手,有点51和AVR基础,网上购买了战舰V3学习板,才开始看资料和视频学习。
例程中只有1206、1608、2412字库,但字太小,自己做了6432字库,显示后感觉还有点小,远处看不清,要做12864字库,又太占内存,想到用6432字库来显示12864点阵。
在原程序上做点小修改,以6432字库中一个点显示4个点,这样就做到了用6432字库显示12864点阵字。
当然也可以另编写一段程序,就没那么多的判断。
//在指定位置显示一个字符
//x,y:起始坐标
//num:要显示的字符:" "--->"~"
//size:字体大小 12/16/24/64
//mode:叠加方式(1)还是非叠加方式(0)
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)
{
u8 temp,t1;
u16 y0=y,t;
u16 csize=(size/8+((size%8)?1:0))*(size/2); //得到字体一个字符对应点阵集所占的字节数
num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)
if(size==128) csize /= 4;
for(t=0;t<csize;t++)
{
if(size==12)temp=asc2_1206[num][t]; //调用1206字体
else if(size==16)temp=asc2_1608[num][t]; //调用1608字体
else if(size==24)temp=asc2_2412[num][t]; //调用2412字体
else if(size==64)temp=asc2_6432[num][t]; //调用6432字体
else if(size==128)temp=asc2_6432[num][t]; //调用6432字体
else return; //没有的字库
if(size == 128) { //128点字库用64字库扩展
for(t1=0;t1<8;t1++) {
if(temp&0x80) {
LCD_Fast_DrawPoint(x,y,POINT_COLOR);
LCD_Fast_DrawPoint(x,y+1,POINT_COLOR);
LCD_Fast_DrawPoint(x+1,y,POINT_COLOR);
LCD_Fast_DrawPoint(x+1,y+1,POINT_COLOR);
}
else if(mode==0) {
LCD_Fast_DrawPoint(x,y,BACK_COLOR);
LCD_Fast_DrawPoint(x,y+1,BACK_COLOR);
LCD_Fast_DrawPoint(x+1,y,BACK_COLOR);
LCD_Fast_DrawPoint(x+1,y+1,BACK_COLOR);
}
temp<<=1;
y++;
y++;
if(y>=lcddev.height)return; //超区域了
if((y-y0)==size)
{
y=y0;
x++;
x++;
if(x>=lcddev.width)return; //超区域了
break;
}
}
}
else {
for(t1=0;t1<8;t1++)
{
if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
else if(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);
temp<<=1;
y++;
if(y>=lcddev.height)return; //超区域了
if((y-y0)==size)
{
y=y0;
x++;
if(x>=lcddev.width)return; //超区域了
break;
}
}
}
}
}
由于4.3寸屏分辨率较高,显示看不出太明显的锯齿。
|
|