📄 lcm.lst
字号:
420 ****************************************************************************/
421 void LCD_UpdatePoint(uint8 x, uint8 y, bit bCOLOR)
422 {
423 1 LCD_CS(); /* ExSRAM Page 16 */
424 1
425 1 LCD_WriteCommand(0xB0 + y>>3);
426 1 LCD_WriteCommand(0x10 + x>>4);
427 1 LCD_WriteCommand( x % 16);
C51 COMPILER V7.06 LCM 09/04/2006 09:56:02 PAGE 8
428 1
429 1 if(bCOLOR)
430 1 LCD_WriteData(0x01<<y % 8);
431 1 else
432 1 LCD_WriteData(0x00);
433 1
434 1 ExInSRAM_Select(0); //
435 1 }
436
437
438 /****************************************************************************
439 * 名称:LCD_DispAsciiCh16x8()
440 * 功能:显示ASCII 16×8字符。
441 * 入口参数:x 指定显示位置,x坐标
442 * y 指定显示位置,y坐标
443 * ch 要显示的ASCII字符对应的数组的地址。
444 * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
445 * 说明:操作失败原因是指定地址超出有效范围。
446 ****************************************************************************/
447 bit LCD_DispAsciiCh16x8(uint8 xx, uint8 yy, uint8 ucASCII)
448 {
449 1 uint8 x, y;
450 1 uint8 i;
451 1 uint16 AddrOffSet;
452 1
453 1 x = xx;
454 1 y = yy;
455 1 if( x >= (GUI_LCM_XMAX-8) ) /* 参数过滤 */
456 1 return(0);
457 1 if( y >= (GUI_LCM_YMAX-8) ) /* 参数过滤 */
458 1 return(0);
459 1
460 1 AddrOffSet = ( ucASCII - 32) * 16; //
461 1 for(i=0; i<16; i++) // 显示共16行
462 1 {
463 2 LCD_UpdateByte(x, y, FONT16x8ASII[AddrOffSet + i]);
464 2 y++; // 指向下一行
465 2 }
466 1 return(1);
467 1 }
468
469
470 /****************************************************************************
471 * 名称:LCD_DispAsciiStr16x8()
472 * 功能:输出显示字符串,16*8字体
473 * 入口参数:x 指定显示位置,x坐标
474 * y 指定显示位置,y坐标
475 * str 要显示的ASCII码字符串
476 * 出口参数:无
477 * 说明:
478 ****************************************************************************/
479 void LCD_DispAsciiStr16x8(uint8 x, uint8 y, uint8 *str, bit bReve)
480 {
*** WARNING C236 IN LINE 480 OF LCM.C: '_LCD_DispAsciiStr16x8': different length of parameter lists
481 1 uint8 *OffSet;
482 1 uint8 i;
483 1 uint16 AddOffSet;
484 1
485 1 OffSet = strstr(Index_FONT16x8ASII, str);
486 1 AddOffSet = (OffSet-Index_FONT16x8ASII) << 4;
487 1
488 1 if( !bReve )
C51 COMPILER V7.06 LCM 09/04/2006 09:56:02 PAGE 9
489 1 {
490 2 for(i=0;i<8;i++)
491 2 LCD_UpdateByte(x+i, y, FONT16x8ASII[AddOffSet++]);
492 2 for(i=0;i<8;i++)
493 2 LCD_UpdateByte(x+i, y+8, FONT16x8ASII[AddOffSet++]);
494 2 }
495 1 else
496 1 {
497 2 for(i=0;i<8;i++)
498 2 LCD_UpdateByte(x+i, y, ~FONT16x8ASII[AddOffSet++]);
499 2 for(i=0;i<8;i++)
500 2 LCD_UpdateByte(x+i, y+8, ~FONT16x8ASII[AddOffSet++]);
501 2 }
502 1 }
503
504
505 /****************************************************************************
506 * 名称:LCD_DispChChar16x16()
507 * 功能:显示汉字(16*16字体)。
508 * 入口参数:x 指定显示位置,x坐标
509 * y 指定显示位置,y坐标
510 * ch 要显示的汉字对应的数组的首地址。
511 * 出口参数:返回值为1时表示操作成功,为0时表示操作失败。
512 * 说明:操作失败原因是指定地址超出有效范围。
513 ****************************************************************************/
514 bit LCD_DispChChar16x16(uint8 xx, uint8 yy, char *ucCHAR, uint8 FontNo)
515 {
516 1 uint8 xdata x, y;
517 1 uint8 xdata i, j, k;
518 1 char xdata *OffSetCH;
519 1 uint16 xdata AddrOffSet;
520 1
521 1 x = xx;
522 1 y = yy;
523 1 if( x >= (GUI_LCM_XMAX-8) ) /* 参数过滤 */
524 1 return(0);
525 1 if( y >= (GUI_LCM_YMAX-8) ) /* 参数过滤 */
526 1 return(0);
527 1
528 1 OffSetCH = strstr(Index_FONT16x16ChCH, ucCHAR);
529 1 if( OffSetCH == 0 )
530 1 return (0);
531 1 AddrOffSet = ( OffSetCH - Index_FONT16x16ChCH ) << 4; // = / 2 * 32;
532 1
533 1 k = 0;
534 1 for(i=0; i<16; i++) // 显示共16行
535 1 {
536 2 for(j=0; j<2; j++) // 每行共16点
537 2 {
538 3 if( FontNo == 0 ) // 宋体
539 3 LCD_UpdateByte(x, y, FONT16x16ChCH1[AddrOffSet + k]);
540 3 if( FontNo == 1 ) // 宋体加粗
541 3 LCD_UpdateByte(x, y, FONT16x16ChCH2[AddrOffSet + k]);
542 3
543 3 x = x + 8;
544 3 k++;
545 3 }
546 2 y++; // 指向下一行
547 2 x = x - 16; // 恢复x值
548 2 }
549 1 return(1);
550 1 }
C51 COMPILER V7.06 LCM 09/04/2006 09:56:02 PAGE 10
551
552
553 /****************************************************************************
554 * 名称:LCD_DispChStr16x16()
555 * 功能:输出显示字符串(16*16字体)。
556 * 入口参数:x 指定显示位置,x坐标
557 * y 指定显示位置,y坐标
558 * str 要显示的字符串
559 * 出口参数:无
560 * 说明:操作失败原因是指定地址超出有效范围。
561 ****************************************************************************/
562 void LCD_DispChStr16x16(uint8 x, uint8 y, uint8 *str, bit bReve, bit FontNo)
563 {
564 1 uint8 *OffSet;
565 1 uint8 i;
566 1 uint16 AddOffSet;
567 1
568 1 OffSet = strstr(Index_FONT16x16ChCH, str);
569 1 AddOffSet =(OffSet - Index_FONT16x16ChCH) << 5;
570 1
571 1 if( !FontNo )
572 1 {
573 2 if( !bReve )
574 2 {
575 3 for(i=0;i<16;i++)
576 3 LCD_UpdateByte(x+i, y, FONT16x16ChCH1[AddOffSet++]);
577 3 for(i=0;i<16;i++)
578 3 LCD_UpdateByte(x+i, y+8, FONT16x16ChCH1[AddOffSet++]);
579 3 }
580 2 else
581 2 {
582 3 for(i=0;i<16;i++)
583 3 LCD_UpdateByte(x+i, y, ~FONT16x16ChCH1[AddOffSet++]);
584 3 for(i=0;i<16;i++)
585 3 LCD_UpdateByte(x+i, y+8, ~FONT16x16ChCH1[AddOffSet++]);
586 3 }
587 2 }
588 1 else
589 1 {
590 2 if( !bReve )
591 2 {
592 3 for(i=0;i<16;i++)
593 3 LCD_UpdateByte(x+i, y, FONT16x16ChCH2[AddOffSet++]);
594 3 for(i=0;i<16;i++)
595 3 LCD_UpdateByte(x+i, y+8, FONT16x16ChCH2[AddOffSet++]);
596 3 }
597 2 else
598 2 {
599 3 for(i=0;i<16;i++)
600 3 LCD_UpdateByte(x+i, y, ~FONT16x16ChCH2[AddOffSet++]);
601 3 for(i=0;i<16;i++)
602 3 LCD_UpdateByte(x+i, y+8, ~FONT16x16ChCH2[AddOffSet++]);
603 3 }
604 2 }
605 1 }
606
607
608 /****************************************************************************
609 * 名称:LCD_DispAsciiChStr()
610 * 功能:显示ASCII码和汉字混编字符串.
611 * 入口参数:x 指定显示位置,x坐标
612 * y 指定显示位置,y坐标
C51 COMPILER V7.06 LCM 09/04/2006 09:56:02 PAGE 11
613 * str 要显示的字符串
614 * 出口参数:无
615 * 说明:操作失败原因是指定地址超出有效范围。
616 ****************************************************************************/
617 void LCD_DispAsciiChStr(uint8 x, uint8 y, uint8 *str, bit bReve, bit FontNo)
618 {
619 1 uint8 idata rega[2];
620 1 uint8 idata regc[3];
621 1
622 1 while( *str != 0 )
623 1 {
624 2 if( (uint8)*str < 0xA0 )
625 2 {
626 3 strncpy(rega, str, 1);
627 3 rega[1]=0;
628 3 LCD_DispAsciiStr16x8(x, y, rega, bReve);
629 3 str = str + 1;
630 3 x = x + 8;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -