OpenEdv-开源电子网

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

LCD的ASCII字符取模相关说明

[复制链接]

8

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2014-8-3
在线时间
0 小时
发表于 2014-8-20 15:08:58 | 显示全部楼层 |阅读模式

取模我搞了好久才搞对,由于我是直接跳过了OLED,所以取模时有些问题的,搞了好搞才回头看了看,再继续搞,最终可以了,反正我在论坛里没找到相关的解答,我的问题应该具有代表性,我就分享出来吧。

 首先,OLED有其介绍,先看。

关于LEDASCII字符取模说明:

11608不是说取模时取16*8,也不是说ASCII字符是其一半,要取32*16,就是取16*16。这个我一开始没搞清楚。

2.LED的显示是从左到右的,而我看程序的扫描方式好像是从左到右,从上到下,所以不能显设OLED那样,要逆向,逐行式!

 

好,应该可以了,反正我是这样做的。成功了。

 

下面我说一下我的扩展内容。大家想看就看,因为以上的文字就能解决你的问题了,以下内容与问题无关。

(倒序)

其实今天,我原本是想放大LED显示的字体,于是在想办法.

LCD想缩放,我想到的方法是一是,像放大镜一样放大,二是把画点变成画九点。

一,我好像做不到,想了想,我是用了矢量图那个思想,应该不可行。

二,把画一点变画九点,然后把X++Y++变成X+3,可惜,试了好久,没成功. 在论坛里搜如何放大,全部都说,取模。。。。

还是先学学字符的取模吧,我连取模都没试过,或许学会了取模,懂了原理就可能发现问题了….这个放到后面再搞.

如上,取模我搞好了,我发现我的理论没问题,应该是可行的。我做了以下步骤:

基于FTFLCD实验例程,
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode)

for(t=0;t<size/2;t++)

                       {                

                           if(temp&0x01)POINT_COLOR=colortemp;

                                     else POINT_COLOR=BACK_COLOR;

                                     LCD_DrawPoint(x,y);      

                                               LCD_DrawPoint(x+1,y);  

                                               LCD_DrawPoint(x,y+1);  

                                               LCD_DrawPoint(x+1,y+1);      

                                               LCD_DrawPoint(x-1,y);   

                                               LCD_DrawPoint(x,y-1);   

                                               LCD_DrawPoint(x-1,y-1);        

                                               LCD_DrawPoint(x+1,y-1);       

                                               LCD_DrawPoint(x-1,y+1);       

                                              

                                              

                                     temp>>=1;

                                     x+=3;

                       }

                            x=x0;

                            y+=3;

                   }       

大家可对比一下,我是以九点代替一点,然后增加间距就可以了,完全没问题,但还是失败。

于是,我在LCD_ShowString里增加延时,以发现问题。(别以为我一下子就想到,我走的弯路之多,尽是泪与风景,没表达出来浪费大家时间而已。)

void LCD_ShowString(u16 x,u16 y,const u8 *p)

{        

    while(*p!='\0')

    {      

        if(x>MAX_CHAR_POSX){x=0;y+=16;}

        if(y>MAX_CHAR_POSY){y=x=0;LCD_Clear(WHITE);}

        LCD_ShowChar(x,y,*p,16,0);

        x+=8;

        p++;

                                     delay_ms(1000);

    } 

}

 

果然,一个个地看,我的想法是正确的,是字叠在一起了,于是,增加字与字的距离

   x+=8;改成   x+=24;,除了X距离,还有Y,回到主函数,更改Y的位置,如

LCD_ShowString(30,50,"Mini STM32 ^_^");  

LCD_ShowString(30,100,"2.4'/2.8' TFTLCD TEST");       

就可以正常显示了。

 

 

分享快乐,原子的论坛真是好地方,双赢的利器!

论坛的存在注定原子开发板是新手入门的最佳选择之一。

 

 

 

 

电子技能就是我行走江湖时手中的利剑。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-8-20 19:24:13 | 显示全部楼层
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

5

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2014-7-27
在线时间
1 小时
发表于 2014-8-20 20:33:34 | 显示全部楼层
谢谢分享~!
灯下黑
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-20 20:55:49 | 显示全部楼层
自己动手,学到的就真是你自己的了.
楼主写的不错,谢谢分享.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-2 18:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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