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

📄 main.lst

📁 LCM-12864汉字液晶显示驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 267   3                              {
 268   4                                      key1Check = key1Save;
 269   4                                      if ((key1Check & 0x01) == 0)
 270   4                                      {
 271   5                                              procKey();
 272   5                                      }
 273   4                              }
 274   3                      }       
 275   2              }
 276   1      }
 277          
 278          //===============================================
 279          bit scanKey1 (void)
 280          {
 281   1              key1Save = 0x00;
 282   1              key1Save |= KEY1;
 283   1              return (key1Save ^ key1Check);
 284   1      }
 285          //===============================================
 286          void procKey (void)
 287          {
 288   1              lcdClear();
 289   1              dispString(0, 0, 1, "系┃1:背光2:声响");
 290   1              dispString(1, 0, 1, "统┃3:日历4:温控");
 291   1              dispString(2, 0, 1, "设┃5:机控6:通讯");
 292   1              dispString(3, 0, 1, "置┃7:其他8:关于");
 293   1              
 294   1              beepBl();       
 295   1              key1Times++;
 296   1              if (key1Times == 9)
 297   1              {
 298   2                      key1Times = 1;
 299   2              }
 300   1      
 301   1              switch(key1Times)
 302   1              {
 303   2                      case 1: convertChar(0, 2, 6);
C51 COMPILER V7.50   MAIN                                                                  12/30/2005 12:13:31 PAGE 6   

 304   2                                      break;
 305   2                      case 2: convertChar(0, 5, 6);
 306   2                                      break;
 307   2                      case 3: convertChar(1, 2, 6);
 308   2                                      break;
 309   2                      case 4: convertChar(1, 5, 6);
 310   2                                      break;
 311   2                      case 5: convertChar(2, 2, 6);
 312   2                                      break;
 313   2                      case 6: convertChar(2, 5, 6);
 314   2                                      break;
 315   2                      case 7: convertChar(3, 2, 6);
 316   2                                      break;
 317   2                      case 8: convertChar(3, 5, 6);
 318   2                                      break;
 319   2              }
 320   1      }
 321          //===============================================
 322          void lcdInit (void)
 323          {
 324   1              MPU_RESET = LOW;
 325   1              delayMs(40);
 326   1              MPU_RESET = HIGH;
 327   1              delayMs(1);
 328   1              MPU_PS_CH = HIGH;
 329   1      
 330   1              lcdWriteCommand(cFunctionSetE);
 331   1              lcdWriteCommand(cFunctionSetB);
 332   1              lcdClear();
 333   1              lcdWriteCommand(cEntryModeSet);
 334   1              lcdWriteCommand(cDisplayOnCtrl);
 335   1      }
 336          //===============================================
 337          void lcdClear (void) 
 338          {
 339   1              lcdWriteCommand(cClearDisplay);
 340   1      }
 341          //===============================================
 342          void lcdWriteCommand (uchar Command) 
 343          {
 344   1              checkLcdBusy();
 345   1              MPU_RS_CH = LOW;
 346   1              MPU_RW_CH = LOW;
 347   1              LCD_DATA = Command;
 348   1              MPU_ENABLE = HIGH;
 349   1              delayMs(1);
 350   1              MPU_ENABLE = LOW;
 351   1      }
 352          
 353          //===============================================
 354          void lcdWriteData (uchar Data) 
 355          {
 356   1              checkLcdBusy();
 357   1              MPU_RS_CH = HIGH;
 358   1              MPU_RW_CH = LOW;
 359   1              LCD_DATA = Data;
 360   1              MPU_ENABLE = HIGH;
 361   1              delayMs(1);
 362   1              MPU_ENABLE = LOW;
 363   1      }
 364          //===============================================
 365          void checkLcdBusy (void) 
C51 COMPILER V7.50   MAIN                                                                  12/30/2005 12:13:31 PAGE 7   

 366          {
 367   1              LCD_DATA = 0xff;
 368   1              MPU_RS_CH = LOW;
 369   1              MPU_RW_CH = HIGH;
 370   1              MPU_ENABLE = HIGH;
 371   1              while (BUSY_FLAG);
 372   1              MPU_ENABLE = LOW;
 373   1      }
 374          //===============================================
 375          void displayPhoto (uchar *bmp, uchar bmpCls) 
 376          {
 377   1              lcdPosX = 0x80;
 378   1              halfScr = 2;
 379   1              
 380   1              for (;halfScr != 0; halfScr--)
 381   1              {
 382   2                      lcdPosY = 0x80;
 383   2                      halfLineCnt = 32;
 384   2                      
 385   2                      for (;halfLineCnt != 0; halfLineCnt--)
 386   2                      {
 387   3                              basicBlock = 16;
 388   3                              wrPosition ();
 389   3                              
 390   3                              for (; basicBlock != 0; basicBlock--)
 391   3                              {
 392   4                                      if (bmpCls == OFF)
 393   4                                      {
 394   5                                              lcdWriteData (*bmp++);
 395   5                                      }
 396   4                                      else if (bmpCls == ON)
 397   4                                      {
 398   5                                              lcdWriteData (0x00);
 399   5                                      }
 400   4                              }
 401   3                              lcdPosY++;
 402   3                      }
 403   2                      lcdPosX = 0x88;
 404   2              }
 405   1              lcdWriteCommand(cFuncDrawOn);
 406   1              lcdWriteCommand(cFunctionSetB);
 407   1      }
 408          //===============================================
 409          void convertChar (uchar CX, CY, width) 
 410          {
 411   1              displayPhoto(OFF,ON);
 412   1              lcdPosY = 0x80;
 413   1      
 414   1              if (CX == 0)
 415   1              {
 416   2                      CX = 0x80;
 417   2                      halfLineCnt = 16;
 418   2              }
 419   1              else if (CX == 1)
 420   1              {
 421   2                      CX = 0x80;
 422   2                      halfLineCnt = 32;
 423   2              }
 424   1              else if (CX == 2)
 425   1              {
 426   2                      CX = 0x88;
 427   2                      halfLineCnt = 16;
C51 COMPILER V7.50   MAIN                                                                  12/30/2005 12:13:31 PAGE 8   

 428   2              }
 429   1              else if (CX == 3)
 430   1              {
 431   2                      CX = 0x88;
 432   2                      halfLineCnt = 32;
 433   2              }
 434   1              lcdPosX = CX + CY;
 435   1              
 436   1          for (; halfLineCnt != 0; halfLineCnt--)
 437   1              {
 438   2                      basicBlock = width;
 439   2                      wrPosition();
 440   2              
 441   2                      for (;basicBlock != 0; basicBlock--)
 442   2                      {
 443   3                              if (halfLineCnt > 16)
 444   3                              {
 445   4                                      lcdWriteData(0x00);
 446   4                              }
 447   3                              else
 448   3                              {
 449   4                                      lcdWriteData (0xff);
 450   4                              }
 451   3                      }
 452   2                      lcdPosY++;
 453   2              }
 454   1      
 455   1              lcdWriteCommand(cFuncDrawOn);
 456   1              lcdWriteCommand(cFunctionSetB);
 457   1      }
 458          //===============================================
 459          void wrPosition (void) 
 460          {
 461   1              lcdWriteCommand(cFunctionSetE);
 462   1              lcdWriteCommand(lcdPosY);
 463   1              lcdWriteCommand(lcdPosX);
 464   1              lcdWriteCommand(cFunctionSetB);
 465   1      }
 466          //===============================================
 467          void dispString (uchar X, Y, speed, uchar *msg) 
 468          {
 469   1              if (X == 0)
 470   1              {
 471   2                      X = 0x80;
 472   2              }
 473   1              else if (X == 1)
 474   1              {
 475   2                      X = 0x90;
 476   2              }
 477   1              else if (X == 2)
 478   1              {
 479   2                      X = 0x88;
 480   2              }
 481   1              else if (X == 3)
 482   1              {
 483   2                      X = 0x98;
 484   2              }
 485   1              Y = X + Y;
 486   1              lcdWriteCommand(Y);
 487   1              while (*msg)
 488   1              {
 489   2                      lcdWriteData(*msg++);
C51 COMPILER V7.50   MAIN                                                                  12/30/2005 12:13:31 PAGE 9   

 490   2                      delayMs(speed);
 491   2              }
 492   1      }
 493          //===============================================
 494          void beepBl (void)
 495          {
 496   1              uchar i;
 497   1              for (i = 0; i < 100; i++)
 498   1              {
 499   2                      delayMs (2);
 500   2                      BEEP = !BEEP;
 501   2              }
 502   1              BEEP = 1;
 503   1      }
 504          //===============================================
 505          void delayMs (uchar ms) 
 506          {
 507   1              uchar i;
 508   1              while (--ms)
 509   1              {
 510   2                      for (i = 0; i < 125; i++);
 511   2              }
 512   1      }
 513          //===============================================
 514          void delaySec (uchar sec) 
 515          {
 516   1              uchar i;
 517   1              while (--sec)
 518   1              {
 519   2                      for (i = 0; i < 200; i++)
 520   2                      {
 521   3                              delayMs (6);
 522   3                      }
 523   2              }
 524   1      }
 525          //===============================================


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    958    ----
   CONSTANT SIZE    =   1205    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8      21
   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 + -