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

📄 ks0108.lst

📁 一个占用内存极少的菜单系统的实现
💻 LST
📖 第 1 页 / 共 5 页
字号:
 890   1              GUI_SetEnFont(En_8x16);
 891   1          } else {
 892   1              GUI_SetEnFont(En_5x8);
 893   1          }
 894   1      */
 895   1          XLen = ENCount*8 + CNCount*16;
 896   1      
 897   1          if (XLen > 127) {//我们只能显示一行
 898   2              XLen = 127;
 899   2          }
 900   1      //识别对其方式属性
 901   1          switch (Mode&0x30) {//只有这两个Bit是这个属性
 902   2              case GUI_TA_LEFT: //左对齐
 903   2                  XLen = 0;
 904   2                  break;
 905   2              case GUI_TA_HCENTER:  //居中
 906   2                  XLen  = ((x1-x0)-XLen)/2;
 907   2                  break;
 908   2              case GUI_TA_RIGHT:   //右对齐
 909   2                  XLen  = (x1-x0)-XLen;
 910   2                  break;
 911   2              default:
 912   2                  break;
 913   2          }
 914   1      //--------------------------------------
 915   1      //得到喀什显示的起点坐标
 916   1          X = x0+XLen;
 917   1          Y = y0;
 918   1      
 919   1      //---------------------
 920   1      //清除字符前面的空白部分
 921   1          if(Mode&GUI_JUST_TEXT){
 922   2          } else {
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 16  

 923   2              x0 = X;
 924   2              if (GUITextMode == GUI_TEXTMODE_REVERSE){
 925   3                  for(i = 0; i <x0; i++){
 926   4                      Display_Locate(0xFF, i,y0);
 927   4                      Display_Locate(0xFF, i,y0+1);
 928   4                  }
 929   3              }else{
 930   3                  for(i = 0; i <x0; i++){
 931   4                      Display_Locate(0x00, i,y0);
 932   4                      Display_Locate(0x00, i,y0+1);
 933   4                  }
 934   3              }
 935   2          }
 936   1      
 937   1      //-----------------------
 938   1          i = 0;
 939   1          while(s[i]!='\0'){
 940   2              if (s[i] < 0x80) {//是ASCII
 941   3                  switch (GUITextMode) {
 942   4                      case GUI_TEXTMODE_NORMAL :
 943   4                           Display_ASCII(s[i], X, Y);
 944   4                           break;
 945   4                      case GUI_TEXTMODE_REVERSE :
 946   4                           Display_InvASCII(s[i], X, Y);
 947   4                           break;
 948   4                      case GUI_TEXTMODE_UNDERLINE :
 949   4                           Display_ASCII_UnderLine(s[i], X, Y);
 950   4                           break;
 951   4                      default :
 952   4                           break;
 953   4                  }
 954   3                  X += 8;
 955   3              } else {//是中文
 956   3                  Display_Chinese(s[i]*256+s[i+1],X,Y);//中文
 957   3                  i++;
 958   3                  X += 16;
 959   3             }
 960   2      //       s++;
 961   2              i++;
 962   2          }
 963   1      //清除字符后面的空白部分
 964   1          if(Mode&GUI_JUST_TEXT){
 965   2              GUI_SetEnFont(En_5x8);
 966   2              return;
 967   2          } else {
 968   2              x0 = X;
 969   2              if (GUITextMode == GUI_TEXTMODE_REVERSE){
 970   3                  for(i = 0; i <x1-x0; i++){
 971   4                      Display_Locate(0xFF, x0+i,y0);
 972   4                      Display_Locate(0xFF, x0+i,y0+1);
 973   4                  }
 974   3              }else{
 975   3                  for(i = 0; i <x1-x0; i++){
 976   4                      Display_Locate(0x00, x0+i,y0);
 977   4                      Display_Locate(0x00, x0+i,y0+1);
 978   4                  }
 979   3              }
 980   2              GUI_SetEnFont(En_5x8);
 981   2              return;
 982   2          }
 983   1      //---------------------------------------
 984   1      }
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 17  

 985          
 986          #if 0
              //--------------------------
              //显示ASCII(16X32)
              //Char 字符
              //X 0--6
              //Y 0--(128-8)
              
              U16 _CONST_ Changedot[] =
              {
              0x0000, 0x0003, 0x000c, 0x000f, 0x0030, 0x0033, 0x003c, 0x003f, 0x00c0, 0x00c3,
              0x00cc, 0x00cf, 0x00f0, 0x00f3, 0x00fc, 0x00ff, 0x0300, 0x0303, 0x030c, 0x030f,
              0x0330, 0x0333, 0x033c, 0x033f, 0x03c0, 0x03c3, 0x03cc, 0x03cf, 0x03f0, 0x03f3,
              0x03fc, 0x03ff, 0x0c00, 0x0c03, 0x0c0c, 0x0c0f, 0x0c30, 0x0c33, 0x0c3c, 0x0c3f,
              0x0cc0, 0x0cc3, 0x0ccc, 0x0ccf, 0x0cf0, 0x0cf3, 0x0cfc, 0x0cff, 0x0f00, 0x0f03,
              0x0f0c, 0x0f0f, 0x0f30, 0x0f33, 0x0f3c, 0x0f3f, 0x0fc0, 0x0fc3, 0x0fcc, 0x0fcf,
              0x0ff0, 0x0ff3, 0x0ffc, 0x0fff, 0x3000, 0x3003, 0x300c, 0x300f, 0x3030, 0x3033,
              0x303c, 0x303f, 0x30c0, 0x30c3, 0x30cc, 0x30cf, 0x30f0, 0x30f3, 0x30fc, 0x30ff,
              0x3300, 0x3303, 0x330c, 0x330f, 0x3330, 0x3333, 0x333c, 0x333f, 0x33c0, 0x33c3,
              0x33cc, 0x33cf, 0x33f0, 0x33f3, 0x33fc, 0x33ff, 0x3c00, 0x3c03, 0x3c0c, 0x3c0f,
              0x3c30, 0x3c33, 0x3c3c, 0x3c3f, 0x3cc0, 0x3cc3, 0x3ccc, 0x3ccf, 0x3cf0, 0x3cf3,
              0x3cfc, 0x3cff, 0x3f00, 0x3f03, 0x3f0c, 0x3f0f, 0x3f30, 0x3f33, 0x3f3c, 0x3f3f,
              0x3fc0, 0x3fc3, 0x3fcc, 0x3fcf, 0x3ff0, 0x3ff3, 0x3ffc, 0x3fff, 0xc000, 0xc003,
              0xc00c, 0xc00f, 0xc030, 0xc033, 0xc03c, 0xc03f, 0xc0c0, 0xc0c3, 0xc0cc, 0xc0cf,
              0xc0f0, 0xc0f3, 0xc0fc, 0xc0ff, 0xc300, 0xc303, 0xc30c, 0xc30f, 0xc330, 0xc333,
              0xc33c, 0xc33f, 0xc3c0, 0xc3c3, 0xc3cc, 0xc3cf, 0xc3f0, 0xc3f3, 0xc3fc, 0xc3ff,
              0xcc00, 0xcc03, 0xcc0c, 0xcc0f, 0xcc30, 0xcc33, 0xcc3c, 0xcc3f, 0xccc0, 0xccc3,
              0xcccc, 0xcccf, 0xccf0, 0xccf3, 0xccfc, 0xccff, 0xcf00, 0xcf03, 0xcf0c, 0xcf0f,
              0xcf30, 0xcf33, 0xcf3c, 0xcf3f, 0xcfc0, 0xcfc3, 0xcfcc, 0xcfcf, 0xcff0, 0xcff3,
              0xcffc, 0xcfff, 0xf000, 0xf003, 0xf00c, 0xf00f, 0xf030, 0xf033, 0xf03c, 0xf03f,
              0xf0c0, 0xf0c3, 0xf0cc, 0xf0cf, 0xf0f0, 0xf0f3, 0xf0fc, 0xf0ff, 0xf300, 0xf303,
              0xf30c, 0xf30f, 0xf330, 0xf333, 0xf33c, 0xf33f, 0xf3c0, 0xf3c3, 0xf3cc, 0xf3cf,
              0xf3f0, 0xf3f3, 0xf3fc, 0xf3ff, 0xfc00, 0xfc03, 0xfc0c, 0xfc0f, 0xfc30, 0xfc33,
              0xfc3c, 0xfc3f, 0xfcc0, 0xfcc3, 0xfccc, 0xfccf, 0xfcf0, 0xfcf3, 0xfcfc, 0xfcff,
              0xff00, 0xff03, 0xff0c, 0xff0f, 0xff30, 0xff33, 0xff3c, 0xff3f, 0xffc0, 0xffc3,
              0xffcc, 0xffcf, 0xfff0, 0xfff3, 0xfffc, 0xffff,
              };
              bit EnFont = 0;
              void GUI_DispChar(U8 Char,U8 X,U8 Y,bit Nor)
              {
                  U8 i;
                  U8 dot;
              
                  U16 temp;
              
                  if(Y>(128-8)){//换行
                      X += 2;
                      Y  = 0;
                  }
                  if(!Nor){
                      for(i=0;i<8;i++){
                          if(EnFont == 0){
                              WriteByte(X,(Y+i),chardot[i+(Char-0x20)*16]);
                          }else{
                              dot = chardot[i+(Char-0x20)*16];
                              temp = Changedot[dot];
              //这段代码把字体纵向放大2倍,外部调用时换行需要加倍
                              WriteByte(X,(Y+i),(U8)(temp&0x00FF));
                              WriteByte(X+1,(Y+i),(U8)((temp&0xFF00)>>8));
              
              /*
              //这段代码把字体放大4倍,但由于横向轴被放大,因此外部调用函数时也需要加倍
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 18  

                              WriteByte(X,(Y+i*2),(U8)(temp&0x00FF));
                              WriteByte(X,(Y+i*2+1),(U8)(temp&0x00FF));
                              WriteByte(X+1,(Y+i*2),(U8)((temp&0xFF00)>>8));
                              WriteByte(X+1,(Y+i*2+1),(U8)((temp&0xFF00)>>8));
              */
                          }
              
                      }
                      for(i=8;i<16;i++){
                          if(EnFont == 0){
                              WriteByte(X+1,(Y+i-8),chardot[i+(Char-0x20)*16]);
                          }else{
                              dot = chardot[i+(Char-0x20)*16];
                              temp = Changedot[dot];
              
                              WriteByte(X+2,(Y+i-8),(U8)(temp&0x00FF));
                              WriteByte(X+3,(Y+i-8),(U8)((temp&0xFF00)>>8));
              
              /*
                              WriteByte(X+2,(Y+(i-8)*2),(U8)(temp&0x00FF));
                              WriteByte(X+2,(Y+(i-8)*2+1),(U8)(temp&0x00FF));
                              WriteByte(X+3,(Y+(i-8)*2),(U8)((temp&0xFF00)>>8));
                              WriteByte(X+3,(Y+(i-8)*2+1),(U8)((temp&0xFF00)>>8));
              */
                          }
                      }
                  }else{
                      for(i=0;i<8;i++){
                          if(EnFont == 0){
                              WriteByte(X,(Y+i),0xFF-chardot[i+(Char-0x20)*16]);
                          }else{
                              dot = 0xFF-chardot[i+(Char-0x20)*16];
                              temp = Changedot[dot];
                              WriteByte(X*2,(Y+i),(U8)(temp&0x00FF));
                              WriteByte(X*2,(Y+i+1),(U8)(temp&0x00FF));
                              WriteByte(X*2+1,(Y+i),(U8)((temp&0xFF00)>>8));
                              WriteByte(X*2+1,(Y+i+1),(U8)((temp&0xFF00)>>8));
              
                          }
                      }
                      for(i=8;i<16;i++){
                          if(EnFont == 0){
                              WriteByte(X+1,(Y+i-8),0xFF-chardot[i+(Char-0x20)*16]);
                          }else{
                              dot = 0xFF-chardot[i+(Char-0x20)*16];
                              temp = Changedot[dot];
                              WriteByte((X+1)*2,(Y+i-8+1),(U8)(temp&0x00FF));
                              WriteByte((X+1)*2,(Y+i-8),(U8)(temp&0x00FF));
                              WriteByte((X+1)*2+1,(Y+i-8+1),(U8)((temp&0xFF00)>>8));
                              WriteByte((X+1)*2+1,(Y+i-8),(U8)((temp&0xFF00)>>8));
                          }
                      }
                  }
              }
              #endif
1102          //--------------------------
1103          
1104          #if 0
              //-------------显示普通图片
              //------(图像 长度 起始位置)
              void Display_Image(U8 _CONST_ *IMG)
              {
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 19  

                  U8 XAddr;
                  U8 YAddr;
                  U16 Count;
                  Count = 0;
                  for(XAddr=0;XAddr<8;XAddr++){//0--7
                      for(YAddr=0;YAddr<128;YAddr++){//0--127
                          WriteByte(XAddr,YAddr,IMG[Count++]);
                      }
                  }
              }
              #endif
1120          
1121          /*
1122          *****************************************************************************
1123          * GUI_DrawIcon - 制定位置显示一个32x32的图标
1124          * DESCRIPTION: -
1125          *
1126          * @Param x0:X轴坐标
1127          * @Param y0:Y轴坐标 注意边界!
1128          * @Param Ico:图标数据
1129          * @Return :
1130          * ----
1131          *****************************************************************************
1132          */
1133          void GUI_DrawIcon(U8 _CONST_ *Ico,U8 x0,U8 y0)
1134          {
1135   1          U8 i;
1136   1          U16 Count;
1137   1          Count = 0;
1138   1          if( y0 > 4){//边界保护
1139   2              y0 = 4;
1140   2          }
1141   1          if(x0 >(LCD_XSIZE-32)){
1142   2              x0 = LCD_XSIZE-32;
1143   2          }
1144   1          for(i=0;i<32;i++){//第一行
1145   2              Display_Locate(Ico[Count++],x0+i,y0);
1146   2          }
1147   1          for(i=0;i<32;i++){//第二行
1148   2              Display_Locate(Ico[Count++],x0+i,y0+1);
1149   2          }
1150   1          for(i=0;i<32;i++){//第三行
1151   2              Display_Locate(Ico[Count++],x0+i,y0+2);
1152   2          }
1153   1          for(i=0;i<32;i++){//第四行
1154   2              Display_Locate(Ico[Count++],x0+i,y0+3);
1155   2          }
1156   1      }
1157          #if 0
              
              /*
              *****************************************************************************
              * GUI_DispDecAt - 显示十进制数值
              * DESCRIPTION: -
              * 处理长度最多5个数字(因为U16--->65536)
              * @Param v:显示的数据
              * @Param x:X轴坐标
              * @Param y:Y轴坐标  XY 均是起点位置坐标 也就是数值最高位的坐标
              * @Param Len:指定的显示长度1--5内
              * @Return :
              *
              *****************************************************************************
C51 COMPILER V7.06   KS0108                                                                04/16/2008 17:32:01 PAGE 20  

              */
              void GUI_DispDecAt(U16 v, U16 x, U16 y, U8 Len)
              {
                  U8 i;
                  U8 CharBuf[5];
                  U8 HighByte;
              
                  HighByte = 0;
                  for(i = 0; i < 5; i++){
                      CharBuf[i] = (U8)(v%10);
                      v = v/10;
                      if(CharBuf[i]){
                          HighByte = i;
                      }
                  }
                  //第0位无论如何也显示
                  i = 0;
                  GUI_DispCharAt(CharBuf[i]+'0',x+((Len-1)-i)*Char_XSIZE,y);

⌨️ 快捷键说明

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