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

📄 1602.lst

📁 我写的旋转编码器的程序
💻 LST
字号:
C51 COMPILER V8.08   1602                                                                  11/11/2007 02:20:21 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE 1602
OBJECT MODULE PLACED IN 1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1602.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*===================================================================
   2          
   3                          1602字符液晶屏程序
   4          =====================================================================
   5          连接线图:
   6                          DB0-----P2.0    DB4-----P2.4    RS-------P0.5 
   7                          DB1-----P2.1    DB5-----P2.5    RW-------P0.6
   8                          DB2-----P2.2    DB6-----P2.6    E--------P0.7
   9                          DB3-----P2.3    DB7-----P2.7    VLCD接1K2电阻到GND
  10          
  11          [注]:AT89S51的晶振频率为12MHz
  12          ====================================================================*/
  13          
  14          #include <reg51.h>
  15          
  16          
  17          
  18          //变量类型标识的宏定义,大家都喜欢这么做
  19          #define Uchar unsigned char
  20          #define Uint unsigned int
  21          
  22          /*=================================================================
  23           控制引脚定义,不同的连接必须修改的部分
  24           ===============================================================*/
  25          sbit    RS      = P0^5;
  26          sbit    RW      = P0^6;
  27          sbit    Elcm    = P0^7;
  28          #define DataPort P2                             //数据端口 
  29          #define Busy    0x80                     //忙标志 
  30          
  31           /*=====================码表==================================*/
  32          code char tab[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};
  33          
  34          code char cac[]="CACWORLD!!!";
  35          
  36          /*=======================函数声明=============================*/
  37          void Delay400Ms(void);
  38          void Delay5Ms(void);
  39          void LcdWriteData( char dataW );
  40          void LcdWriteCommand( Uchar CMD,Uchar AttribC );
  41          void LcdReset( void );
  42          void Display( Uchar dd );
  43          void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
  44          void WaitForEnable( void );
  45          void LocateXY( char posx,char posy) ;
  46          void _nop_(void);
  47          /*=======================================================
  48           显示光标定位
  49          =======================================================*/
  50          void LocateXY( char posx,char posy) {
  51   1      
  52   1          Uchar temp;
  53   1      
  54   1              temp = posx & 0x0f;
  55   1              posy &= 0x01;
C51 COMPILER V8.08   1602                                                                  11/11/2007 02:20:21 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(unsigned char x,Uchar y,Uchar Wdata) {
  65   1      
  66   1              LocateXY( x, y );                               // 定位显示地址
  67   1              LcdWriteData( Wdata );                  // 写字符
  68   1      }
  69          
  70          /*=======================================================
  71           显示字符串
  72          =======================================================*/
  73          void Putstr(Uchar x,Uchar y, Uchar code *ptr) {
  74   1      Uchar i,l=0;
  75   1              while (ptr[l] >31){l++;};
  76   1              for (i=0;i<l;i++) {
  77   2                      DispOneChar(x++,y,ptr[i]);
  78   2                      if ( x == 16 ){
  79   3                              x = 0; y ^= 1;
  80   3                      }
  81   2              }
  82   1      }
  83          
  84          /*=======================================================
  85           初始化程序, 必须按照产品资料介绍的初始化过程进行
  86          =======================================================*/
  87          void LcdReset( void ) {
  88   1      
  89   1              LcdWriteCommand( 0x38, 0);                      // 显示模式设置(不检测忙信号)
  90   1                      Delay5Ms();
  91   1              LcdWriteCommand( 0x38, 0);                      // 共三次 
  92   1                      Delay5Ms();
  93   1              LcdWriteCommand( 0x38, 0);
  94   1                      Delay5Ms();
  95   1              LcdWriteCommand( 0x38, 1);                      // 显示模式设置(以后均检测忙信号)
  96   1          LcdWriteCommand( 0x08, 1);                  // 显示关闭 
  97   1              LcdWriteCommand( 0x01, 1);                      // 显示清屏      
  98   1              LcdWriteCommand( 0x06, 1);                      // 显示光标移动设置 
  99   1              LcdWriteCommand( 0x0c, 1);                      // 显示开及光标设置 
 100   1      }
 101          
 102          /*=======================================================
 103           写控制字符子程序: E=1 RS=0 RW=0
 104          =======================================================*/
 105          void LcdWriteCommand( Uchar CMD,Uchar AttribC ) {
 106   1      
 107   1              if (AttribC)     WaitForEnable();                               // 检测忙信号?
 108   1              
 109   1              RS = 0; RW = 0; _nop_();
 110   1      
 111   1              DataPort = CMD; _nop_();                                        // 送控制字子程序
 112   1              
 113   1              Elcm = 1;_nop_();_nop_();Elcm = 0;                      // 操作允许脉冲信号     
 114   1      }
 115                  
 116          /*=======================================================
 117           当前位置写字符子程序: E =1 RS=1 RW=0
C51 COMPILER V8.08   1602                                                                  11/11/2007 02:20:21 PAGE 3   

 118          =======================================================*/
 119          void LcdWriteData( char dataW ) {
 120   1      
 121   1              WaitForEnable();                                                        // 检测忙信号
 122   1      
 123   1              RS = 1; RW = 0; _nop_();
 124   1      
 125   1          DataPort = dataW; _nop_();
 126   1      
 127   1              Elcm = 1; _nop_(); _nop_(); Elcm = 0;           // 操作允许脉冲信号             
 128   1      
 129   1      }
 130          
 131          /*=======================================================
 132          正常读写操作之前必须检测LCD控制器状态:  CS=1 RS=0 RW=1
 133          DB7:    0  LCD控制器空闲; 1  LCD控制器忙
 134          ========================================================*/
 135          void WaitForEnable( void )
 136          {
 137   1      
 138   1              DataPort = 0xff;
 139   1      
 140   1              RS =0; RW = 1; _nop_(); Elcm = 1; _nop_(); _nop_();
 141   1              
 142   1              while( DataPort & Busy );
 143   1      
 144   1              Elcm = 0;
 145   1      }
 146          
 147          
 148                                 
 149          /*============空操作==============*/
 150          void _nop_(void)
 151          {
 152   1              ;
 153   1      }
 154          
 155          /*==================短延时===============*/
 156          void Delay5Ms(void)
 157          {
 158   1              Uint i = 5552;
 159   1              while(i--);
 160   1      }
 161          
 162          /*=================长延时================*/
 163          void Delay400Ms(void)
 164          {
 165   1              Uchar i = 5;
 166   1              Uint j;
 167   1              while(i--)
 168   1              {
 169   2                      j=7269;
 170   2                      while(j--);
 171   2              }
 172   1      }
 173          /*
 174           void main(void)
 175          { unsigned int i,j;
 176            unsigned char x,y;   
 177                   LcdReset();
 178          
 179          while(1)
C51 COMPILER V8.08   1602                                                                  11/11/2007 02:20:21 PAGE 4   

 180          {
 181          
 182            
 183           DispOneChar(15,1,tab[11]);
 184            Putstr(i,0,"cac");
 185           }
 186          
 187          }          */


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