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

📄 lce128642.lst

📁 12864的LCD驱动程序加仿真,可以运行和调整的,自己弄得,大家批判了
💻 LST
📖 第 1 页 / 共 5 页
字号:
 285   2      if (col==LCMLIMIT){col=0;row++;row++;}; /*下一列,如果列越界换行*/
 286   2      if (row>7) row=0; /*如果行越界,返回首行 */
 287   2      } /*上半个字符输出结束 */
 288   1      
 289   1      col = bakerx; /*列对齐 */
 290   1      row = bakery+1; /*指向下半个字符行 */
 291   1      /*下半个字符输出,8列 */
 292   1      for(i=0;i<8;i++)
 293   1      {
 294   2      cbyte = Ezk[x]; /*取点阵码 */
 295   2      Wrdata(cbyte); /*写输出一字节 */
 296   2      x++;
 297   2      col++;
 298   2      if (col==LCMLIMIT){col=0;row=row+2;}; /*下一列,如果列越界换行*/
 299   2      if (row>7) row=1; /*如果行越界,返回首行 */
 300   2      } /*下半个字符输出结束 */
 301   1      row=bakery;
 302   1      } /*整个字符输出结束 */
 303          
C51 COMPILER V6.12  LCE128642                                                              04/27/2007 18:12:05 PAGE 6   

 304          
 305          /****************************************/
 306          /*  全角字符点阵码数据输出 */
 307          /****************************************/
 308          void Putcdot(Uchar Order)
 309          {
 310   1      Uchar i,bakerx,bakery; /*共定义3个局部变量 */
 311   1      int x; /*偏移量,字符量少的可以定义为UCHAR */
 312   1      bakerx = col; /*暂存x,y坐标,已备下半个字符使用 */
 313   1      bakery = row;
 314   1      x=Order * 0x20; /*每个字符32字节 */
 315   1      
 316   1      /*上半个字符输出,16列 */
 317   1      for(i=0;i<16;i++)
 318   1      {
 319   2      Wrdata(Hzk[x]); /*写输出一字节 */
 320   2      x++;
 321   2      col++;
 322   2      if (col==LCMLIMIT){ col=0;row++;row++;} /*下一列,如果列越界换行*/
 323   2      if (row>6) row=0; /*如果行越界,返回首行 */
 324   2      } /*上半个字符输出结束 */
 325   1      
 326   1      /*下半个字符输出,16列 */
 327   1      col = bakerx;
 328   1      row = bakery+1;
 329   1      for(i=0;i<16;i++) /*下半部分*/
 330   1      {
 331   2      Wrdata(Hzk[x]);
 332   2      x++;
 333   2      col++;
 334   2      if (col==LCMLIMIT){col=0;row++;row++;} /*下一列,如果列越界换行*/
 335   2      if (row>7) row=1; /*如果行越界,返回首行 */
 336   2      } /*下半个字符输出结束 */
 337   1      row = bakery;
 338   1      } /*整个字符输出结束 */
 339          
 340          /****************************************/
 341          /* 清屏,全屏幕清零 */
 342          /****************************************/
 343          void Lcmcls( void )
 344          {
 345   1      for(row=0;row<8;row++)
 346   1          for(col=0;col<LCMLIMIT;col++) Wrdata(0);
 347   1      }
 348          
 349          /****************************************/
 350          /*  从液晶片上读数据,保留在全局变量中 */
 351          /****************************************/
 352          
 353          void Rddata(void)
 354          {
 355   1      Locatexy(); /*坐标定位,返回时保留分区状态不变 */
 356   1      Datalcm=0xFF;
 357   1      Dilcm = 1; 
 358   1      Rwlcm=1; /*读数据*/
 359   1      Elcm = 1; /*读入到LCM*/
 360   1      _nop_();
 361   1      cbyte = Datalcm; /*虚读一次 */
 362   1      Elcm = 0;
 363   1      Locatexy(); /*坐标定位,返回时保留分区状态不变 */
 364   1      Datalcm=0xFF;
 365   1      _nop_();
C51 COMPILER V6.12  LCE128642                                                              04/27/2007 18:12:05 PAGE 7   

 366   1      Dilcm = 1; /*数据*/
 367   1      Rwlcm = 1; /*读数据*/
 368   1      Elcm = 1; /*读入到LCM*/
 369   1      _nop_();
 370   1      cbyte = Datalcm; /*从数据口读数据,真读 */
 371   1      Elcm = 0;
 372   1      }
 373          
 374          /****************************************/
 375          /* 数据写输出 */
 376          /****************************************/
 377          
 378          void Wrdata(Uchar X)
 379          {
 380   1      Locatexy(); /*坐标定位,返回时保留分区状态不变 */
 381   1      // wtcom();
 382   1      Dilcm = 1; /*数据输出*/
 383   1      Rwlcm = 0; 
 384   1      Datalcm = X; /*数据输出到数据口 */
 385   1      Elcm = 1; /*读入到LCM*/
 386   1      _nop_();
 387   1      Elcm = 0;
 388   1      }
 389          
 390          
 391          /********************************/
 392          /* 命令输出到左区控制口 */
 393          /********************************/
 394          
 395          void WrcmdL(Uchar X)
 396          {
 397   1      lcdbusyL(); /*确定分区,返回时保留分区状态不变*/
 398   1      Dilcm = 0; /*命令操作 */
 399   1      Rwlcm = 0; /*写输出   */
 400   1      Datalcm = X; /*数据输出到数据口 */
 401   1      Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
 402   1      }
 403          
 404          /********************************/
 405          /* 命令输出到中区控制口 */
 406          /********************************/
 407          
 408          void WrcmdM(Uchar X)
 409          {
 410   1      //lcdbusyM(); /*确定分区,返回时保留分区状态不变*/
 411   1      Dilcm = 0; /*命令操作 */
 412   1      Rwlcm = 0; /*写输出   */
 413   1      Datalcm = X; /*命令输出到数据口 */
 414   1      Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
 415   1      }
 416          
 417          /********************************/
 418          /* 命令输出到右区控制口 */
 419          /********************************/
 420          
 421          void WrcmdR(Uchar X)
 422          {
 423   1      lcdbusyR(); /*确定分区,返回时保留分区状态不变 */
 424   1      Dilcm = 0; /*命令操作 */
 425   1      Rwlcm = 0; /*写输出   */
 426   1      Datalcm = X; /*命令输出到数据口 */
 427   1      Elcm = 1;_nop_();Elcm = 0; /*读入到LCM*/
C51 COMPILER V6.12  LCE128642                                                              04/27/2007 18:12:05 PAGE 8   

 428   1      }
 429          
 430          /********************************************************/
 431          /* 分区操作允许等待,返回时保留分区选择状态 */
 432          /********************************************************/
 433          void lcdbusyL(void)
 434          {
 435   1              CS1LCM = 0; /*CLR CS1 */
 436   1              CS2LCM = 1; /*SETB CS2 */
 437   1      //        CS3LCM = 1; /*SETB CS3 */
 438   1      wtcom(); /* waitting for enable */
 439   1      }
 440          
 441          
 442          void lcdbusyR(void)
 443          {
 444   1              CS1LCM = 1; /*SETB CS1 */
 445   1              CS2LCM = 0; /*SETB CS2 */
 446   1      //        CS3LCM = 0; /*CLR CS3 */
 447   1      wtcom(); /* waitting for enable */
 448   1      }
 449          
 450          void wtcom(void)
 451          {
 452   1      Dilcm = 0; /*CLR DI */
 453   1      Rwlcm = 1; /*SETB RW */
 454   1              Datalcm = 0xFF; /*MOV DATA_LCM,#0FFH  */
 455   1         Elcm  = 1;_nop_(); 
 456   1             //while(Datalcm & Lcdbusy);
 457   1      		 Delay(1);
 458   1             Elcm  = 0;
 459   1      }
 460          
 461          /********************************************************/
 462          /*根据设定的坐标数据,定位LCM上的下一个操作单元位置 */
 463          /********************************************************/
 464          void Locatexy(void)
 465          {
 466   1      unsigned char  x,y;
 467   1      switch (col&0xc0) /*  col.and.0xC0 */
 468   1      { /*条件分支执行 */
 469   2      case 0: {lcdbusyL();break;} /*左区 */
 470   2      //case 0x40: {lcdbusyM();break;} /*中区 */
 471   2      case 0x40: {lcdbusyR();break;} /*右区 */
 472   2      }
 473   1      x = col&0x3F|SETX; /*  col.and.0x3f.or.setx */
 474   1      y = row&0x07|SETY; /*  row.and.0x07.or.sety */
 475   1      wtcom(); /*  waitting for enable */
 476   1      Dilcm = 0; /*CLR DI */
 477   1      Rwlcm = 0; /*CLR RW */
 478   1      Datalcm = y; /*MOV P0,Y */
 479   1      Elcm = 1;_nop_();Elcm = 0;
 480   1      wtcom(); /*  waitting for enable */
 481   1      Dilcm = 0; /*CLR DI */
 482   1      Rwlcm = 0; /*CLR RW */
 483   1      Datalcm = x; /*MOV P0,X */
 484   1      Elcm = 1;_nop_();Elcm = 0;
 485   1      }
 486          
 487          /********************************/
 488          /*液晶屏初始化 */
 489          /********************************/
C51 COMPILER V6.12  LCE128642                                                              04/27/2007 18:12:05 PAGE 9   

 490          
 491          void Lcminit(void)
 492          {
 493   1      cbyte = DISPOFF; /*关闭显示屏 */
 494   1      WrcmdL(cbyte);
 495   1      WrcmdM(cbyte);
 496   1      WrcmdR(cbyte);
 497   1      cbyte = DISPON; /*打开显示屏 */
 498   1      WrcmdL(cbyte);
 499   1      WrcmdM(cbyte);
 500   1      WrcmdR(cbyte);
 501   1      cbyte = DISPFIRST; /*定义显示起始行为零 */
 502   1      WrcmdL(cbyte);
 503   1      WrcmdM(cbyte);
 504   1      WrcmdR(cbyte);
 505   1      Lcmcls();
 506   1      col=0; /*清屏 */
 507   1      row=0;
 508   1      Locatexy();
 509   1      }
 510          /********************************/
 511          /* 延时 */
 512          /********************************/
 513          void Delay(Uchar MS)
 514          {
 515   1      Uchar us,usn;
 516   1      while(MS!=0)
 517   1      { usn = 4;
 518   2      while(usn!=0)
 519   2      {
 520   3      us=0xf0;
 521   3      while (us!=0){us--;};
 522   3      usn--;
 523   3      }
 524   2      MS--;
 525   2      }
 526   1      }
 527          
 528          /********************************/
 529          //定义字符串数组 */
 530          /********************************/
 531          
 532          
 533          Uchar  const STRh1[]={0x80,0x81};
 534          Uchar  const STRh2[]={0x82,0x85};
 535          Uchar  const STRh3[]={0x83,0x85};
 536          Uchar  const STRh4[]={0x84,0x85};
 537          
 538          
 539          /********************************/
 540          /*  定义中文字库 */
 541          /********************************/
 542          
 543          
 544          
 545          void display(void)
 546          {col=0x40;
 547   1      row=0;
 548   1      Putstr(STRh1,2);
 549   1             /*第一行字符输出,24字节 */
 550   1      
 551   1      col=0;
C51 COMPILER V6.12  LCE128642                                                              04/27/2007 18:12:05 PAGE 10  

 552   1      row=2;
 553   1      Putstr(STRh2,2); /*第二行字符输出,12字节 */
 554   1      Putstr(dot2,1);
 555   1      
 556   1      compute(disdatahou,datahou);
 557   1      Putstr(disdatahou,4);
 558   1      
 559   1      col=0;
 560   1      row=4;
 561   1      Putstr(STRh3,2); /*第三行字符输出,24字节 */
 562   1      Putstr(dot2,1);
 563   1      compute(disdatazuo,datazuo);
 564   1      Putstr(disdatazuo,4);
 565   1      
 566   1      col=0;
 567   1      row=6;
 568   1      Putstr(STRh4,2); /*第三行字符输出,24字节4 */
 569   1      Putstr(dot2,1);
 570   1      compute(disdatayou,datayou);
 571   1      Putstr(disdatayou,4);
 572   1      }
 573          
 574           void compute(Uchar *disdata,Uchar shuju)
 575                {Uchar temp;

⌨️ 快捷键说明

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