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

📄 text1.lst

📁 一个液晶显示器TX240128程序。我把我小孩的相片做在上面了
💻 LST
📖 第 1 页 / 共 2 页
字号:
 267          0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,0x04,0x60,0x18,0x1E,0xE0,0x08,0x00,0x00,
 268          "测",0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
 269          0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04,
 270          "试",0x00,0x20,0x40,0x28,0x20,0x24,0x30,0x24,0x27,0xFE,0x00,0x20,0xE0,0x20,0x27,0xE0,
 271          0x21,0x20,0x21,0x10,0x21,0x10,0x21,0x0A,0x29,0xCA,0x36,0x06,0x20,0x02,0x00,0x00,
 272          };
 273          uchar gCurRow,gCurCol; // 当前行、列存储,行高16 点,列宽8 点
 274          uchar fnGetRow(void)
 275          {
 276          return gCurRow;
 277          }
 278          uchar fnGetCol(void)
 279          {
 280          return gCurCol;
 281          }
 282          uchar fnST01(void) // 状态位STA1,STA0 判断(读写指令和读写数据)
 283          {
 284          uchar i;
 285          for(i=10;i>0;i--)
 286          {
 287          if((LCMCW & 0x03) == 0x03)
 288          break;
 289          }
 290          return i; // 若返回零,说明错误
 291          }
 292          uchar fnST2(void) // 状态位ST2 判断(数据自动读状态)
 293          {
 294          uchar i;
 295          for(i=10;i>0;i--)
 296          {
 297          if((LCMCW & 0x04) == 0x04)
 298          break;
 299          }
 300          return i; // 若返回零,说明错误
 301          }
 302          uchar fnST3(void) // 状态位ST3 判断(数据自动写状态)
 303          {
C51 COMPILER V6.12  TEXT1                                                                  08/27/2008 00:32:44 PAGE 6   

 304          uchar i;
 305          for(i=10;i>0;i--)
 306          {
 307          if((LCMCW & 0x08) == 0x08)
 308          break;
 309          }
 310          return i; // 若返回零,说明错误
 311          }
 312          uchar fnST6(void) // 状态位ST6 判断(屏读/屏拷贝状态)
 313          {
 314          uchar i;
 315          for(i=10;i>0;i--)
 316          {
 317          if((LCMCW & 0x40) == 0x40)
 318          break;
 319          }
 320          return i; // 若返回零,说明错误
 321          }
 322          uchar fnPR1(uchar uCmd,uchar uPar1,uchar uPar2) // 写双参数的指令
 323          {
 324          if(fnST01() == 0)
 325          return 1;
 326          LCMDW = uPar1;
 327          if(fnST01() == 0)
 328          return 2;
 329          LCMDW = uPar2;
 330          if(fnST01() == 0)
 331          return 3;
 332          LCMCW = uCmd;
 333          return 0; // 返回0 成功
 334          }
 335          uchar fnPR11(uchar uCmd,uchar uPar1) // 写单参数的指令
 336          {
 337          if(fnST01() == 0)
 338          return 1;
 339          LCMDW = uPar1;
 340          if(fnST01() == 0)
 341          return 2;
 342          LCMCW = uCmd;
 343          return 0; // 返回0 成功
 344          }
 345          uchar fnPR12(uchar uCmd) // 写无参数的指令
 346          {
 347          if(fnST01() == 0)
 348          return 1;
 349          LCMCW = uCmd;
 350          return 0; // 返回0 成功
 351          }
 352          uchar fnPR13(uchar uData) // 写数据
 353          {
 354          if(fnST3() == 0)
 355          return 1;
 356          LCMDW = uData;
 357          return 0; // 返回0 成功
 358          }
 359          uchar fnPR2(void) // 读数据
 360          {
 361          if(fnST01() == 0)
 362          return 1;
 363          return LCMDW;
 364          }
 365          // 设置当前地址
C51 COMPILER V6.12  TEXT1                                                                  08/27/2008 00:32:44 PAGE 7   

 366          void fnSetPos(uchar urow, uchar ucol)
 367          {
 368          uint iPos;
 369          iPos = urow * 30 + ucol;
 370          fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
 371          gCurRow = urow;
 372          gCurCol = ucol;
 373          }
 374          // 设置当前显示行、列
 375          void cursor(uchar uRow, uchar uCol)
 376          {
 377          fnSetPos(uRow * 16, uCol);
 378          }
 379          // 清屏
 380          void cls(void)
 381          {
 382          uint i;
 383          fnPR1(LC_ADD_POS,0x00,0x00); // 置地址指针
 384          fnPR12(LC_AUT_WR); // 自动写
 385          for(i=0;i<240*30;i++)
 386          {
 387          fnST3();
 388          fnPR13(0x00); // 写数据
 389          }
 390          fnPR12(LC_AUT_OVR); // 自动写结束
 391          fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指针
 392          gCurRow = 0; // 置地址指针存储变量
 393          gCurCol = 0;
 394          }
 395          // LCM 初始化
 396          char fnLCMInit(void)
 397          {
 398          if(fnPR1(LC_TXT_STP,0x00,0x00) != 0) // 文本显示区首地址
 399          return -1;
 400          fnPR1(LC_TXT_WID,0x1E,0x00); // 文本显示区宽度
 401          fnPR1(LC_GRH_STP,0x00,0x00); // 图形显示区首地址
 402          fnPR1(LC_GRH_WID,0x1E,0x00); // 图形显示区宽度
 403          fnPR12(LC_CUR_SHP | 0x01); // 光标形状
 404          fnPR12(LC_MOD_OR); // 显示方式设置
 405          fnPR12(LC_DIS_SW | 0x08); // 显示开关设置
 406          return 0;
 407          }
 408          // ASCII(8*16) 及 汉字(16*16) 显示函数
 409          uchar dprintf(char *fmt, ...)
 410          {
 411          va_list arg_ptr;
 412          char c1,c2,cData;
 413          char tmpBuf[64]; // LCD显示数据缓冲区
 414          uchar i=0,j,uLen,uRow,uCol;
 415          uint k;
 416          va_start(arg_ptr, fmt);
 417          uLen = (uchar)vsprintf(tmpBuf, fmt, arg_ptr);
 418          va_end(arg_ptr);
 419          while(i<uLen)
 420          {
 421          c1 = tmpBuf[i];
 422          c2 = tmpBuf[i+1];
 423          uRow = fnGetRow();
 424          uCol = fnGetCol();
 425          if(c1 >= 0)
 426          { // ASCII
 427          if(c1 < 0x20)
C51 COMPILER V6.12  TEXT1                                                                  08/27/2008 00:32:44 PAGE 8   

 428          {
 429          switch(c1)
 430          {
 431          case CR:
 432          case LF: // 回车或换行
 433          i++;
 434          if(uRow < 112)
 435          fnSetPos(uRow+16,0);
 436          else
 437          fnSetPos(0,0);
 438          continue;
 439          case BS: // 退格
 440          if(uCol > 0)
 441          uCol--;
 442          fnSetPos(uRow,uCol);
 443          cData = 0x00;
 444          break;
 445          default: // 其他
 446          c1 = 0x1f;
 447          }
 448          }
 449          for(j=0;j<16;j++)
 450          {
 451          fnPR12(LC_AUT_WR); // 写数据
 452          if(c1 >= 0x1f)
 453          {
 454          if(j < (16-ASC_CHR_HEIGHT))
 455          fnPR13(0x00);
 456          else
 457          fnPR13(ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j-(16-
 458          ASC_CHR_HEIGHT)]);
 459          }
 460          else
 461          fnPR13(cData);
 462          fnPR12(LC_AUT_OVR);
 463          fnSetPos(uRow+j+1,uCol);
 464          }
 465          if(c1 != BS) // 非退格
 466          uCol++;
 467          }
 468          else
 469          { // 中文
 470          for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
 471          {
 472          if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
 473          break;
 474          }
 475          for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
 476          {
 477          fnSetPos(uRow+k,uCol);
 478          fnPR12(LC_AUT_WR); // 写数据
 479          if(j < sizeof(GB_16)/sizeof(GB_16[0]))
 480          {
 481          fnPR13(GB_16[j].Msk[k*2]);
 482          fnPR13(GB_16[j].Msk[k*2+1]);
 483          }
 484          else // 未找到该字
 485          {
 486          if(k < sizeof(GB_16[0].Msk)/4)
 487          {
 488          fnPR13(0x00);
 489          fnPR13(0x00);
C51 COMPILER V6.12  TEXT1                                                                  08/27/2008 00:32:44 PAGE 9   

 490          }
 491          else
 492          {
 493          fnPR13(0xff);
 494          fnPR13(0xff);
 495          }
 496          }
 497          fnPR12(LC_AUT_OVR);
 498          }
 499          uCol += 2;
 500          i++;
 501          }
 502          if(uCol >= 30) // 光标后移
 503          {
 504          uRow += 16;
 505          if(uRow < 0x80)
 506          uCol -= 30;
 507          else
 508          {
 509          uRow = 0;
 510          uCol = 0;
 511          }
 512          }
 513          fnSetPos(uRow,uCol);
 514          i++;
 515          }
 516          return uLen;
 517          }
 518          void main(void) // 测试用
 519          {
 520          fnLCMInit();
 521          cls();
 522          cursor(0,0);
 523          dprintf("%s","This is a test:中文测试");
 524          }
 525          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =     28    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   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 + -