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

📄 55555.lst

📁 液晶MGLS2401128TA的控制程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 229          }
 230          return i; // 若返回零,说明错误
 231          }
 232          */
 233          uchar fnPR1(uchar uCmd,uchar uPar1,uchar uPar2) // 写双参数的指令
 234          {
 235   1      if(fnST01() == 0)
 236   1      return 1;
 237   1      LCMDW = uPar1;
 238   1      if(fnST01() == 0)
 239   1      return 2;
 240   1      LCMDW = uPar2;
 241   1      if(fnST01() == 0)
C51 COMPILER V7.08   55555                                                                 08/10/2005 07:11:22 PAGE 5   

 242   1      return 3;
 243   1      LCMCW = uCmd;
 244   1      return 0; // 返回0 成功
 245   1      }
 246          /*
 247          uchar fnPR11(uchar uCmd,uchar uPar1) // 写单参数的指令
 248          
 249          {
 250          if(fnST01() == 0)
 251          return 1;
 252          LCMDW = uPar1;
 253          if(fnST01() == 0)
 254          return 2;
 255          LCMCW = uCmd;
 256          return 0; // 返回0 成功
 257          }
 258          
 259          */
 260          uchar fnPR12(uchar uCmd) // 写无参数的指令
 261          {
 262   1      if(fnST01() == 0)
 263   1      return 1;
 264   1      LCMCW = uCmd;
 265   1      return 0; // 返回0 成功
 266   1      }
 267          uchar fnPR13(uchar uData) // 写数据
 268          {
 269   1      if(fnST3() == 0)
 270   1      return 1;
 271   1      LCMDW = uData;
 272   1      return 0; // 返回0 成功
 273   1      }
 274          /*
 275          uchar fnPR2(void) // 读数据
 276          {
 277          if(fnST01() == 0)
 278          return 1;
 279          return LCMDW;
 280          }
 281          */
 282          // 设置当前地址
 283          void fnSetPos(uchar urow, uchar ucol)
 284          {
 285   1      uint iPos;
 286   1      iPos = urow * 30 + ucol;
 287   1      fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
 288   1      gCurRow = urow;
 289   1      gCurCol = ucol;
 290   1      }
 291          // 设置当前显示行、列
 292          void cursor(uchar uRow, uchar uCol)
 293          
 294          {
 295   1      fnSetPos(uRow * 16, uCol);
 296   1      }
 297          // 清屏
 298          void cls(void)
 299          {
 300   1      uint i;
 301   1      fnPR1(LC_ADD_POS,0x00,0x00); // 置地址指针
 302   1      fnPR12(LC_AUT_WR); // 自动写
 303   1      for(i=0;i<240*30;i++)
C51 COMPILER V7.08   55555                                                                 08/10/2005 07:11:22 PAGE 6   

 304   1      {
 305   2      fnST3();
 306   2      fnPR13(0xf0); // 写数据
 307   2      }
 308   1      fnPR12(LC_AUT_OVR); // 自动写结束
 309   1      fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指针
 310   1      gCurRow = 0; // 置地址指针存储变量
 311   1      gCurCol = 0;
 312   1      }
 313          // LCM 初始化
 314          char fnLCMInit(void)
 315          {
 316   1      if(fnPR1(LC_TXT_STP,0x00,0x00) != 0) // 文本显示区首地址
 317   1      return -1;
 318   1      fnPR1(LC_TXT_WID,0x1E,0x00); // 文本显示区宽度
 319   1      fnPR1(LC_GRH_STP,0x00,0x00); // 图形显示区首地址
 320   1      fnPR1(LC_GRH_WID,0x1E,0x00); // 图形显示区宽度
 321   1      fnPR12(LC_CUR_SHP | 0x01); // 光标形状
 322   1      fnPR12(LC_MOD_OR); // 显示方式设置
 323   1      fnPR12(LC_DIS_SW | 0x08); // 显示开关设置
 324   1      return 0;
 325   1      }
 326          
 327          /*
 328          // ASCII(8*16) 及 汉字(16*16) 显示函数
 329          uchar dprintf(char *fmt,...)
 330          {
 331          va_list arg_ptr;
 332          char c1,c2,cData;
 333          char tmpBuf[64]; // LCD显示数据缓冲区
 334          uchar i=0,j,uLen,uRow,uCol;
 335          uint k;
 336          
 337          va_start(arg_ptr, fmt);
 338          uLen = (uchar)vsprintf(tmpBuf, fmt, arg_ptr);
 339          va_end(arg_ptr);
 340          while(i<uLen)
 341          {
 342          c1 = tmpBuf[i];
 343          c2 = tmpBuf[i+1];
 344          uRow = fnGetRow();
 345          uCol = fnGetCol();
 346          if(c1 >= 0)
 347          { // ASCII
 348          if(c1 < 0x20)
 349          {
 350          switch(c1)
 351          {
 352          case CR:
 353          case LF: // 回车或换行
 354          i++;
 355          if(uRow < 112)
 356          fnSetPos(uRow+16,0);
 357          else
 358          fnSetPos(0,0);
 359          continue;
 360          case BS: // 退格
 361          if(uCol > 0)
 362          uCol--;
 363          fnSetPos(uRow,uCol);
 364          cData = 0x00;
 365          break;
C51 COMPILER V7.08   55555                                                                 08/10/2005 07:11:22 PAGE 7   

 366          default: // 其他
 367          c1 = 0x1f;
 368          }
 369          }
 370          for(j=0;j<16;j++)
 371          {
 372          fnPR12(LC_AUT_WR); // 写数据
 373          if(c1 >= 0x1f)
 374          {
 375          if(j < (16-ASC_CHR_HEIGHT))
 376          fnPR13(0x00);
 377          else
 378          fnPR13(ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j-(16-
 379          ASC_CHR_HEIGHT)]);
 380          }
 381          else
 382          
 383          fnPR13(cData);
 384          fnPR12(LC_AUT_OVR);
 385          fnSetPos(uRow+j+1,uCol);
 386          }
 387          if(c1 != BS) // 非退格
 388          uCol++;
 389          }
 390          else
 391          { // 中文
 392          for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
 393          {
 394          if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
 395          break;
 396          }
 397          for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
 398          {
 399          fnSetPos(uRow+k,uCol);
 400          fnPR12(LC_AUT_WR); // 写数据
 401          if(j < sizeof(GB_16)/sizeof(GB_16[0]))
 402          {
 403          fnPR13(GB_16[j].Msk[k*2]);
 404          fnPR13(GB_16[j].Msk[k*2+1]);
 405          }
 406          else // 未找到该字
 407          {
 408          if(k < sizeof(GB_16[0].Msk)/4)
 409          {
 410          fnPR13(0x00);
 411          fnPR13(0x00);
 412          }
 413          else
 414          {
 415          fnPR13(0xff);
 416          fnPR13(0xff);
 417          }
 418          }
 419          fnPR12(LC_AUT_OVR);
 420          }
 421          uCol += 2;
 422          i++;
 423          }
 424          if(uCol >= 30) // 光标后移
 425          {
 426          uRow += 16;
 427          if(uRow < 0x80)
C51 COMPILER V7.08   55555                                                                 08/10/2005 07:11:22 PAGE 8   

 428          uCol -= 30;
 429          
 430          else
 431          {
 432          uRow = 0;
 433          uCol = 0;
 434          }
 435          }
 436          fnSetPos(uRow,uCol);
 437          i++;
 438          }
 439          return uLen;
 440          }
 441          */
 442          void main(void) // 测试用
 443          {
 444   1      fnLCMInit();
 445   1      cls();
 446   1      cursor(0,0);
 447   1      //dprintf("%s","This is a test:中文测试");
 448   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    274    ----
   CONSTANT SIZE    =   1160    ----
   XDATA SIZE       =    136    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2    ----
   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 + -