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

📄 5.2.3-1.lst

📁 61202控制的12864液显程序,用在我的实际项目中,附接口原理图
💻 LST
📖 第 1 页 / 共 3 页
字号:
 229   2                      x++;
 230   2                      col++;
 231   2                      if (col==LCMLIMIT){col=0;row++;row++;};         /*下一列,如果列越界换行*/
 232   2                              if (row>7) row=0;                                       /*如果行越界,返回首行*/
 233   2                      }                                                                       /*上半个字符输出结束*/
 234   1              col = bakerx;                           /*列对齐*/
 235   1              row = bakery+1;                         /*指向下半个字符行*/
 236   1      /*下半个字符输出,8列*/
 237   1              for(i=0;i<8;i++)
 238   1                      {
 239   2                      cbyte = Ezk[x];                 /*取点阵码*/
 240   2                      Wrdata(cbyte);                  /*写输出一字节*/
 241   2                      x++;
C51 COMPILER V7.10   5_2_3_1                                                               06/06/2004 11:46:18 PAGE 5   

 242   2                      col++;
 243   2                      if (col==LCMLIMIT){col=0;row=row+2;};   /*下一列,如果列越界换行*/
 244   2                              if (row>7) row=1;       /*如果行越界,返回首行*/
 245   2                      }                                       /*下半个字符输出结束*/
 246   1              row=bakery;
 247   1              }                                               /*整个字符输出结束*/
 248          
 249          /*********************************全角字符点阵码数据输出********************************/
 250          void Putcdot(Uchar Order)
 251                  {
 252   1              Uchar i,bakerx,bakery;                  /*共定义3个局部变量*/
 253   1              int x;                                          /*偏移量,字符量少的可以定义为UCHAR     */
 254   1              bakerx = col;                           /*暂存x,y坐标,已备下半个字符使用*/
 255   1              bakery = row;
 256   1              x=Order * 0x20;                         /*每个字符32字节*/
 257   1              /*上半个字符输出,16列*/
 258   1              for(i=0;i<16;i++)
 259   1                      {
 260   2                      Wrdata(Hzk[x]);                 /*写输出一字节*/
 261   2                      x++;
 262   2                      col++;
 263   2                      if (col==LCMLIMIT){ col=0;row++;row++;} /*下一列,如果列越界换行*/
 264   2                              if (row>6) row=0;       /*如果行越界,返回首行*/
 265   2                      }                                       /*上半个字符输出结束*/
 266   1              /*下半个字符输出,16列  */
 267   1              col = bakerx;
 268   1              row = bakery+1;
 269   1              for(i=0;i<16;i++)                               /*下半部分*/
 270   1                      {
 271   2                      Wrdata(Hzk[x]);
 272   2                      x++;
 273   2                      col++;
 274   2                      if (col==LCMLIMIT){col=0;row++;row++;}  /*下一列,如果列越界换行*/
 275   2                              if (row>7) row=1;       /*如果行越界,返回首行*/
 276   2                      }                                       /*下半个字符输出结束*/
 277   1              row = bakery;
 278   1              }                                               /*整个字符输出结束*/
 279          
 280          /************************************清屏,全屏幕清零***********************************/
 281          void Lcmcls( void )
 282                  {
 283   1              for(row=0;row<8;row++)
 284   1                      for(col=0;col<LCMLIMIT;col++) Wrdata(0);
 285   1              }
 286          
 287          /***************************从液晶片上读数据,保留在全局变量中***************************/
 288          void Rddata(void)
 289                  {
 290   1                  Locatexy();                 /*坐标定位,返回时保留分区状态不变*/
 291   1                      Elcm=1;_nop_();
 292   1                      Elcm=0;_nop_();
 293   1                      Dilcm = 1;                      /*数据*/
 294   1                      Rwlcm = 1;                      /*读数据*/
 295   1                      Datalcm=0xFF;
 296   1                      Elcm = 1;       /*读入到LCM*/
 297   1                      cbyte = Datalcm;        /*虚读一次*/
 298   1                      Elcm = 0;
 299   1                   
 300   1                      Locatexy();             /*坐标定位,返回时保留分区状态不变*/
 301   1                      Elcm=1;nop();
 302   1                      Elcm=0;nop();
 303   1                      nop();
C51 COMPILER V7.10   5_2_3_1                                                               06/06/2004 11:46:18 PAGE 6   

 304   1                      Dilcm = 1;                      /*数据*/
 305   1                      Rwlcm = 1;                      /*读数据*/
 306   1                      Datalcm=0xFF;
 307   1                      Elcm = 1;                       /*读入到LCM*/
 308   1                      cbyte = Datalcm;        /*从数据口读数据,真读*/
 309   1                      Elcm = 0;
 310   1              }
 311          
 312          /*************************************数据写输出/**************************************/
 313          void Wrdata(Uchar X)
 314                  {
 315   1                  Locatexy();                    /*坐标定位,返回时保留分区状态不变*/
 316   1                      Elcm=1;_nop_();
 317   1                  Elcm=0;_nop_();
 318   1                      Dilcm = 1;                              /*数据输出*/
 319   1                      Rwlcm = 0;                          /*写输出*/
 320   1                      nop();Elcm=1;
 321   1                      Datalcm = X;                    /*数据输出到数据口*/
 322   1                      //Elcm = 1;                             /*读入到LCM*/
 323   1                  nop();Elcm = 0;
 324   1              }
 325          
 326          /*********************************命令输出到左区控制口*********************************/
 327          void WrcmdL(Uchar X)
 328                  {
 329   1                      lcdbusyL();                             /*确定分区,返回时保留分区状态不变*/
 330   1                      Elcm=1;_nop_();
 331   1                      Elcm=0;_nop_();
 332   1                      Dilcm = 0;                              /*命令操作*/
 333   1                      Rwlcm = 0;                          /*写输出*/
 334   1                      nop();Elcm=1;
 335   1                      Datalcm = X;                    /*数据输出到数据口*/
 336   1                  Elcm = 0;   /*读入到LCM*/
 337   1              }
 338          
 339          /********************************命令输出到中区控制口********************************/
 340          void WrcmdM(Uchar X)
 341                  {
 342   1                      lcdbusyM();                     /*确定分区,返回时保留分区状态不变*/
 343   1                      Dilcm = 0;                              /*命令操作*/
 344   1                      Rwlcm = 0;                      /*写输出*/
 345   1                      Datalcm = X;                    /*命令输出到数据口*/
 346   1                      nop();Elcm = 0; /*读入到LCM*/
 347   1              }
 348          
 349          /*********************************命令输出到右区控制口********************************/
 350          void WrcmdR(Uchar X)
 351                  {
 352   1                      lcdbusyR();                            /*确定分区,返回时保留分区状态不变*/
 353   1                      Elcm=1;_nop_();
 354   1                      Elcm=0;_nop_();
 355   1                      Dilcm = 0;                             /*命令操作*/
 356   1                      Rwlcm = 0;                             /*写输出*/
 357   1                      nop();Elcm=1;
 358   1                      Datalcm = X;                       /*命令输出到数据口*/
 359   1                      nop();Elcm = 0; /*读入到LCM*/
 360   1              }
 361          
 362          /************************分区操作允许等待,返回时保留分区选择状态*************************/
 363          void lcdbusyL(void)
 364                  {
 365   1              CSALCM = 0; CSBLCM = 1; /*清零CSA,CSB,选择左区*/
C51 COMPILER V7.10   5_2_3_1                                                               06/06/2004 11:46:18 PAGE 7   

 366   1                  wtcom();                            /*等待使能*/
 367   1              }
 368          /*----------------------------------------------------------*/
 369          void lcdbusyM(void)
 370                  {
 371   1              CSALCM = 0; CSBLCM =1;  /*置CSA为0,CSB为1,选择中区*/
 372   1                  wtcom();                            /*等待使能*/
 373   1              }
 374          /*----------------------------------------------------------*/
 375          void lcdbusyR(void)
 376                  {
 377   1              CSALCM = 1; CSBLCM = 0; /*置CSA为1,CSB为0,选择右区*/
 378   1              wtcom();                                /*等待使能*/
 379   1              }
 380          /*----------------------------------------------------------*/
 381          void wtcom(void)
 382                  {
 383   1                Elcm=1;_nop_();
 384   1                Elcm=0;_nop_();
 385   1                Dilcm = 0;                    /*清零DI*/
 386   1                Rwlcm = 1;                    /*置RW为1*/
 387   1                nop();
 388   1                Elcm=1;
 389   1                Datalcm = 0xFF;       
 390   1                while(Datalcm & Lcdbusy);
 391   1            Elcm = 0;
 392   1              }
 393          
 394          /******************根据设定的坐标数据,定位LCM上的下一个操作单元位置******************/
 395          void Locatexy(void)
 396                  {
 397   1                unsigned char  x,y;
 398   1                switch (col&0xc0)                             /* col与0xC0*/
 399   1                      {                                               /*条件分支执行  */
 400   2                      case 0: {lcdbusyL();break;}     /*左区*/
 401   2                      //case 0x40:    {lcdbusyM();break;}     /*中区*/
 402   2                      case 0x40:      {lcdbusyR();break;}     /*右区*/
 403   2                      }
 404   1                x = col&0x3F|SETY;                    /*col.and.0x3f.or.setx*/
 405   1                y = row&0x07|SETX;                    /*row.and.0x07.or.sety*/
 406   1                wtcom();                                              /*等待使能*/
 407   1                Elcm=1;_nop_();
 408   1                Elcm=0;_nop_();
 409   1                Dilcm = 0;                                    /*清零DI        */
 410   1                Rwlcm = 0;                                /*清零RW*/
 411   1                nop();Elcm=1;
 412   1                Datalcm = y;                          /*MOV   P0,Y    */
 413   1                Elcm = 0;
 414   1                
 415   1                wtcom();                                      /*等待使能*/
 416   1                Elcm=1;_nop_();
 417   1                Elcm=0;_nop_();
 418   1                Dilcm = 0;                            /*清零DI*/
 419   1                Rwlcm = 0;                            /*清零RW*/
 420   1                nop();Elcm=1;
 421   1                Datalcm = x;                          /*MOV   P0,X*/
 422   1                Elcm = 0;
 423   1              }
 424          
 425          /*************************************液晶屏初始化**************************************/
 426          void Lcminit(void)
 427                  {
C51 COMPILER V7.10   5_2_3_1                                                               06/06/2004 11:46:18 PAGE 8   

 428   1                      cbyte = DISPOFF;                        /*关闭显示屏*/
 429   1                      WrcmdL(cbyte);
 430   1                      //WrcmdM(cbyte);
 431   1                      WrcmdR(cbyte);
 432   1                      cbyte = DISPON;                 /*打开显示屏*/
 433   1                      WrcmdL(cbyte);
 434   1                      //WrcmdM(cbyte);
 435   1                      WrcmdR(cbyte);
 436   1                      cbyte = DISPFIRST;                      /*定义显示起始行为零*/
 437   1                      WrcmdL(cbyte);
 438   1                      //WrcmdM(cbyte);
 439   1                      WrcmdR(cbyte);
 440   1                      Lcmcls();
 441   1                      col=0;                                  /*清屏*/
 442   1                      row=0;
 443   1                      Locatexy();
 444   1              }
 445          /****************************************延时*******************************************/
 446          void Delay(Uchar MS)
 447                  {
 448   1                      Uchar us,usn;
 449   1                      while(MS!=0)
 450   1                              { usn = 4;
 451   2                                      while(usn!=0)
 452   2                                              {
 453   3                                                      us=0xf0;
 454   3                                                      while (us!=0){us--;};
 455   3                                                      usn--;
 456   3                                              }
 457   2                                      MS--;
 458   2                              }
 459   1              }
 460          
 461          /************************************定义字符串数组*************************************/
 462          Uchar code STR1[]="China Mobile";
 463          Uchar code STR2[]="Communications";

⌨️ 快捷键说明

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