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

📄 lcd.lst

📁 压缩包中包括多个常用的汇编
💻 LST
📖 第 1 页 / 共 5 页
字号:
 440   1      }
 441          
 442          /****************************************************************************/
 443          /* 函数名:wait_ready                                                       */
 444          /* 功  能:等待ready:等待LCD内部操作完成                                    */
 445          /* 作  者:spot                                                             */
 446          /* 输  入:无                                                               */
 447          /* 输  出:无                                                               */
 448          /*                                                                          */
 449          /* 历史记录:                                                               */
 450          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 451          /****************************************************************************/
 452          void wait_ready(void)
 453          {
 454   1          RS = 0;/*指令*/
 455   1          RW = 1;/*读*/
 456   1          _nop_();
 457   1          while(lcd_data & status_busy); /*读入LCD状态,1=忙,一直等待LCD内部操作完成*/
 458   1      }
 459          
 460          /****************************************************************************/
 461          /* 函数名:lcd_init                                                         */
 462          /* 功  能:122x32LCD初始化,开机后仅调用一次                                 */
 463          /* 作  者:spot                                                             */
 464          /* 输  入:无                                                               */
 465          /* 输  出:无                                                               */
 466          /*                                                                          */
 467          /* 历史记录:                                                               */
 468          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 469          /****************************************************************************/
 470          void lcd_init(void)
 471          {
 472   1          send_mi(reset);           /* 复位m-left,s-right */
 473   1          send_si(reset);
 474   1      
 475   1          send_mi(disp_off);        /* 关闭显示 */
 476   1          send_si(disp_off);
 477   1      
 478   1          send_mi(dynamic_driver);
 479   1          send_si(dynamic_driver);
 480   1      
 481   1          send_mi(clk32);
 482   1          send_si(clk32);
 483   1      
 484   1          send_mi(adc_select);      /* clockwise */
 485   1          send_si(adc_select);
 486   1      
 487   1          send_mi(mode_write);
 488   1          send_si(mode_write);
 489   1      
C51 COMPILER V7.09   LCD                                                                   10/09/2005 20:45:34 PAGE 9   

 490   1          send_mi(col_addr_set);
 491   1          send_mi(disp_start_line); /* 归回零列,设定显示起始行首 */
 492   1      
 493   1          send_si(col_addr_set);
 494   1          send_si(disp_start_line);
 495   1      
 496   1          send_mi(disp_on);         /* 开显示 */
 497   1          send_si(disp_on);
 498   1      
 499   1          lcd_clr();
 500   1      }
 501          
 502          /****************************************************************************/
 503          /* 函数名:lcd_clr                                                          */
 504          /* 功  能:LCD清屏                                                          */
 505          /* 作  者:spot                                                             */
 506          /* 输  入:无                                                               */
 507          /* 输  出:无                                                               */
 508          /*                                                                          */
 509          /* 历史记录:                                                               */
 510          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 511          /****************************************************************************/
 512          void lcd_clr(void)
 513          {
 514   1          u_char i, page;
 515   1      
 516   1          for (page=0; page<4; page++)
 517   1          {
 518   2              send_mi(page_addr_set|page);
 519   2              send_si(page_addr_set|page);
 520   2      
 521   2              send_mi(col_addr_set);  /* 主窗口设置为0列 */
 522   2      
 523   2              for (i=0; i<62; i++)
 524   2              {
 525   3                  send_md(0x00);
 526   3              }
 527   2      
 528   2              send_si(col_addr_set);  /* 从窗口设置为0列 */
 529   2              for (i=0; i<62; i++)
 530   2              {
 531   3                  send_sd(0x00);
 532   3              }
 533   2          }
 534   1      }
 535          
 536          /****************************************************************************/
 537          /* 函数名:set_page                                                         */
 538          /* 功  能:同时设置主(左)从(右)显示页为0-1页                                */
 539          /* 作  者:spot                                                             */
 540          /* 输  入:page                                                             */
 541          /* 输  出:无                                                               */
 542          /*                                                                          */
 543          /* 历史记录:                                                               */
 544          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 545          /****************************************************************************/
 546          void set_page(u_char page)
 547          {
 548   1          send_mi(page_addr_set|page);
 549   1          send_si(page_addr_set|page);
 550   1      }
 551          
C51 COMPILER V7.09   LCD                                                                   10/09/2005 20:45:34 PAGE 10  

 552          /****************************************************************************/
 553          /* 函数名:set_page                                                         */
 554          /* 功  能:同时设置主从列地址为0-61列                                       */
 555          /* 作  者:spot                                                             */
 556          /* 输  入:address                                                          */
 557          /* 输  出:无                                                               */
 558          /*                                                                          */
 559          /* 历史记录:                                                               */
 560          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 561          /****************************************************************************/
 562          void set_address(u_char address)
 563          {
 564   1          send_mi(address&0x7F);  /* &0x7F,考虑到防止越限 */
 565   1          send_si(address&0x7F);
 566   1      }
 567          
 568          /****************************************************************************/
 569          /* 函数名:putchar_l                                                        */
 570          /* 功  能:在左页(主窗口)当前地址画一个字节(8点)                            */
 571          /* 作  者:spot                                                             */
 572          /* 输  入:c                                                                */
 573          /* 输  出:无                                                               */
 574          /*                                                                          */
 575          /* 历史记录:                                                               */
 576          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 577          /****************************************************************************/
 578          void putchar_l(u_char c)
 579          {
 580   1          send_md(c);
 581   1      }
 582          
 583          /****************************************************************************/
 584          /* 函数名:putchar_r                                                        */
 585          /* 功  能:在右页(从窗口)当前地址画一个字节(8点)                            */
 586          /* 作  者:spot                                                             */
 587          /* 输  入:c                                                                */
 588          /* 输  出:无                                                               */
 589          /*                                                                          */
 590          /* 历史记录:                                                               */
 591          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 592          /****************************************************************************/
 593          void putchar_r(u_char c)
 594          {
 595   1          send_sd(c);
 596   1      }
 597          
 598          /****************************************************************************/
 599          /* 函数名:draw_bmp                                                         */
 600          /* 功  能:画一个图,横坐标是col,layer表示上下层,width是图形的宽,高固定16    */
 601          /* 作  者:spot                                                             */
 602          /* 输  入:                                                                 */
 603          /*         col     图型的起始位置0~121                                      */
 604          /*         layer   图形的位置(Y坐标)0-下半部分 非0-上半部分                 */
 605          /*         width   图形宽度8,16可选                                         */
 606          /*         bmp     图形数据指针                                             */
 607          /*                                                                          */
 608          /* 输  出:无                                                               */
 609          /*                                                                          */
 610          /* 历史记录:                                                               */
 611          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 612          /****************************************************************************/
 613          void draw_bmp(u_char col,u_char layer,u_char width,u_char *bmp)
C51 COMPILER V7.09   LCD                                                                   10/09/2005 20:45:34 PAGE 11  

 614          {
 615   1          u_char x;
 616   1          u_char address;           /* address表示显存的物理地址 */
 617   1          u_char p=0;
 618   1          u_char page=0;            /* page表示上下两页,window表示左右窗口(0左,1右) */
 619   1          u_char window=0;
 620   1      
 621   1          if (layer)
 622   1          {
 623   2              page=2;               /* 左-主窗口,右-从窗口 */
 624   2          }
 625   1      
 626   1          for (x=col; x<col+width; x++)
 627   1          {
 628   2              if (x>121)
 629   2                  return;           /* 防止显示乱码 */
 630   2      
 631   2              if (x>60)             /* 左右窗口定位 */
 632   2              {
 633   3                  window=1;         /* 右-从窗口    */
 634   3                  address=x%61;
 635   3              }
 636   2              else
 637   2              {
 638   3                  address=x;        /* 主窗口输出   */
 639   3              }
 640   2      
 641   2              set_page(page);       /* 上层数据输出 */
 642   2              set_address(address);
 643   2      
 644   2              if (window)
 645   2                  putchar_r(bmp[p]);
 646   2              else
 647   2                  putchar_l(bmp[p]);
 648   2      
 649   2              set_page(page+1);     /* 下层数据输出 */
 650   2              set_address(address); /* 列保持不变   */
 651   2      
 652   2              if (window)
 653   2                  putchar_r(bmp[p+width]);
 654   2              else
 655   2                  putchar_l(bmp[p+width]);
 656   2      
 657   2              p++;
 658   2          }
 659   1      }
 660          
 661          /****************************************************************************/
 662          /* 函数名:disp_one_ascii                                                   */
 663          /* 功  能:显示单个ASCII码                                                  */
 664          /* 作  者:spot                                                             */

⌨️ 快捷键说明

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