📄 lcd12864.lst
字号:
182 2 {
183 3 pData = &nAsciiDot[(c1 - 0x20) * 16];
184 3 LCDSetPos(Page * 2, Col);
185 3 for (i = 0; i < 8; i++)
186 3 {
187 4 temp = *pData++;
188 4 temp = (Mod == 1) ? ~temp : temp;
189 4 LCDSendData(temp);
190 4 }
191 3 LCDSetPos(Page * 2 + 1, Col);
192 3 for (i = 0; i< 8; i++)
193 3 {
194 4 temp = *pData++;
195 4 temp = (Mod == 1) ? ~temp : temp;
196 4 LCDSendData(temp);
197 4 }
198 3 Col = Col + 8;
199 3 }
200 2 }
201 1 }
202
203 uint8 LCDPrintf(uint8 Page, uint8 Col, uint8 Mod, uint8 *pFmt, ...)
204 {
205 1 uint8 c1,c2,i,temp;
206 1 uint8 *pData;
207 1 uint8 uLen;
208 1 uint8 buf[64];
209 1 uint8 *pFmtBuf ;
210 1 va_list arg_ptr;
211 1 pFmtBuf = buf;
212 1
213 1 va_start(arg_ptr, pFmt);
214 1 uLen = (uint8)vsprintf(pFmtBuf, pFmt, arg_ptr);
215 1 va_end(arg_ptr);
216 1 LCDSetPos(Page, Col);
217 1 // 取出一个字符
218 1 while(*pFmtBuf != '\0')
219 1 {
220 2 c1 = *pFmtBuf++;
221 2 if(c1 < 0x80) // 如果是ASCII码
222 2 {
223 3 if (c1 < 0x20) // 如果是转意字符
224 3 {
225 4 switch (c1)
226 4 {
227 5 case '\n':
228 5 {
229 6 Page = Page + 1;
230 6 Col = 0;
231 6 break;
232 6 }
233 5 case '\t':
234 5 case '\b':
235 5 default: ;
236 5 }
237 4 }
238 3 else // 如果是一般字符
239 3 {
240 4 // 要显示的字在屏的边界
C51 COMPILER V8.02 LCD12864 07/09/2008 11:10:59 PAGE 5
241 4 if (Col > 128 - 8)
242 4 {
243 5 Page = Page + 1;
244 5 Col = 0;
245 5 }
246 4 pData = &nAsciiDot[(c1 - 0x20) * 16];
247 4 LCDSetPos(Page * 2, Col);
248 4 for (i = 0; i < 8; i++)
249 4 {
250 5 temp = *pData++;
251 5 temp = (Mod == 1) ? ~temp : temp;
252 5 LCDSendData(temp);
253 5 }
254 4 LCDSetPos(Page * 2 + 1, Col);
255 4 for (i = 0; i< 8; i++)
256 4 {
257 5 temp = *pData++;
258 5 temp = (Mod == 1) ? ~temp : temp;
259 5 LCDSendData(temp);
260 5 }
261 4 Col = Col + 8;
262 4 }
263 3 }
264 2 // 如果是汉字
265 2 else
266 2 {
267 3 // 再取出一个字
268 3 c2 = *pFmtBuf++;
269 3 // 在字模表中找到字模的首地址
270 3 for(i = 0; i < sizeof(GB_16)/sizeof(GB_16[0]); i++)
271 3 {
272 4 if (c1 == GB_16[i].Index[0] && c2 == GB_16[i].Index[1])
273 4 {
274 5 pData = &GB_16[i].Msk[0];
275 5 break;
276 5 }
277 4 }
278 3 // 要显示的字在屏的边界
279 3 if (Col > 128 - 16)
280 3 {
281 4 Page = Page + 1;
282 4 Col = 0;
283 4 }
284 3 // 在中线上,进行处理
285 3 if (Col == 64 - 8)
286 3 {
287 4 LCDSetPos(Page * 2, 64 - 8);
288 4 for(i = 0; i < 8; i++)
289 4 {
290 5 temp = *pData++;
291 5 temp = (Mod == 1) ? ~temp : temp;
292 5 LCDSendData(temp);
293 5 }
294 4 LCDSetPos(Page * 2, 64);
295 4 for(i = 0; i < 8; i++)
296 4 {
297 5 temp = *pData++;
298 5 temp = (Mod == 1) ? ~temp : temp;
299 5 LCDSendData(temp);
300 5 }
301 4 LCDSetPos(Page * 2 + 1, 64 - 8);
302 4 for(i = 0; i < 8; i++)
C51 COMPILER V8.02 LCD12864 07/09/2008 11:10:59 PAGE 6
303 4 {
304 5 temp = *pData++;
305 5 temp = (Mod == 1) ? ~temp : temp;
306 5 LCDSendData(temp);
307 5 }
308 4 LCDSetPos(Page * 2 + 1, 64);
309 4 for(i = 0; i < 8; i++)
310 4 {
311 5 temp = *pData++;
312 5 temp = (Mod == 1) ? ~temp : temp;
313 5 LCDSendData(temp);
314 5 }
315 4 }
316 3 // 不在中线上,直接显示
317 3 else
318 3 {
319 4 LCDSetPos(Page * 2, Col);
320 4 for(i = 0; i < 16; i++)
321 4 {
322 5 temp = *pData++;
323 5 temp = (Mod == 1) ? ~temp : temp;
324 5 LCDSendData(temp);
325 5 }
326 4 LCDSetPos(Page * 2 + 1, Col);
327 4 for(i = 0; i < 16; i++)
328 4 {
329 5 temp = *pData++;
330 5 temp = (Mod == 1) ? ~temp : temp;
331 5 LCDSendData(temp);
332 5 }
333 4 }
334 3 Col = Col + 16;
335 3 }
336 2 }
337 1 return uLen;
338 1 }
339
340 void LCDDispGraph(uint8 *pData)
341 {
342 1 uint8 i,j;
343 1 for (j=0; j<8; j++)
344 1 {
345 2 LCDSetPos(0,j);
346 2 for(i = 0; i<64; i++)
347 2 {
348 3 LCDSendData(*pData++);
349 3 }
350 2 LCDSetPos(64,j);
351 2 for(i = 0; i<64; i++)
352 2 {
353 3 LCDSendData(*pData++);
354 3 }
355 2 }
356 1 }
357
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1863 ----
CONSTANT SIZE = 2182 ----
XDATA SIZE = ---- 153
PDATA SIZE = ---- ----
C51 COMPILER V8.02 LCD12864 07/09/2008 11:10:59 PAGE 7
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -