⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ks0108.lst

📁 一个占用内存极少的菜单系统的实现
💻 LST
📖 第 1 页 / 共 5 页
字号:
 591          */
 592          void GUI_SetEnFont(U8 EnFont)
 593          {
 594   1        if (EnFont == En_5x8){
 595   2          GUIEnFont = En_5x8;
 596   2          Char_XSIZE = En_5x8_XSIZE;
 597   2          Char_YSIZE = En_5x8_YSIZE;
 598   2        } else {
 599   2          GUIEnFont = En_8x16;
 600   2          Char_XSIZE = En_8x16_XSIZE;
 601   2          Char_YSIZE = En_8x16_YSIZE;
 602   2      
 603   2        }
 604   1      
 605   1      }
 606          /*
 607          ----------------------------------------------------------------------------------------------
 608          
 609          ----------------------------------------------------------------------------------------------
 610          */
 611          void GUI_Delay(U16 Period)
 612          {
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 11  

 613   1          U8 j;
 614   1          for (;  Period>0 ; Period--) {
 615   2              for (j = 0; j < 200; j++) {
 616   3              }
 617   2          }
 618   1      }
 619          /*
 620          *****************************************************************************
 621          * GUI_DispCharAt - 指定位置显示一个ASCII码
 622          * DESCRIPTION: - 字体使用是系统设定的字体
 623          *
 624          * @Param x:X轴坐标
 625          * @Param y:Y轴坐标
 626          * @Param c:ASCII码
 627          * @Return :
 628          * ----
 629          *****************************************************************************
 630          */
 631          void GUI_DispCharAt(U8 c, U8 x, U8 y)
 632          {
 633   1          switch (GUITextMode) {
 634   2              case GUI_TEXTMODE_NORMAL :
 635   2                   Display_ASCII(c, x, y);
 636   2                   break;
 637   2              case GUI_TEXTMODE_REVERSE :
 638   2                   Display_InvASCII(c, x, y);
 639   2                   break;
 640   2              case GUI_TEXTMODE_UNDERLINE :
 641   2                   Display_ASCII_UnderLine(c, x, y);
 642   2                   break;
 643   2              default :
 644   2                   break;
 645   2          }
 646   1      }
 647          /*
 648          ----------------------------------------------------------------------------------------------
 649          
 650          ----------------------------------------------------------------------------------------------
 651          */
 652          #if 0
              void GUI_DispChar(U8 c)
              {
                  GUI_DispCharAt(c, PosX, PosY);
                  PosX += 8;
              }
              #endif
 659          /*
 660          *****************************************************************************
 661          * GUI_Init - 初始化GUI显示
 662          * DESCRIPTION: -
 663          *
 664          * @Param void:
 665          * @Return :
 666          * ----
 667          *****************************************************************************
 668          */
 669          void GUI_Init(void)
 670          {
 671   1          Display_Init();
 672   1          GUIEnFont = En_8x16;
 673   1          GUITextMode = GUI_TEXTMODE_NORMAL;
 674   1          Char_XSIZE = En_8x16_XSIZE;
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 12  

 675   1          Char_YSIZE = En_8x16_YSIZE;
 676   1          PosX = 0;
 677   1          PosY = 0;
 678   1          NoXY = true;
 679   1      
 680   1      
 681   1      }
 682          void GUI_Clear(void)
 683          {
 684   1          Display_Clear();
 685   1      }
 686          #if 0
              void GUI_DispCEOL(void)
              {
                  U8 i;
                  for(i = PosX; i <= LCD_XSIZE-8; i += 8) {
                      GUI_DispCharAt(' ', i, PosY);
              
                  }
              }
              #endif
 696          /*
 697          *****************************************************************************
 698          * GUI_DispStringAt - 指定位置显示一个字符串
 699          * DESCRIPTION: -
 700          * 支持中英混合 当中英混合时英文字体强制为8x16 如果单单英文 按照设定字体
 701          * @Param x0:X轴坐标
 702          * @Param y0:Y轴坐标
 703          * @Param s:字符串
 704          * @Return :
 705          * ----
 706          *****************************************************************************
 707          */
 708          //void GUI_DispStringAt(U8 _CONST_ *s,U8 x0,U8 y0)
 709          void GUI_DispStringAt(U8 *s,U8 x0,U8 y0)
 710          {
 711   1          U8 i;
 712   1          if (NoXY == false){//没有提供坐标,则使用系统坐标
 713   2              x0 = PosX;
 714   2              y0 = PosY;
 715   2          }
 716   1          i = 0;
 717   1          while(s[i]!='\0'){
 718   2              if (s[i] < 0x80) {//是ASCII
 719   3                   if(s[i] == '\n'){
 720   4                          x0 = 0;
 721   4                          y0 += Char_YSIZE;
 722   4                   } else {
 723   4                      if (x0 > (LCD_XSIZE-1)) {//换行
 724   5                          x0 = 0;
 725   5                          y0 += Char_YSIZE;
 726   5                      }
 727   4                      switch (GUITextMode) {
 728   5                          case GUI_TEXTMODE_NORMAL :
 729   5                               Display_ASCII(s[i], x0, y0);
 730   5                               break;
 731   5                          case GUI_TEXTMODE_REVERSE :
 732   5                               Display_InvASCII(s[i], x0, y0);
 733   5                               break;
 734   5                          case GUI_TEXTMODE_UNDERLINE :
 735   5                               Display_ASCII_UnderLine(s[i], x0, y0);
 736   5                               break;
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 13  

 737   5                          default :
 738   5                               break;
 739   5                      }
 740   4                      x0 += Char_XSIZE;
 741   4                   }
 742   3              } else {//是中文
 743   3                  if (x0 > LCD_XSIZE-16){
 744   4                      x0 = 0;
 745   4                      y0 += Chinese_YSIZE;
 746   4                  }
 747   3                  Display_Chinese(s[i]*256+s[i+1],x0,y0);//中文
 748   3                  i++;
 749   3                  x0 += Chinese_XSIZE;
 750   3             }
 751   2             s++;
 752   2          }
 753   1          if (NoXY == false){
 754   2              PosX = x0;
 755   2              PosY = y0;
 756   2          }
 757   1      
 758   1      }
 759          #if 0
              /*
              *****************************************************************************
              * GUI_DispString - 在当前系统坐标下显示字符串
              * DESCRIPTION: -
              * 除了坐标不能指定外 功能跟GUI_DispStringAt一致
              * @Param s:字符串
              * @Return :
              * ----
              *****************************************************************************
              */
              void GUI_DispString(U8 _CONST_ *s)
              {
                  NoXY = false;
                  GUI_DispStringAt(s,PosX,PosY);
                  NoXY = true;
              }
              
              void GUI_DispStringLen(U8 _CONST_ *s, U16 Len)
              {
                  U8 i;
                  i = 0;
                  while(s[i]!='\0'){
                      if (i >= Len ){
                          return;
                      }
                      if (s[i] < 0x80) {//是ASCII
                           if(s[i] == '\n'){
              //                    PosX = 0;
              //                    PosY += 2;
                           } else {
                             if (PosX > (LCD_XSIZE-1)) {//换行
                                  PosX = 0;
              //                    PosY += 2;
                              }
                              switch (GUITextMode) {
                                  case GUI_TEXTMODE_NORMAL :
                                       Display_ASCII(s[i], PosX, PosY);
                                       break;
                                  case GUI_TEXTMODE_REVERSE :
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 14  

                                       Display_InvASCII(s[i], PosX, PosY);
                                       break;
                                  case GUI_TEXTMODE_UNDERLINE :
                                       Display_ASCII_UnderLine(s[i], PosX, PosY);
                                       break;
                                  default :
                                       break;
                              }
                              PosX += 8;
                           }
                      } else {//是中文
                          if (PosX > LCD_XSIZE-16){
              //                PosX = 0;
              //                PosY += 2;
                              return;
                          }
                          Display_Chinese(s[i]*256+s[i+1],PosX,PosY);//中文
                          i++;
                          PosX += 16;
                     }
                     i++;
                  }
              
              }
              
              void GUI_DrawCursor(U8 x, U8 y)
              {
                  if(GUITextMode == GUI_TEXTMODE_NORMAL){
                      Display_Locate(0xFF,x,y);
                      Display_Locate(0xFF,x,y+1);
                  } else if (GUITextMode == GUI_TEXTMODE_REVERSE){
                      Display_Locate(0x00,x,y);
                      Display_Locate(0x00,x,y+1);
                  } else {
                      Display_Locate(0xFF,x,y);
                      Display_Locate(0xFF,x,y+1);
                  }
              }
              
              void GUI_CursorOn(U8 x, U8 y)
              {
                  Display_Locate(0xFF,x,y);
                  Display_Locate(0xFF,x,y+1);
              }
              
              void GUI_CursorOFF(U8 x, U8 y)
              {
                  Display_Locate(0x00,x,y);
                  Display_Locate(0x00,x,y+1);
              }
              #endif
 850          
 851          /*
 852          *****************************************************************************
 853          * GUI_DispStringAtBar - 显示一个字符串在一个BAR中
 854          * DESCRIPTION: -
 855          * 可以设定对齐方式
 856          * @Param s:字符串
 857          * @Param x0:BAR起始X轴坐标
 858          * @Param x1:BAR结束点的X轴坐标
 859          * @Param y0:BAR的Y轴坐标
 860          * @Param Mode:对齐方式 居中于BAR 左对齐BAR 右对齐BAR
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 15  

 861          * @Return :
 862          * ----
 863          *****************************************************************************
 864          */
 865          //void GUI_DispStringAtBar(U8 _CONST_ *s,U8 x0, U8 y0, U8 x1,U8 Mode)
 866          void GUI_DispStringAtBar(U8 *s,U8 x0, U8 y0, U8 x1,U8 Mode)
 867          {
 868   1          U8 ENCount;//英文统计
 869   1          U8 CNCount;//中文统计
 870   1          U8 XLen;
 871   1          U8 X;
 872   1          U8 Y;
 873   1          U8 i;
 874   1          CNCount = 0;
 875   1          ENCount = 0;
 876   1          XLen = 0;
 877   1          i = 0;
 878   1          while(s[i]!='\0'){//统计中英文个数
 879   2              if (s[i] > 0x80) {
 880   3                  CNCount ++;
 881   3                  i++;
 882   3              } else {
 883   3                 ENCount++;
 884   3              }
 885   2              i++;
 886   2          }
 887   1              GUI_SetEnFont(En_8x16);
 888   1      /*
 889   1          if(CNCount){

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -