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

📄 t6963b.lst

📁 c8051学习机实验程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
              }
              #endif
 189          /********************************************************/
 190          /* 写无参数的指令                                       */
 191          /********************************************************/
 192          uchar fnPR12(uchar uCmd)
 193          {
 194   1              if(fnSTA01() == 0)
 195   1                      return 1;
 196   1              LCMCW = uCmd;
 197   1              return 0;                                       // 返回0成功
 198   1      }
 199          
 200          /********************************************************/
 201          /*  写数据                                              */
 202          /********************************************************/
 203          uchar fnPR13(uchar uData)
 204          {
 205   1              if(fnSTA3() == 0)
 206   1                      return 1;
 207   1              LCMDW = uData;
 208   1              return 0;                                       // 返回0成功
 209   1      }
 210          #if 0
              /********************************************************/
              /* 读数据                                               */
              /********************************************************/
              uchar fnPR2(void)
              {
                      if(fnSTA01() == 0)return 1;                     // 获取状态,如果状态错
                      return LCMDW;                                   // 返回数据
              }
              #endif
 220          /********************************************************/
 221          /* 设置当前地址                                         */
 222          /********************************************************/
 223          void fnSetPos(uchar urow, uchar ucol)
 224          {
 225   1              uint  iPos;
 226   1      
 227   1              iPos = urow * 30 + ucol;
 228   1              fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
 229   1              gCurRow = urow;
 230   1              gCurCol = ucol;
 231   1      }
 232          
 233          /********************************************************/
 234          /* 设置当前显示行、列                                   */
 235          /********************************************************/
 236          void cursor(uchar uRow, uchar uCol)
 237          {
 238   1              fnSetPos(uCol* 16, uRow);
 239   1      }
 240          
 241          /********************************************************/
C51 COMPILER V7.01  T6963B                                                                 03/31/2005 21:39:13 PAGE 5   

 242          /* 清屏                                                 */
 243          /********************************************************/
 244          void cls(void)
 245          {
 246   1              uint  i;
 247   1      
 248   1              fnPR1(LC_ADD_POS,0x00,0x00);    // 置地址指针为从零开始
 249   1              fnPR12(LC_AUT_WR);              // 自动写
 250   1              for(i=0;i<240*128/8;i++)        // 清一屏
 251   1                      {
 252   2                      fnSTA3();
 253   2                      fnPR13(0x0);            // 写数据,实际使用时请将0x55改成0x0
 254   2                      }
 255   1              fnPR12(LC_AUT_OVR);             // 自动写结束
 256   1              fnPR1(LC_ADD_POS,0x00,0x00);    // 重置地址指针
 257   1              gCurRow = 0;                    // 置地址指针存储变量
 258   1              gCurCol = 0;
 259   1      }
 260          
 261          /********************************************************/
 262          /* LCM 初始化                                           */
 263          /********************************************************/
 264          char fnLCMInit(void)
 265          {
 266   1              if(fnPR1(LC_TXT_STP,0x00,0x00) != 0)    // 文本显示区首地址
 267   1                      return (0xff);
 268   1              fnPR1(LC_TXT_WID,0x1E,0x00);            // 文本显示区宽度
 269   1              fnPR1(LC_GRH_STP,0x00,0x00);            // 图形显示区首地址
 270   1              fnPR1(LC_GRH_WID,0x1E,0x00);            // 图形显示区宽度
 271   1              fnPR12(LC_CUR_SHP | 0x01);              // 光标形状
 272   1              fnPR12(LC_MOD_OR);                      // 显示方式设置
 273   1              fnPR12(LC_DIS_SW | 0x08);               // 显示开关设置
 274   1              
 275   1              return 0;
 276   1      }
 277          
 278          /********************************************************/
 279          /* ASCII(8*16) 及 汉字(16*16) 显示函数                  */
 280            /* 其中有全局变量black表示是否反显   1: 反显  0: 正常 */
 281          
 282          /********************************************************/
 283          uchar dprintf(char *fmt,...)
 284          {
 285   1              va_list arg_ptr;
 286   1              char c1,c2,cData;
 287   1      
 288   1              char tmpBuf[80];// _at_ 0x40;   // LCD显示数据缓冲区
 289   1              uchar i=0,j,uLen,uRow,uCol;
 290   1              uint k;
 291   1      
 292   1              va_start(arg_ptr, fmt);
 293   1              uLen = (uchar) vsprintf(tmpBuf, fmt,arg_ptr);
 294   1              va_end(arg_ptr);
 295   1      
 296   1             // EA=0;
 297   1              while(i<uLen)
 298   1              {
 299   2      
 300   2                      c1 = tmpBuf[i];
 301   2                      c2 = tmpBuf[i+1];
 302   2                      uRow = fnGetRow();
 303   2                      uCol = fnGetCol();
C51 COMPILER V7.01  T6963B                                                                 03/31/2005 21:39:13 PAGE 6   

 304   2                      if(c1 > 0 )
 305   2                      {       // ASCII
 306   3                              if(c1 < 0x20)
 307   3                              {
 308   4                                      switch(c1)
 309   4                                      {
 310   5                                              case CR:
 311   5                                              case LF:                // 回车或换行
 312   5                                                      i++;
 313   5                                                      if(uRow < 144)
 314   5                                                              fnSetPos(uRow+16,0);
 315   5                                                      else
 316   5                                                              fnSetPos(0,0);
 317   5                                                      continue;
 318   5                                              case BS:                // 退格
 319   5                                                      if(uCol > 0)
 320   5                                                              uCol--;
 321   5                                                      fnSetPos(uRow,uCol);
 322   5                                                      cData = 0x00;
 323   5                                                      break;
 324   5                                              default:                // 其他
 325   5                                                      c1 = 0x1f;
 326   5                                      }
 327   4                              }
 328   3                              for(j=0;j<16;j++)
 329   3                              {
 330   4                                      fnPR12(LC_AUT_WR);              // 写数据
 331   4                                      if(c1 >= 0x20)
 332   4                                      {
 333   5                                              if( j < (16-ASC_CHR_HEIGHT) )
 334   5                                                      fnPR13(0x00);   // 写数据0输出空
 335   5                                              else
 336   5                                                      fnPR13((0xff*black)^ASC_MSK[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)]);
 337   5                                      }
 338   4                                      else
 339   4                                              fnPR13(cData);
 340   4                                      fnPR12(LC_AUT_OVR);
 341   4                                      fnSetPos(uRow+j+1,uCol);
 342   4                              }
 343   3                              if(c1 != BS)            // 非退格
 344   3                                      uCol++;
 345   3                      }
 346   2      
 347   2                      else
 348   2                      {       // 中文
 349   3                              for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
 350   3                              {
 351   4                                      if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
 352   4                                              break;
 353   4                              }
 354   3                              for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
 355   3                              {
 356   4                                      fnSetPos(uRow+k,uCol);
 357   4                                      fnPR12(LC_AUT_WR);                      // 写数据
 358   4                                      if(j < sizeof(GB_16)/sizeof(GB_16[0]))
 359   4                                      {
 360   5                                              fnPR13((0xff*black)^GB_16[j].Msk[k*2]);
 361   5                                              fnPR13((0xff*black)^GB_16[j].Msk[k*2+1]);
 362   5                                      }
 363   4                                      else                                            // 未找到该字
 364   4                                      {
 365   5                                              if(k < sizeof(GB_16[0].Msk)/4)
C51 COMPILER V7.01  T6963B                                                                 03/31/2005 21:39:13 PAGE 7   

 366   5                                              {
 367   6                                                      fnPR13(0x00);
 368   6                                                      fnPR13(0x00);
 369   6                                              }
 370   5                                              else
 371   5                                              {
 372   6                                                      fnPR13(0xff);
 373   6                                                      fnPR13(0xff);
 374   6                                              }
 375   5                                      }
 376   4                                      fnPR12(LC_AUT_OVR);
 377   4                              }
 378   3                              uCol += 2;
 379   3                              i++;
 380   3                      }
 381   2                      if(uCol >=30)                   // 光标后移

⌨️ 快捷键说明

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