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

📄 lcd_part_12864j.lst

📁 C51单片机对st7920并行方式驱动128*64液晶驱动,实现任意位置坐标位置写入图片;自动画线;自动画圆;任意位置反显等功能。
💻 LST
📖 第 1 页 / 共 3 页
字号:
 436   5                                              break;
 437   5                                       }
 438   4      
 439   4      //-------------------------------------------------------
 440   4      // Open fire
 441   4                                                              
 442   4                                      B = B << 1;                     //move data; 开枪!!
 443   4                                      gcount--;
 444   4                                      g++;
 445   4                              }
 446   3                      }
 447   2              }
 448   1      //-------------------------------------------------------
 449   1      // Complete writing lcd's data task
 450   1              wr_lcd (comm,DISPLAY_ON);
 451   1              return error;
 452   1      }
 453          
 454          
 455          /******************************************************************************************
 456          * 函数名称    :lcd_china 
 457          * 功能描述    :LCD中文显示函数,汉字显示从左上角0位开始,总共显示32个字,中文两个字节,
 458          *                               英文只有1个字节,所以英文个数要偶数个才能正常显示,奇数个加空格。
 459          * 参数        :  参数名称:    输入/输出       类型                    描述
 460          *                                       *chn              input                 uchar           ASCII数据组,最大32汉字
 461          * 返回值      :
 462          * 作者        :lujian
 463          * 创建日期    :2003-12-19
 464          * 全局变量    :
 465          * 全局静态变量:
 466          * 局部静态变量:
 467          *----------------------------------------修改历史------------------------------------------
 468          * 当前版本    :0.0.2                    修改人:lujian                  修改日期:2009-3-16
 469          * 修改说明    :
 470          ******************************************************************************************/
 471          
 472          void lcd_china(uchar code *chn)
 473          {
 474   1              uchar i, j, c;
 475   1              c = strlen(chn);
 476   1              wr_lcd(comm,FUN_MODE);
 477   1              for(j=0;j<4;j++)
 478   1              {
 479   2              switch (j)
 480   2                      {
 481   3                  case 0:
 482   3                    wr_lcd(comm,0x80); break;
 483   3                  case 1:
 484   3                    wr_lcd(comm,0x90); break;
 485   3                  case 2:
 486   3                    wr_lcd(comm,0x88); break;
 487   3                  case 3:
 488   3                    wr_lcd(comm,0x98); break;
 489   3                       }
C51 COMPILER V8.15   LCD_PART_12864J                                                       03/17/2009 18:11:02 PAGE 9   

 490   2                      for(i=0;i<16;i++)
 491   2                      {
 492   3                      if(c > 0)
 493   3                              {
 494   4                                      wr_lcd(dat,chn[j*16+i]);                         //writing lcd's data of ASCII
 495   4                                      c--;
 496   4                              }
 497   3                              else
 498   3                              {
 499   4                                      wr_lcd(dat,0x20);
 500   4                              }
 501   3                      }
 502   2              }
 503   1      }
 504          
 505          /******************************************************************************************
 506          * 函数名称    :coundisplay 
 507          * 功能描述    :反显函数,在lcd内任意范围反显,条件x1大于或等于x2,y1大于等于y2
 508          * 参数        :  参数名称:    输入/输出       类型              描述
 509          *                                         x1              input                 uchar   第一点行位置数据(0-127)
 510          *                                         y1              input                 uchar   第一点列位置数据(0-63)
 511          *                                         x2              input             uchar   第二点位置数据(0-127)
 512          *                                         y2              input                 uchar   第二点位置数据(0-63)
 513          * 返回值      :
 514          * 作者        :lujian
 515          * 创建日期    :2003-12-19
 516          * 全局变量    :
 517          * 全局静态变量:
 518          * 局部静态变量:
 519          *----------------------------------------修改历史------------------------------------------
 520          * 当前版本    :0.0.2                    修改人:lujian                  修改日期:2009-3-16
 521          * 修改说明    :
 522          ******************************************************************************************/
 523          
 524          bit coundisplay(uchar x1, uchar y1, uchar x2, uchar y2)
 525          {
 526   1              uchar xrange, dc, gcount, g, g1, temp1, yt, TDATA;
 527   1              uchar dstate, start, end, xetd, tlen;
 528   1              uchar cdata[16];
 529   1      
 530   1      //-------------------------------------------------------
 531   1      // Boundary detection
 532   1      
 533   1              if(x1 > x2 || x1 > 127 || x2 > 127)
 534   1              {
 535   2                      return FALSE;
 536   2              }
 537   1      
 538   1              if(y1 > y2 || y1 > 63 || y2 > 63)
 539   1              {
 540   2                      return FALSE;
 541   2              }
 542   1      
 543   1              wr_lcd(comm,DISPLAY_OFF);                                               //Entry mode set
 544   1      
 545   1              xrange = x2 - x1 + 1;
 546   1              start = (x1 /16)*16;
 547   1              xetd = x2 % 16;
 548   1      
 549   1              if(xetd!=0)
 550   1                      xetd = 16 - xetd;
 551   1              end = x2 + xetd;
C51 COMPILER V8.15   LCD_PART_12864J                                                       03/17/2009 18:11:02 PAGE 10  

 552   1      
 553   1              tlen = end - start;
 554   1      
 555   1      //-------------------------------------------------------
 556   1      
 557   1      //main program
 558   1      
 559   1      //-------------------------------------------------------
 560   1      
 561   1              for(yt = y1;yt < (y2+1); yt++)
 562   1              {       
 563   2                      dc = 0;
 564   2                      gcount = 0;
 565   2                      dstate = 0;
 566   2                      g = start;
 567   2                      g1 = 7;
 568   2                      B = 0xff;
 569   2      
 570   2                      temp1 = x1 /16;                                         //Reading the start data form lcd.
 571   2                      XYadr(temp1,yt);
 572   2                      rd_lcd();
 573   2      
 574   2                      while(g <= x2)
 575   2                      {
 576   3                              if(gcount == 0)                                 //data empty!!装货物!!
 577   3                              {
 578   4                                 TDATA = rd_lcd();                    //read lcd's data
 579   4                                 gcount = 8;
 580   4                              }
 581   3                              if(g >= x1 && g <= x2)
 582   3                              {
 583   4                                      switch (g1)
 584   4                                      {
 585   5                                  case 7:
 586   5                                              ACC = TDATA;
 587   5                                              B_7 = ACC_7;
 588   5                                              g1--;
 589   5                                              break;
 590   5                                  case 6:
 591   5                                              ACC = TDATA;
 592   5                                              B_6 = ACC_7;
 593   5                                              g1--;
 594   5                                              break;
 595   5                                  case 5:
 596   5                                              ACC = TDATA;
 597   5                                              B_5 = ACC_7;
 598   5                                              g1--;
 599   5                                              break;
 600   5                                  case 4:
 601   5                                              ACC = TDATA;
 602   5                                              B_4 = ACC_7;
 603   5                                              g1--;
 604   5                                              break;
 605   5                                      case 3:
 606   5                                              ACC = TDATA;
 607   5                                              B_3 = ACC_7;
 608   5                                              g1--;
 609   5                                              break;
 610   5                                      case 2:
 611   5                                              ACC = TDATA;
 612   5                                              B_2 = ACC_7;
 613   5                                              g1--;
C51 COMPILER V8.15   LCD_PART_12864J                                                       03/17/2009 18:11:02 PAGE 11  

 614   5                                              break;
 615   5                                      case 1:
 616   5                                              ACC = TDATA;
 617   5                                              B_1 = ACC_7;
 618   5                                              g1--;
 619   5                                              break;
 620   5                                      case 0:
 621   5                                              ACC = TDATA;
 622   5                                              B_0 = ACC_7;
 623   5                                              cdata[dc] = ~B;                 //save counter data; 每满8个打包货物(在此数据取反)
 624   5                                              dc++;
 625   5                                              g1 = 7; 
 626   5                                              break;
 627   5                                       }
 628   4                              }
 629   3                              TDATA = TDATA << 1;                             //move data;
 630   3                              gcount--;
 631   3                              g++;
 632   3                      }
 633   2                      if(g1 != 7)
 634   2                      {
 635   3                              cdata[dc] = ~B;                                 //save Less than 8 bits of counter data; 打包不足8个的货物(在此数据取反)
 636   3                      }
 637   2                      lcd_display(cdata, x1, yt, xrange, 1);          //writing counter data; 重写打包数据(即需要反显的数据)
 638   2              }        
 639   1      
 640   1      //-------------------------------------------------------
 641   1      // Complete writing lcd's data task
 642   1              return TRUE;
 643   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1831    ----
   CONSTANT SIZE    =     32    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      83
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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