📄 lcm_drive.lst
字号:
242 * disp_cx 显示列值(0-15)
243 * dispdata 所要显示的字符(ASCII码)
244 * 注:支持显示字符0-9、A-Z、a-z及空格,字符显示格式为5*7,模为8*8,所以
245 * 屏幕显示为8*16(共8行,每行16个字符)。
246 ***********************************************************************/
247 void LCM_DispChar(uint8 disp_cy, uint8 disp_cx, char dispdata)
248 { uint8 code *pchardata;
249 1 uint8 i;
250 1
251 1 disp_cy = disp_cy&0x07; // 参数过滤
252 1 disp_cx = disp_cx&0x0f;
253 1
254 1 /* 先要找出显示数据的类型,并设置相应的点阵数据表,然后设置指针,以取得对应的点阵数据。 */
255 1 switch(dispdata&0xf0)
256 1 { case 0x20:
257 2 dispdata = (dispdata&0x0f)*5;
258 2 pchardata = &ASCII_TAB20[dispdata];
259 2 break;
260 2
261 2 case 0x30:
262 2 dispdata = (dispdata&0x0f)*5;
263 2 pchardata = &ASCII_TAB30[dispdata];
264 2 break;
265 2
266 2 case 0x40:
267 2 dispdata = (dispdata&0x0f)*5;
268 2 pchardata = &ASCII_TAB40[dispdata];
269 2 break;
270 2
271 2 case 0x50:
272 2 dispdata = (dispdata&0x0f)*5;
273 2 pchardata = &ASCII_TAB50[dispdata];
274 2 break;
275 2
276 2 case 0x60:
277 2 dispdata = (dispdata&0x0f)*5;
278 2 pchardata = &ASCII_TAB60[dispdata];
279 2 break;
280 2
281 2 case 0x70:
282 2 dispdata = (dispdata&0x0f)*5;
283 2 pchardata = &ASCII_TAB70[dispdata];
284 2 break;
285 2
286 2 default:
287 2 pchardata = &ASCII_TAB20[0];
288 2 break;
289 2 } // end of switch(dispdata&0xf0)...
290 1
291 1
292 1 if( (disp_cx&0x08) == 0 ) // 选择液晶控制芯片(即CS1--控制前8个字符,CS2--控制后8个字符)
293 1 { i = disp_cx<<3;
294 2 LCM_Wr1Command(LCM_ADDRSTRX+i); // 设置当前列地址,即列
295 2 LCM_Wr1Command(LCM_ADDRSTRY+disp_cy); // 设置当前页地址,即行
296 2
297 2 for(i=0; i<5; i++);
298 2 LCM_Wr1Data(0x00); // 显示一列空格
299 2 for(i=0; i<5; i++)
300 2 { LCM_Wr1Data(*pchardata); // 发送数据 */
301 3 pchardata++;
302 3 }
303 2 LCM_Wr1Data(0x00);
C51 COMPILER V7.06 LCM_DRIVE 07/10/2007 10:25:57 PAGE 6
304 2 for(i=0; i<5; i++);
305 2 LCM_Wr1Data(0x00);
306 2 }
307 1 else
308 1 { i = (disp_cx&0x07)<<3; // 若Y>7,则选取用CS2并且地址值要先减去8,再乘以8
309 2 LCM_Wr2Command(LCM_ADDRSTRX+i);
310 2 LCM_Wr2Command(LCM_ADDRSTRY+disp_cy); // 设置当前页地址,即行
311 2
312 2 for(i=0; i<5; i++);
313 2 LCM_Wr2Data(0x00); // 显示一列空格
314 2 for(i=0; i<5; i++)
315 2 { LCM_Wr2Data(*pchardata); // 发送数据 */
316 3 pchardata++;
317 3 }
318 2 LCM_Wr2Data(0x00);
319 2 for(i=0; i<5; i++);
320 2 LCM_Wr2Data(0x00);
321 2 }
322 1 }
323
324 /***********************************************************************
325 * 名称:LCM_DispStr()
326 * 功能:字符串显示输出。
327 * 入口参数:disp_cy 显示起始行(0-7)
328 * disp_cx 显示起始列(0-15)
329 * disp_str 字串指针
330 * 出口参数:无
331 * 注:支持显示字符0-9、A-Z、a-z及空格,字符显示格式为5*7,模为8*8,所以屏幕显示
332 * 为8*16(共8行,每行16个字符)。
333 ***********************************************************************/
334 void LCM_DispStr(uint8 disp_cy, uint8 disp_cx, char *disp_str)
335 { while( *disp_str != '\0')
336 1 { disp_cy = disp_cy&0x07; // 参数过滤
337 2 disp_cx = disp_cx&0x0f;
338 2 LCM_DispChar(disp_cy, disp_cx, *disp_str); // 显示字符
339 2
340 2 disp_str++; // 指向下一字符数据
341 2 disp_cx++;
342 2 if(disp_cx>15) disp_cy++; // 指向下一显示行
343 2 }
344 1 }
345
346 /***********************************************************************
347 * 名称:LCM_DispWord()
348 * 功能:汉字显示输出。
349 * 入口参数:disp_cy 显示起始行(0-7)
350 * disp_cx 显示起始列(0-15)
351 * 出口参数:无
352 * 注:支持显示字符0-9、A-Z、a-z及空格,字符显示格式为5*7,模为8*8,所以屏幕显示
353 * 为8*16(共8行,每行16个字符)。
354 ***********************************************************************/
355 uint8 code WORD_TAB1[256] ={ //-- 文字: 上--
356 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,
357 0x40,0x40,0x40,0x40,0x40,0x00,0x00,0x00,
358 0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,
359 0x40,0x40,0x40,0x40,0x40,0x60,0x40,0x00,
360
361 //uint8 code WORD_TAB20[32] ={ //-- 文字: 大--
362 0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,
363 0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
364 0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,
365 0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00,
C51 COMPILER V7.06 LCM_DRIVE 07/10/2007 10:25:57 PAGE 7
366
367 //uint8 code WORD_TAB30[32] ={ //-- 文字: 机--
368 0x08,0x08,0xC8,0xFF,0x48,0x88,0x08,0x00,
369 0xFE,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,
370 0x04,0x03,0x00,0xFF,0x00,0x41,0x30,0x0C,
371 0x03,0x00,0x00,0x00,0x3F,0x40,0x78,0x00,
372
373 //uint8 code WORD_TAB40[32] ={ //-- 文字:自--
374 0x00,0x00,0x00,0xF8,0x48,0x48,0x4C,0x4B,
375 0x4A,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
376 0x00,0x00,0x00,0xFF,0x44,0x44,0x44,0x44,
377 0x44,0x44,0x44,0x44,0xFF,0x00,0x00,0x00,
378
379 //uint8 code WORD_TAB50[32] ={ //-- 文字: 学--
380 0x40,0x30,0x10,0x12,0x5C,0x54,0x50,0x51,
381 0x5E,0xD4,0x50,0x18,0x57,0x32,0x10,0x00,
382 0x00,0x02,0x02,0x02,0x02,0x02,0x42,0x82,
383 0x7F,0x02,0x02,0x02,0x02,0x02,0x02,0x00,
384
385
386 ///uint8 code WORD_TAB60[32] ={ //-- 文字: 院--
387 0xFE,0x02,0x32,0x4A,0x86,0x0C,0x24,0x24,
388 0x25,0x26,0x24,0x24,0x24,0x0C,0x04,0x00,
389 0xFF,0x00,0x02,0x04,0x83,0x41,0x31,0x0F,
390 0x01,0x01,0x7E,0x81,0x81,0x81,0xF1,0x00
391 };
392
393 uint8 code WORD_TAB2[64] ={ //-- 文字: 电 --
394 0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,
395 0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
396 0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,
397 0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00,
398
399 //uint8 code WORD_TAB80[32] ={ //-- 文字: 压 --
400 0x00,0x00,0xFE,0x02,0x42,0x42,0x42,0x42,
401 0xFA,0x42,0x42,0x42,0x62,0x42,0x02,0x00,
402 0x20,0x18,0x27,0x20,0x20,0x20,0x20,0x20,
403 0x3F,0x20,0x21,0x2E,0x24,0x20,0x20,0x00,
404 };
405
406
407 void LCM_DispWord(uint8 disp_cy, uint8 disp_cx,uint8 code *pchardata)
408 { unsigned char i,j;
409 1 uint8 code *pchartempdata;
410 1 unsigned char temp_cx,temp_cy;
411 1 disp_cy = disp_cy&0x07; // 参数过滤
412 1 disp_cx = disp_cx&0x0f;
413 1
414 1 for(j=0;j<4;j++)
415 1 {
416 2 pchartempdata = pchardata + j*8;
417 2 temp_cx = disp_cx+j%2;
418 2 temp_cy = disp_cy+j/2;
419 2 if( (temp_cx&0x08) == 0 ) // 选择液晶控制芯片(即CS1--控制前8个字符,CS2--控制后8个字符)
420 2 {
421 3 i = temp_cx<<3;
422 3 LCM_Wr1Command(LCM_ADDRSTRX+i); // 设置当前列地址,即列
423 3 LCM_Wr1Command(LCM_ADDRSTRY+temp_cy); // 设置当前页地址,即行
424 3
425 3 for(i=0; i<5; i++);
426 3 for(i=0; i<8; i++)
427 3 { LCM_Wr1Data(*pchartempdata); // 发送数据 */
C51 COMPILER V7.06 LCM_DRIVE 07/10/2007 10:25:57 PAGE 8
428 4 pchartempdata++;
429 4 }
430 3 for(i=0; i<5; i++);
431 3 }
432 2 else
433 2 { i = (temp_cx&0x07)<<3; // 若Y>7,则选取用CS2并且地址值要先减去8,再乘以8
434 3 LCM_Wr2Command(LCM_ADDRSTRX+i);
435 3 LCM_Wr2Command(LCM_ADDRSTRY+temp_cy); // 设置当前页地址,即行
436 3
437 3 for(i=0; i<5; i++);
438 3 for(i=0; i< 8; i++)
439 3 { LCM_Wr2Data(*pchartempdata); // 发送数据 */
440 4 pchartempdata++;
441 4 }
442 3 for(i=0; i<5; i++);
443 3 }
444 2 }
445 1 }
446
447 void LCM_DispWords(uint8 disp_cy, uint8 disp_cx)
448 {
449 1 uint8 i,temp_cx,temp_cy;
450 1 uint8 code *pchardata;
451 1 pchardata = &WORD_TAB1[0];
452 1 temp_cx = disp_cx;
453 1 temp_cy = disp_cy;
454 1 for(i = 0;i<8;i++)
455 1 {
456 2 temp_cx = disp_cx + 2*(i%8);
457 2 temp_cy = temp_cy&0x07; // 参数过滤
458 2 temp_cx = temp_cx&0x0f;
459 2 LCM_DispWord(temp_cy, temp_cx, pchardata); // 显示字符
460 2 pchardata = pchardata + 32; // 指向下一字符数据
461 2 }
462 1 temp_cx = 0;
463 1 pchardata = &WORD_TAB2;
464 1 for(i = 0; i<2;i++)
465 1 {
466 2 temp_cx = 2*i;
467 2 temp_cy = disp_cy + 2;
468 2 temp_cy = temp_cy&0x07; // 参数过滤
469 2 temp_cx = temp_cx&0x0f;
470 2 LCM_DispWord(temp_cy, temp_cx, pchardata);
471 2 pchardata = pchardata + 32;
472 2 }
473 1 }
474
475
476
477
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1392 ----
CONSTANT SIZE = 800 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 36
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 + -