📄 b07.lst
字号:
C51 COMPILER V6.02 B07 10/18/2005 09:28:08 PAGE 1
C51 COMPILER V6.02, COMPILATION OF MODULE B07
OBJECT MODULE PLACED IN E:\C51\B07.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE E:\C51\B07.C DB SB OE
stmt level source
1
2 #define PD1 61 /* 122/2 分成左右两半屏(122x32) */
3
4 unsigned char Column;
5 unsigned char Page_ ; /* 页地址寄存器 D1,DO:页地址 */
6 unsigned char Code_ ; /* 字符代码寄存器 */
7
8 unsigned char Command; /* 指令寄存器 */
9 unsigned char LCDData; /* 数据寄存器 */
10
11 #define CWADD1 0xfa00 /* 写指令代码地址(E1) */
12 #define DWADD1 0xfa40 /* 写显示数据地址(E1) */
13 #define CRADD1 0xfa80 /* 读状态字地址(E1) */
14 #define DRADD1 0xfac0 /* 读显示数据地址(E1) */
15
16 #define CWADD2 0xf800 /* 写指令代码地址(E2) */
17 #define DWADD2 0xf840 /* 写显示数进地址(E2) */
18 #define CRADD2 0xf880 /* 读状态字地址(E2) */
19 #define DRADD2 0xf8c0 /* 读显示数据地址(E2) */
20
21 extern unsigned char IN(unsigned int port);
22 extern void OUT(unsigned int port, unsigned char v);
23
24 /* 英文字模库 8x8 点阵 */
25 unsigned char const EETAB[][8]={
26 {0x38,0x44,0x44,0x44,0x44,0x44,0x38,0x00}, /* 0 */
27 {0x10,0x30,0x50,0x10,0x10,0x10,0x7c,0x00}, /* 1 */
28 {0x38,0x44,0x04,0x08,0x10,0x20,0x7c,0x00}, /* 2 */
29 {0x78,0x84,0x04,0x38,0x04,0x84,0x78,0x00}}; /* 3 */
30
31 /* 中文字模库 16x16点阵 */
32 unsigned char const CCTAB[][32] ={
33 {0x00,0x04,0xe4,0x24,0x24,0x64,0xb4,0x2f, /* 南 */
34 0x24,0xa4,0x64,0x24,0x24,0xe6,0x04,0x00,
35 0x00,0x00,0x7f,0x04,0x05,0x05,0x05,0x7f,
36 0x05,0x05,0x05,0x25,0x44,0x3f,0x00,0x00},
37
38 {0x00,0x04,0x04,0xe4,0x24,0x24,0x25,0x26, /* 京 */
39 0x24,0x24,0x24,0xe4,0x06,0x04,0x00,0x00,
40 0x00,0x20,0x10,0x19,0x0D,0x41,0x81,0x7f,
41 0x01,0x01,0x05,0x0d,0x38,0x10,0x00,0x00},
42
43 {0x00,0x80,0x60,0xf8,0x07,0x0a,0x28,0x28, /* 伟 */
44 0x28,0xff,0x28,0x28,0x28,0x28,0x00,0x00,
45 0x01,0x00,0x00,0xfF,0x00,0x01,0x01,0x01,
46 0x01,0xff,0x01,0x21,0x41,0x3f,0x00,0x00},
47
48 {0x08,0x08,0x89,0xce,0x28,0x18,0x02,0x7a, /* 福 */
49 0x4a,0x4a,0x4a,0x4a,0x4a,0x7a,0x02,0x00,
50 0x02,0x01,0x00,0xff,0x01,0x02,0xff,0x49,
51 0x49,0x49,0x7f,0x49,0x49,0x49,0xff,0x00}};
52
53 /* 1.写指令代码子程序(E1) */
54 void WriteCommandE1()
55 {
C51 COMPILER V6.02 B07 10/18/2005 09:28:08 PAGE 2
56 1 while(IN(CRADD1) & 0x80);
57 1 OUT(CWADD1, Command);
58 1 }
59
60 /* 2.写显示数据子程序(E1) */
61 void WriteDataE1()
62 {
63 1 while(IN(CRADD1) & 0x80);
64 1 OUT(DWADD1, LCDData);
65 1 }
66
67 /* 3.读显示数据子程序(E1) */
68 void ReadDataE1()
69 {
70 1 while(IN(CRADD1) & 0x80);
71 1 LCDData = IN(DRADD1);
72 1 }
73
74 /* 4.写指令代码子程序(E2) */
75 void WriteCommandE2()
76 {
77 1 while(IN(CRADD2) & 0x80);
78 1 OUT(CWADD2, Command);
79 1 }
80
81 /* 5.写显示数据子程序(E2) */
82 void WriteDataE2()
83 {
84 1 while(IN(CRADD2) & 0x80);
85 1 OUT(DWADD2, LCDData);
86 1 }
87
88 /* 6.读显示数据子程序(E2) */
89 void ReadDataE2()
90 {
91 1 while(IN(CRADD2) & 0x80);
92 1 LCDData = IN(DRADD2);
93 1 }
94
95 /* 初始化程序 */
96 void Init()
97 {
98 1 Command = 0xe2;
99 1 WriteCommandE1();
100 1 WriteCommandE2();
101 1
102 1 Command = 0xa4;
103 1 WriteCommandE1();
104 1 WriteCommandE2();
105 1
106 1 Command = 0xa9;
107 1 WriteCommandE1();
108 1 WriteCommandE2();
109 1
110 1 Command = 0xa0;
111 1 WriteCommandE1();
112 1 WriteCommandE2();
113 1
114 1 Command = 0xc0;
115 1 WriteCommandE1();
116 1 WriteCommandE2();
117 1
C51 COMPILER V6.02 B07 10/18/2005 09:28:08 PAGE 3
118 1 Command = 0xaf;
119 1 WriteCommandE1();
120 1 WriteCommandE2();
121 1 }
122
123 /* 清屏 */
124 void Clear()
125 {
126 1 unsigned char i,j;
127 1
128 1 i = 0;
129 1 do {
130 2
131 2 Command = (i + 0xb8);/* 页地址设置 */
132 2 WriteCommandE1();
133 2 WriteCommandE2();
134 2
135 2 Command = 0x00; /* 列地址设置为"0" */
136 2 WriteCommandE1();
137 2 WriteCommandE2();
138 2
139 2 j = 0x50; /* 一页清 80个字节 */
140 2 do {
141 3 LCDData = 0x00; /* 显示数据为"0" */
142 3 WriteDataE1();
143 3 WriteDataE2();
144 3 }while(--j !=0); /* 页内字节清零循环 */
145 2
146 2 }while(++i !=4); /* 页地址暂存器加一 */
147 1 /* 显示区清零循环 */
148 1 }
149
150 /* 延时程序 */
151 void Delay()
152 {
153 1 unsigned char i,j;
154 1 i = 20;
155 1 j = 0;
156 1 do{
157 2 do{
158 3 }while(--j !=0);
159 2 }while( --i != 0 );
160 1 }
161
162 /* 中文显示子程序 */
163 void WriteCHN16x16()
164 {
165 1 unsigned char i,j,k;
166 1
167 1 i = 0;
168 1 j = 0;
169 1 while(j<2) {
170 2 Command = ((Page_ + j) & 0x03) | 0xb8; /* 设置页地址 */
171 2 WriteCommandE1();
172 2 WriteCommandE2();
173 2 k = Column; /* 列地址值 */
174 2 while(k < Column + 16){
175 3 if (k < PD1) { /* 为左半屏显示区域(E1) */
176 4 Command = k;
177 4 WriteCommandE1(); /* 设置列地址值 */
178 4 LCDData = CCTAB[Code_][i]; /* 取汉字字模数据 */
179 4 WriteDataE1(); /* 写字模数据 */
C51 COMPILER V6.02 B07 10/18/2005 09:28:08 PAGE 4
180 4 } else{ /* 为右半屏显示区域(E2) */
181 4 Command = k-PD1;
182 4 WriteCommandE2(); /* 设置列地址值 */
183 4 LCDData = CCTAB[Code_][i]; /* 取汉字字模数据 */
184 4 WriteDataE2(); /* 写字模数据 */
185 4 };
186 3
187 3 i++;
188 3 if( ++k >= PD1 * 2) break; /* 列地址是否超出显示范围 */
189 3 } ;
190 2 j++;
191 2 };
192 1 }
193
194 /* 中文显示程序 */
195 void main()
196 {
197 1 Init();
198 1 Clear();
199 1
200 1 Page_ = 0x02;
201 1 Column = 0x00;
202 1 Code_ = 0x00;
203 1 WriteCHN16x16();
204 1
205 1 Page_ = 0x02;
206 1 Column = 0x10;
207 1 Code_ = 0x01;
208 1 WriteCHN16x16();
209 1
210 1 Page_ = 0x02;
211 1 Column = 0x20;
212 1 Code_ = 0x02;
213 1 WriteCHN16x16();
214 1
215 1
216 1 Page_ = 0x02;
217 1 Column = 0x30;
218 1 Code_ = 0x03;
219 1 WriteCHN16x16();
220 1
221 1 while(1);
222 1
223 1 }
*** ERROR C249 IN LINE 223 OF E:\C51\B07.C: 'DATA': SEGMENT TOO LARGE
C51 COMPILATION COMPLETE. 0 WARNING(S), 1 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -