|
发表于 2006-4-19 08:58:37
|
显示全部楼层
Gorgon Meducer 傻孩子 ,辛苦了!
阁下算是给大家深入浅出地讲了在液晶开发的方方面面,从液晶驱动到GUI用户界面,从汉字,字符到菜单结构,这些正是大家在玩液晶的时候所急需补充的养分。能把自己肚里的知识合盘托出,的确是一种无私奉献的精神!
开发液晶需要这样几步
1:调通液晶驱动程序,可以显示基本点线笔画。
2; 定义好字符,汉字字模结构,菜单结构。
3:将自定义字库装入flah,ram。
允许我打断一下,请教 Gorgon Meducer 阁下,
"typedef struct // 汉字字模显示数据结构
{
char Index[2]; //两个 字节存放一个汉字
char Msk[12][2];//存放点阵信息
}typFNT_GB12;
---------------------------------
从这个结构体来看,要想把你的这个结构体写入flash,只要在
typeFNT_GB12定义的变量定义前加一个const就可以了
比方说
const typeFNT_GB12 DIC[65535];
系统会自动把字库刷进代码段。不过,这位兄弟的存储方法比较占空间哈…… "
阁下肯定有这方面的经验,在avr gcc中
const typeFNT_GB12 DIC[65535]; 好像不能将DIC【65535】装入flash吧,
const typeFNT_GB12 DIC[65535] PROGMEM; 这样才对,但是我这样做了,发现系统并没有将数组正确的装入flash,代码如下:
这是头文件
// hzku.h
//
#ifndef __HZKU_H
#define __HZKU_H
#include "includes.h"
#include "avr/pgmspace.h" // 使用flash程序区
typedef struct // 汉字字模显示数据结构
{
uchar Index[2]; // 两个 字节存放一个汉字
uchar Msk[24]; // 存放点阵信息
}typFNT_GB12;
extern const typFNT_GB12 GB_12[8] PROGMEM;
#endif //__HZKU_H
在头文件中声明GB_12[8]为PROGMEM,然后在源文件中赋值如下
源文件
#include "includes.h"
const typFNT_GB12 GB_12[8] PROGMEM =
{
"进",
0x42,0x40,
0x22,0x40,
0x22,0x40,
0x0F,0xF0,
0xE2,0x40,
0x22,0x40,
0x2F,0xF0,
0x22,0x40,
0x24,0x40,
0x28,0x40,
0x50,0x00,
0x8F,0xF0,
"入",
0x18,0x00,
0x04,0x00,
0x04,0x00,
0x04,0x00,
0x0A,0x00,
0x0A,0x00,
0x09,0x00,
0x11,0x00,
0x10,0x80,
0x20,0x40,
0xC0,0x30,
0x00,0x00,
"系",
0x01,0xE0,
0x7E,0x00,
0x04,0x00,
0x08,0x80,
0x3F,0x00,
0x04,0x80,
0x08,0x40,
0x3F,0xE0,
0x02,0x00,
0x22,0x40,
0x42,0x20,
0x06,0x00,
"统",
0x21,0x00,
0x20,0x80,
0x47,0xF0,
0x51,0x00,
0xF2,0x20,
0x27,0xF0,
0x42,0x80,
0xF2,0x80,
0x02,0x80,
0x1A,0x90,
0xE4,0x90,
0x48,0x70,
......
......
}
如此这样可以编译,但是调试时候发现, 通过观察变量,GB_12[8]并没有被正确赋值,请教Gorgon Meducer 及各位有过将汉字信息写入avr flash经验的高手,应该如何正确写入呢??????????? |
|