📄 gt21l16s2w.lst
字号:
C51 COMPILER V8.08 GT21L16S2W 11/07/2010 01:10:11 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE GT21L16S2W
OBJECT MODULE PLACED IN GT21L16S2W.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE GT21L16S2W.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 sbit CS=P1^0;
3 sbit SCLK=P1^1;
4 sbit SI=P1^2;
5 sbit SO=P1^3;
6 //--------------------------------------------------------------------------------
7 // 仅限GT21L16S2W汉字库芯片使用,版权归上海集通数码科技有限责任公司所有。
8 // 作者:朱和平 时间:2008-12-23 版本:VER1.0
9 //--------------------------------------------------------------------------------
10 //------------------------------------------------------
11 // 在GT21L16S2W芯片中数据的地址
12 //------------------------------------------------------
13 #define ASC0808D2HZ_ADDR ( 0x66c0 ) //7*8 ascii code
14 #define ASC0812M2ZF_ADDR ( 0x66d40 ) //6*12 ascii code
15 #define GBEX0816ZF_ADDR 243648 //8*16 ascii code
16 #define ZF1112B2ZF_ADDR ( 0x3cf80 ) //12*12 12点字符
17 #define HZ1112B2HZ_ADDR ( 0x3cf80+376*24 ) //12*12 12点汉字
18 #define CUTS1516ZF_ADDR 0x00 //16*16 16点字符
19 #define JFLS1516HZ_ADDR 27072 //16*16 16点汉字
20
21 //---------------------------------------------
22 // 保留
23 //--------------------------------------------
24 #define ASCII0507ZF_ADDR 245696
25 #define ARIAL_16B0_ADDR 246464
26 #define ARIAL_12B0_ADDR 422720
27 #define SPAC1616_ADDR 425264
28 #define GB2311ToUnicode_addr (12032)
29 #define UnicodeToGB2311_addr (425328)
30 //------------------------------------------------
31 // 要显示的汉字的类型
32 //------------------------------------------------
33 #define TYPE_8 0 //8 点字符
34 #define TYPE_12 1 //12 点汉字字符
35 #define TYPE_16 2 //16 点汉字字符
36 //-------------------------------------------------
37 // unsigned long GB2312_Addr(unsigned char *ss,unsigned char type)
38 // 函数说明:
39 // 由汉字内码 SS[0] S[1] ......
40 // 计算的在GT23L16S2W中的点阵数据地址
41 // 参数:
42 // ss 汉字GB2312内码指针
43 // type 汉字类型
44 // 返回:
45 // 汉字在芯片中的点阵数据起始地址
46 //--------------------------------------------------
47 unsigned long GB2312_Addr(unsigned char *ss,unsigned char type)
48 {
49 1 unsigned long temp = 0;
50 1 unsigned char c1,c2;//c3,c4;
51 1
52 1 if(ss[0]<0x80) //ascii 半角字符
53 1 {
54 2 if( ss[0] >= ' ' ) //判断是否大于“空格键 ” 0x20
55 2 temp = ss[0] - ' ';
C51 COMPILER V8.08 GT21L16S2W 11/07/2010 01:10:11 PAGE 2
56 2 if( type == TYPE_8 ) temp = temp*8 + ASC0808D2HZ_ADDR; //7*8 ascii code
57 2 else if( type == TYPE_12 ) temp = temp*12 + ASC0812M2ZF_ADDR; //6*12 ascii code
58 2 else if( type == TYPE_16 ) temp = temp*16 + GBEX0816ZF_ADDR; //8*16 ascii code
59 2 }
60 1 else //chinese tab zone
61 1 {
62 2 c1=ss[0];
63 2 c2=ss[1];
64 2 //符号区,全角
65 2 if(c1>=0xA1 && c1 <= 0xAB && c2>=0xa1)
66 2 {
67 3 if( type == TYPE_12 ) //16 点汉字字符
68 3 {
69 4 if( c1>=0xA1 && c1 <= 0xA3 && c2>=0xa1 )//ZF 272 ZONE
70 4 temp = (c1 - 0xA1) * 94 + (c2 - 0xA1);
71 4 else if( c1 == 0xa9 && c2>=0xa1 )//tab 94 zone
72 4 temp = 282 + ( c2 - 0xA1 );
73 4
74 4 return( temp *24 + ZF1112B2ZF_ADDR); //11*12 12点字符
75 4 }
76 3 else
77 3 {
78 4 temp = (c1 - 0xA1) * 94 + (c2 - 0xA1);
79 4 return(temp *32 + CUTS1516ZF_ADDR); //16*16 16点字符
80 4 }
81 3
82 3 }
83 2 //GBK双字节2区 6768
84 2 else if(c1>=0xb0 && c1 <= 0xf7 && c2>=0xa1)
85 2 {
86 3 temp= (c1 - 0xB0) * 94 + (c2 - 0xA1);
87 3 if( type == TYPE_12 )
88 3 temp = temp*24 + HZ1112B2HZ_ADDR;
89 3 else if( type == TYPE_16 )
90 3 temp = temp*32 + JFLS1516HZ_ADDR;
91 3 }
92 2 }
93 1 return temp;
94 1 }
95 //从芯片中addr地址读一个BYTE的数据
96 unsigned char readbyte(unsigned long addr) //read one byte from GT ROM
97 {
98 1 unsigned char i,RT_data=0x03;
99 1 CS=0;
100 1 SI=0;
101 1 for(i=0;i<8;i++) //先写入0x03;
102 1 {
103 2 SI=(bit)(RT_data&0X80);
104 2 SCLK=0;
105 2 SCLK=1;
106 2 RT_data<<=1;
107 2 }
108 1 for(i=0;i<24;i++) //再写三个字节地址
109 1 {
110 2 SI=(bit)(addr&0x80);
111 2 SCLK=0;
112 2 SCLK=1;
113 2 addr<<=1;
114 2 }
115 1 for(i=0;i<8;i++) //读一个字节
116 1 {
117 2 RT_data=0;
C51 COMPILER V8.08 GT21L16S2W 11/07/2010 01:10:11 PAGE 3
118 2 SCLK=1;
119 2 SCLK=0;
120 2 if(SO==1)(RT_data||0X01);
121 2 RT_data<<=1;
122 2 }
123 1 CS=1;
124 1 return (RT_data);
125 1 }
126 //------------------------------------------------
127 // 程序使用例子
128 //-------------------------------------------------
129 void main( void )
130 {
131 1 volatile unsigned char a[2] = { 0xb0,0xa1 }; //16点汉字 “啊” 的GB2312内码。
132 1 volatile unsigned char a_dot[32]; //存储汉字 “啊” 的点阵数据。
133 1 volatile unsigned long a_dot_address;
134 1 volatile unsigned char count;
135 1 a_dot_address = GB2312_Addr(a,TYPE_16); //得到“啊” 点阵数据的起始地址
136 1 for( count = 0; count < 32; count++ ) //得到“啊” 点阵数据
137 1 a_dot[count] = readbyte(a_dot_address+count);
138 1
139 1 // display(x,y,a_dot,TYPE_16); //在坐标(X,Y),显示汉字“啊”
140 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 708 ----
CONSTANT SIZE = 2 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 53
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -