OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2804|回复: 0

新手,6432字库显示12864点阵小程序

[复制链接]

7

主题

59

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1159
金钱
1159
注册时间
2018-5-30
在线时间
151 小时
发表于 2018-6-6 16:02:02 | 显示全部楼层 |阅读模式
本人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寸屏分辨率较高,显示看不出太明显的锯齿。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-30 14:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表