//起因是为了做LCD汉字显示!去了个模如下!
// ------------------ 汉字字模的数据结构定义 ------------------------ //
typedef struct typFNT_GB16 // 汉字字模数据结构
{
signed char Index[2]; // 汉字内码索引
char Msk[32]; // 点阵码数据
};
/////////////////////////////////////////////////////////////////////////
// 汉字字模表 //
// 汉字库: 宋体16.dot,横向取模左高位,数据排列:从左到右从上到下 //
/////////////////////////////////////////////////////////////////////////
struct typFNT_GB16 code GB_16[] = // 数据表
{
"液", 0x00,0x80,0x40,0x44,0x37,0xFE,0x10,0x20,
0x81,0x20,0x61,0x3C,0x22,0x44,0x0A,0x64,
0x16,0x98,0x2B,0x48,0xE2,0x50,0x22,0x20,
0x22,0x50,0x22,0x8E,0x23,0x04,0x22,0x00,
"晶", 0x0F,0xE0,0x08,0x20,0x08,0x20,0x0F,0xE0,
0x08,0x20,0x08,0x20,0x0F,0xE0,0x08,0x24,
0x7E,0xFE,0x42,0x84,0x42,0x84,0x7E,0xFC,
0x42,0x84,0x42,0x84,0x7E,0xFC,0x42,0x84
};
// 汉字表:
// 液晶
//它定义了一个结构体,而却 GB_16[] 这个结构体数组在不同的.c文件中需要被调用!
//所以要要声明外部结构体。在网上看了下大概方法是建一个XX.C和XX.H文件,文件内容大概如下:
///xx.h
//typedef struct typFNT_GB16 // 汉字字模数据结构
//{
// signed char Index[2]; // 汉字内码索引
// char Msk[32]; // 点阵码数据
//};
//extern typFNT_GB16 code GB_16[] ;
//xx.c
#include "xx.h"
struct typFNT_GB16 code GB_16[] = // 数据表
{
"液", 0x00,0x80,0x40,0x44,0x37,0xFE,0x10,0x20,
0x81,0x20,0x61,0x3C,0x22,0x44,0x0A,0x64,
0x16,0x98,0x2B,0x48,0xE2,0x50,0x22,0x20,
0x22,0x50,0x22,0x8E,0x23,0x04,0x22,0x00,
"晶", 0x0F,0xE0,0x08,0x20,0x08,0x20,0x0F,0xE0,
0x08,0x20,0x08,0x20,0x0F,0xE0,0x08,0x24,
0x7E,0xFE,0x42,0x84,0x42,0x84,0x7E,0xFC,
0x42,0x84,0x42,0x84,0x7E,0xFC,0x42,0x84
};
////////////////////////////////////////////////////////
网上都是这样说的当我自己也是了一下,但是不行代码如下
#ifndef __LCD_H
#define __LCD_H
struct typFNT_GB16 // 汉字字模数据结构
{
signed char Index[2]; // 汉字内码索引
char Msk[32]; // 点阵码数据
};
extern typFNT_GB16 yy[];
#endif
///////////////////////////////////////////////////////////
#include "lcd.h"
struct typFNT_GB16 GB_16[] = // 数据表
{
"液", 0x00,0x80,0x40,0x44,0x37,0xFE,0x10,0x20,
0x81,0x20,0x61,0x3C,0x22,0x44,0x0A,0x64,
0x16,0x98,0x2B,0x48,0xE2,0x50,0x22,0x20,
0x22,0x50,0x22,0x8E,0x23,0x04,0x22,0x00,
"晶", 0x0F,0xE0,0x08,0x20,0x08,0x20,0x0F,0xE0,
0x08,0x20,0x08,0x20,0x0F,0xE0,0x08,0x24,
0x7E,0xFE,0x42,0x84,0x42,0x84,0x7E,0xFC,
0x42,0x84,0x42,0x84,0x7E,0xFC,0x42,0x84
};
/////////////////////////////////////////////////////////////////////////
编译的时候报错,指示在 extern typFNT_GB16 yy[]; 地方出错!
..\HARDWARE\LCD\lcd.h(10): error: #20: identifier "typFNT_GB16" is undefined
说是没有找到这个结构体类型!我就奇怪了,
struct typFNT_GB16 // 汉字字模数据结构
{
signed char Index[2]; // 汉字内码索引
char Msk[32]; // 点阵码数据
};
这个不就是他的类型么!不懂了,据网上说:
对于声明外部构造类型(结构体,共用体)变量,要注意两点,这两点也是和声明外部基本类型变量的区别。
一、声明外部构造类型变量时,该文件中必须要有构造类型的定义实体,否则会报错。
二、声明外部构造类型变量时,不能省略变量类型,否则也会报错。(声明外部基本类型变量时,却可以省略变量类型)。
我好想也没有出错吧,找了一下午到不到是哪里错了!不知道是什么原因!
大家一起来看看吧!
|