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

📄 lcd1602.lst

📁 自己写的lcd1602的驱动程序
💻 LST
字号:
C51 COMPILER V7.50   LCD1602                                                               07/21/2006 13:18:55 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE LCD1602.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*===================================================================
   2          
   3          ====================================================================*/
   4          #include <absacc.h>
   5          #include <REG51F.H>
   6          #include<intrins.h>
   7          #include<LCD1602a.h>
   8          #define Busy    0x80 
   9          sbit RW=PinRW;
  10          sbit RS=PinRS;
  11          sbit Elcm=PinElcm; 
  12          
  13          void WaitForEnable( void );
  14          void LcdWriteData( char dataW );
  15          void LcdWriteCommand( Uchar CMD,Uchar AttribC );
  16          void LcdReset( void );
  17          void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
  18          void ePutstr(Uchar x,Uchar y, Uchar code *ptr); 
  19          
  20          /*=======================================================
  21           显示字符串
  22          =======================================================*/
  23          void ePutstr(Uchar x,Uchar y, Uchar code *ptr) {
  24   1      Uchar i=0;
  25   1              while (ptr[i]!=SIGN){
  26   2              DispOneChar(x+i,y,ptr[i]);
  27   2              i++;
  28   2                      if ( x == 16 ){
  29   3                              x = 11; y ^= 1;
  30   3                      }
  31   2              }
  32   1      }
  33          
  34          /*=======================================================
  35           演示一行连续字符串,配合上位程序演示移动字串
  36          =======================================================*/
  37          /*void Display( Uchar dd ) {
  38          
  39          Uchar i;
  40                  
  41                  for (i=0;i<16;i++) {    
  42                          DispOneChar(i,1,dd++);
  43                          dd &= 0x7f;
  44                          if (dd<32) dd=32;
  45                  }
  46          }*/
  47          /*=======================================================
  48           显示光标定位
  49          =======================================================*/
  50          void LocateXY( char posx,char posy) {
  51   1      
  52   1      Uchar temp;
  53   1      
  54   1              temp = posx & 0xf;
  55   1              posy &= 0x1;
C51 COMPILER V7.50   LCD1602                                                               07/21/2006 13:18:55 PAGE 2   

  56   1              if ( posy )temp |= 0x40;
  57   1              temp |= 0x80;
  58   1              LcdWriteCommand(temp,0);
  59   1      }
  60          
  61          /*=======================================================
  62           按指定位置显示数出一个字符
  63          =======================================================*/
  64          void DispOneChar(Uchar x,Uchar y,Uchar Wdata) {
  65   1      
  66   1              LocateXY( x, y );                               // 定位显示地址
  67   1              LcdWriteData( Wdata );                  // 写字符
  68   1      }
  69          
  70          /*=======================================================
  71           初始化程序, 必须按照产品资料介绍的初始化过程进行
  72          =======================================================*/
  73          void LcdReset( void ) {
  74   1      
  75   1              LcdWriteCommand( 0x38, 0);                      // 显示模式设置(不检测忙信号)
  76   1                      Delay5ms();
  77   1              LcdWriteCommand( 0x38, 0);                      // 共三次
  78   1                      Delay5ms();
  79   1              LcdWriteCommand( 0x38, 0);
  80   1                      Delay5ms();
  81   1      
  82   1              LcdWriteCommand( 0x38, 1);                      // 显示模式设置(以后均检测忙信号)
  83   1          LcdWriteCommand( 0x08, 1);                  // 显示关闭
  84   1              LcdWriteCommand( 0x01, 1);                      // 显示清屏
  85   1              LcdWriteCommand( 0x06, 1);                      // 显示光标移动设置
  86   1              LcdWriteCommand( 0x0c, 1);                      // 显示开及光标设置
  87   1      }
  88          
  89          /*=======================================================
  90           写控制字符子程序: E=1 RS=0 RW=0
  91          =======================================================*/
  92          void LcdWriteCommand2( Uchar CMD,Uchar AttribC ) {
  93   1      
  94   1              if (AttribC) WaitForEnable();                           // 检测忙信号
  95   1              
  96   1              RS = 0; RW = 0; _nop_();
  97   1      
  98   1              DataPort = CMD; _nop_();                                        // 送控制字子程序
  99   1              
 100   1              Elcm = 1;_nop_();_nop_();Elcm = 0;                      // 操作允许脉冲信号     
 101   1      }
 102          void LcdWriteCommand(Uchar CMD ,Uchar AttribC){ 
 103   1      if(AttribC)
 104   1      while(RLCDCMD>=0x80);
 105   1      WLCDCMD=CMD;
 106   1      }
 107          /*=======================================================
 108           当前位置写字符子程序: E =1 RS=1 RW=0
 109          =======================================================*/
 110          void LcdWriteData2( char dataW ) {
 111   1      
 112   1              WaitForEnable();                                                        // 检测忙信号
 113   1      
 114   1              RS = 1; RW = 0; _nop_();
 115   1      
 116   1          DataPort = dataW; _nop_();
 117   1      
C51 COMPILER V7.50   LCD1602                                                               07/21/2006 13:18:55 PAGE 3   

 118   1              Elcm = 1; _nop_(); _nop_(); Elcm = 0;           // 操作允许脉冲信号             
 119   1      
 120   1      }
 121          void LcdWriteData(char dataW){
 122   1      while(RLCDCMD>=0x80);
 123   1      WLCDDATA=dataW;
 124   1      }
 125          
 126          /*=======================================================
 127          正常读写操作之前必须检测LCD控制器状态:  CS=1 RS=0 RW=1
 128          DB7:    0  LCD控制器空闲; 1  LCD控制器忙
 129          ========================================================*/
 130          void WaitForEnable( void ) {
 131   1      
 132   1              DataPort = 0xff;
 133   1      
 134   1              RS =0; RW = 1; _nop_(); Elcm = 1; _nop_(); _nop_();
 135   1              
 136   1              while( DataPort & Busy );
 137   1      
 138   1              Elcm = 0;
 139   1      }       
 140                                 
 141          
 142          


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