|
最近在搞MSP430驱动诺基亚5510LCD,但是通用的字模软件只能取12*16的汉字字模,5510LCD是84*48的,也就是说最多只能显示三行汉字,多余的空间浪费了
上网搜了下解决方法,看到了本论坛的原帖,见:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4022179&bbs_page_no=1&search_mode=4&search_text=wnstony&bbs_id=9999
感觉这种方法不够简洁,将简单的问题复杂化了,于是就自己摸索出一种方法,见下图
(原文件名:图示.gif)
简单的解析下:
现在有A B C D四行汉字,本例每行一个字,多个字也一样
通过一定的算法(关键是移位)将A B C D的字模转化成CN0 CN1 CN2 三个字模,这样就去掉了ABCD字模中的空格,节省了空间
再按常规方法显示CN0 CN1 CN2,实际显示就是四行字了,比较简洁吧,转换的过程与具体的显示细节无关,更与硬件平台无关。
核心代码如下:
char chinese[][24];
char chinese1[][24];
char chinese2[][24];
char a[][24];
char b[][24];
char c[][24];
char d[][24];
void transform(void)
{
char i,n; //n为每行字数
for(n=0;n<7;n++)
{
for(i=0;i<=23;i++)
if(i<=11)
chinese[n]=a[n];
else
chinese[n]=(b[n][i-12]<<4)+a[n];
}
LCD_write_chinese_string(0,0,12,7,0,0);
for(n=0;n<7;n++)
{
for(i=0;i<=23;i++)
if(i<=11)
chinese1[n]=(b[n]>>4)+(b[n][i+12]<<4);
else
chinese1[n]=c[n][i-12];
}
LCD_write_chinese_string1(0,2,12,7,0,0);
for(n=0;n<7;n++)
{
for(i=0;i<=23;i++)
if(i<=11)
chinese2[n]=c[n][i+12]+(d[n]<<4);
else
chinese2[n]=(d[n][i-12]>>4)+(d[n]<<4);
}
LCD_write_chinese_string2(0,4,12,7,0,0);
}
代码需要自己画图列下算法,这样更明了
演示效果如下:
(原文件名:图像0066.jpg)
(原文件名:图像0067.jpg)
再附上整个程序的源代码(MCU:MSP430F2274)
点击此处下载 ourdev_625933DKPMH8.rar(文件大小:254K) (原文件名:5110LCD - 2274 - 四行.rar)
第一次发帖,望大家指教
******************************************************************************************************************
附注:本人学化学专业的,找的工作也是化学相关的,但是一直对电子学兴趣浓厚,平时也爱搞个DIY
怎么平衡这两方面?
****************************************************************************************************************** |
|