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

📄 pg160128a.lst

📁 本程序是基于T6963C的程序 好用 欢迎下载
💻 LST
📖 第 1 页 / 共 3 页
字号:
 220          
 221          /******************************* 清屏函数 ********************************/
 222          void cls(void) {
 223   1        uint i;
 224   1        fnPR1(LC_ADD_POS,0x00,0x00);  /* 置地址指针 */
 225   1        fnPR12(LC_AUT_WR);                            /* 自动写 */
 226   1        for(i=0;i<320*30;i++) {
 227   2                      fnST3();
 228   2                      fnPR13(0x00);                           /* 写数据 */
 229   2        }
 230   1        fnPR12(LC_AUT_OVR);                   /* 自动写结束 */
 231   1        fnPR1(LC_ADD_POS,0x00,0x00);  /* 重置地址指针 */
 232   1        gCurRow = 0;                                  /* 置地址指针存储变量 */
 233   1        gCurCol = 0;
 234   1      }
 235          
 236          /************************** 液晶模块初始化函数 ***************************/
 237          char fnLCMInit(void) {
 238   1        if(fnPR1(LC_TXT_STP,0x7f,0x1d) != 0) /* 文本显示区首地址 */
 239   1                      return -1;
 240   1        fnPR1(LC_TXT_WID,20,0x00);            /* 文本显示区宽度 */
 241   1        fnPR1(LC_GRH_STP,0x00,0x00);          /* 图形显示区首地址 */
C51 COMPILER V7.06   PG160128A                                                             05/16/2009 11:06:12 PAGE 5   

 242   1        fnPR1(LC_GRH_WID,20,0x00);            /* 图形显示区宽度 */
 243   1        fnPR1(LC_CGR_POS,3,0x00);         //设置偏置地址0x1c00为字符0x80的地址
 244   1        fnPR12(LC_CUR_SHP | 0x01);            /* 光标形状 */
 245   1        fnPR12(LC_MOD_XOR);                           /* 显示方式设置 */
 246   1        fnPR12(LC_DIS_SW | 0x0c);                     /* 显示开关设置 */
 247   1        return 0;
 248   1      }
 249          
 250          /**************** ASCII码(8×16)及汉字(16×16)显示函数   第一页 ******************/
 251          uchar dprintf(char *fmt, ...) {
 252   1        va_list arg_ptr;
 253   1        char c1,c2,cData;
 254   1        char tmpBuf[64];                                      /* LCD显示数据缓冲区 */
 255   1        uchar i=0,j,uLen,uRow,uCol;
 256   1        uint k;
 257   1        va_start(arg_ptr, fmt);
 258   1        uLen = (uchar)vsprintf(tmpBuf, fmt, arg_ptr);
 259   1        va_end(arg_ptr);
 260   1        while(i<uLen) {
 261   2                      c1 = tmpBuf[i];
 262   2                      c2 = tmpBuf[i+1];
 263   2                      uRow = fnGetRow();
 264   2                      uCol = fnGetCol();
 265   2                      if(c1 >= 0) {                                   //* ASCII码
 266   3                   
 267   3                              if(c1 < 0x20) {
 268   4                                      switch(c1) {
 269   5                                              case CR:
 270   5                                              case LF: i++;           // 回车或换行 
 271   5                                              if(uRow < 112)  
 272   5                              fnSetPos(uRow+16,0);
 273   5                                              else
 274   5                                                      fnSetPos(0,0);
 275   5                                                      continue;
 276   5                                              case BS:                        // 退格 
 277   5                                              if(uCol > 0)  uCol--;                   
 278   5                                              fnSetPos(uRow,uCol);
 279   5                                              cData = 0x00;
 280   5                                              break;
 281   5                                              default:                        // 其他 
 282   5                                              c1 = 0x1f;
 283   5                                      }
 284   4                              }
 285   3                              for(j=0;j<16;j++) {
 286   4                                      fnPR12(LC_AUT_WR);              // 写数据 
 287   4                                      if(c1 >= 0x1f) {                 
 288   5                                                 
 289   5                                                      fnPR13(ASC_MSK[(c1-0x1f-1)*ASC_CHR_HEIGHT+j]);                       
 290   5                              
 291   5                                      }
 292   4                                      else
 293   4                                              fnPR13(cData);
 294   4                                      fnPR12(LC_AUT_OVR);
 295   4                                      fnSetPos(uRow+j+1,uCol);
 296   4                              }
 297   3                              if(c1 != BS) uCol++;                            /* 非退格 */
 298   3                      }
 299   2                      else {                                                          /* 中文 */
 300   3                              for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++) {
 301   4                                      if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
 302   4                                      break;
 303   4                              }
C51 COMPILER V7.06   PG160128A                                                             05/16/2009 11:06:12 PAGE 6   

 304   3                              for(k=0;k<sizeof(GB_16[0].Msk)/2;k++) {
 305   4                                      fnSetPos(uRow+k,uCol);
 306   4                                      fnPR12(LC_AUT_WR);                      /* 写数据 */
 307   4                                      if(j < sizeof(GB_16)/sizeof(GB_16[0])) {
 308   5                                              fnPR13(GB_16[j].Msk[k*2]);
 309   5                                              fnPR13(GB_16[j].Msk[k*2+1]);
 310   5                                      }
 311   4                                      else {                                          /* 未找到该字 */
 312   5                                              if(k < sizeof(GB_16[0].Msk)/4) {
 313   6                                              fnPR13(0x00);
 314   6                                              fnPR13(0x00);
 315   6                                              }
 316   5                                              else {
 317   6                                                      fnPR13(0xff);
 318   6                                                      fnPR13(0xff);
 319   6                                              }
 320   5                                      }
 321   4                                      fnPR12(LC_AUT_OVR);
 322   4                              }
 323   3                              uCol += 2;
 324   3                              i++;
 325   3                      }
 326   2                      if(uCol >= 30) {                                                /* 光标后移 */
 327   3                              uRow += 16;
 328   3                              if(uRow < 0x80) uCol -= 30;
 329   3                              else {
 330   4                                      uRow = 0;
 331   4                                      uCol = 0;
 332   4                              }
 333   3                      }
 334   2                      fnSetPos(uRow,uCol);
 335   2                      i++;
 336   2        }
 337   1        return uLen;
 338   1      }
 339          
 340          /**************** ASCII码(8×16)及汉字(16×16)显示函  第二页 ******************/
 341          uchar dprintf1(char *fmt, ...) {
 342   1        va_list arg_ptr;
 343   1        char c1,c2,cData;
 344   1        char tmpBuf[64];                                      /* LCD显示数据缓冲区 */
 345   1        uchar i=0,j,uLen,uRow,uCol;
 346   1        uint k;
 347   1        va_start(arg_ptr, fmt);
 348   1        uLen = (uchar)vsprintf(tmpBuf, fmt, arg_ptr);
 349   1        va_end(arg_ptr);
 350   1        while(i<uLen) {
 351   2                      c1 = tmpBuf[i];
 352   2                      c2 = tmpBuf[i+1];
 353   2                      uRow = fnGetRow();
 354   2                      uCol = fnGetCol();
 355   2                      if(c1 >= 0) {                                   //* ASCII码
 356   3                   
 357   3                              if(c1 < 0x20) {
 358   4                                      switch(c1) {
 359   5                                              case CR:
 360   5                                              case LF: i++;           // 回车或换行 
 361   5                                              if(uRow < 112)  
 362   5                              fnSetPos1(uRow+16,0);
 363   5                                              else
 364   5                                                      fnSetPos1(0,0);
 365   5                                                      continue;
C51 COMPILER V7.06   PG160128A                                                             05/16/2009 11:06:12 PAGE 7   

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

 428   1        return uLen;
 429   1      }
 430          
 431          /********************************文本方式下,用指定数据填充字符***********/
 432          void cgram80(uchar myc)
 433                  {
 434   1                      unsigned int i;
 435   1                      fnPR1(LC_ADD_POS,0x00,0x1c);    /* 置地址指针 */
 436   1                      fnPR12(LC_AUT_WR);                              /* 自动写 */
 437   1                      for(i=0;i<8;i++) 
 438   1                              {
 439   2                                      fnST3();
 440   2                                      fnPR13(myc);                            /* 写数据 */
 441   2                              }
 442   1                      fnPR12(LC_AUT_OVR);                     /* 自动写结束 */
 443   1                      fnPR1(LC_ADD_POS,0x00,0x00);    /* 重置地址指针 */
 444   1                      gCurRow = 0;                                    /* 置地址指针存储变量 */
 445   1                      gCurCol = 0;

⌨️ 快捷键说明

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