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

📄 z1602.lst

📁 这个是安防用的控制键盘C源程序,采用KEIL C51开发.用于控制前端解码器!
💻 LST
字号:
C51 COMPILER V7.01  Z1602                                                                  07/03/2005 10:47:10 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE Z1602
OBJECT MODULE PLACED IN Z1602.OBJ
COMPILER INVOKED BY: F:\Keil\C51\BIN\C51.EXE Z1602.c DEBUG OBJECTEXTEND

stmt level    source

   1          /*===================================================================
   2          
   3                                  LMB204BDC 20x4 字符液晶屏驱动程序         
   4          /*=====================================================================
   5          连接线图:       LCM-------51    LCM-------51    LCM--------51
   6                          DB0-----P0.0    DB4-----P0.4    RS-------P1.7
   7                          DB1-----P0.1    DB5-----P0.5    RW-------P1.6
   8                          DB2-----P0.2    DB6-----P0.6    E--------P1.5
   9                          DB3-----P0.3    DB7-----P0.7    
  10          
  11                                  LCD CDDROM Address
  12                                  0x00-------------------------------------0x13
  13                                  0x40-------------------------------------0x53
  14                                  0x14-------------------------------------0x27
  15                                  0x54-------------------------------------0x67
  16          
  17          [注]:AT89C51的晶振频率为11.0592MHz
  18          ====================================================================*/
  19          
  20          #include "reg52.h"
  21          #include "intrins.h"
  22          
  23          //变量类型标识的宏定义
  24          #define Uchar unsigned char
  25          #define Uint unsigned int
  26          
  27          // 控制引脚定义,不同的连接必须修改的部分
  28          sbit    RS      = P1^7;
  29          sbit    RW      = P1^6;
  30          sbit    Elcm    = P1^5;
  31          #define DataPort P0                             // 数据端口
  32          
  33          #define Busy    0x80
  34          
  35          
  36          code char exampl[]="I Love You.      -By CaoYongHua\n";
  37          
  38          void Delay400Ms(void);
  39          void Delay5Ms(void);
  40          void WaitForEnable( void );
  41          void LcdWriteData( char dataW );
  42          void LcdWriteCommand( Uchar CMD,Uchar AttribC );
  43          void LcdReset( void );
  44          void Display( Uchar dd );
  45          void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
  46          void ePutstr(Uchar x,Uchar y, Uchar code *ptr);
  47          
  48          //测试主程序
  49          void main(void)
  50          {
  51   1          
  52   1              Uchar temp;
  53   1          P3=0;       
  54   1              Delay400Ms();
  55   1      
C51 COMPILER V7.01  Z1602                                                                  07/03/2005 10:47:10 PAGE 2   

  56   1              LcdReset();
  57   1              temp = 32;
  58   1              ePutstr(2,3,exampl);            // 上面一行显示一个预定字符串
  59   1      
  60   1              Delay400Ms();
  61   1              Delay400Ms();
  62   1              Delay400Ms();
  63   1              Delay400Ms();
  64   1              Delay400Ms();
  65   1              Delay400Ms();
  66   1              Delay400Ms();
  67   1              Delay400Ms();
  68   1      
  69   1              while(1)
  70   1              {
  71   2                      temp &= 0x7f;                   // 只显示ASCII字符
  72   2                      if (temp<32)temp=32;    // 屏蔽控制字符,不予显示
  73   2                      Display( temp++ );
  74   2                      Delay400Ms();
  75   2              }
  76   1      }
  77          
  78          /*=======================================================
  79           显示字符串
  80          =======================================================*/
  81          void ePutstr(Uchar x,Uchar y, Uchar code *ptr) {
  82   1      Uchar i,l=0;
  83   1              while (ptr[l] >31){l++;};
  84   1              for (i=0;i<l;i++) {
  85   2                      DispOneChar(x++,y,ptr[i]);
  86   2                      if ( x == 20 )
  87   2                       {
  88   3                               x = 0; 
  89   3                              if(y<3)
  90   3                               y=y+1;
  91   3                               else
  92   3                               y=0;
  93   3                       }
  94   2              }
  95   1      }
  96          
  97          /*=======================================================
  98           演示一行连续字符串,配合上位程序演示移动字串
  99          =======================================================*/
 100          void Display( Uchar dd ) {
 101   1      
 102   1      Uchar i;
 103   1              
 104   1              for (i=0;i<20;i++) {
 105   2                      DispOneChar(i,1,dd++);
 106   2                      dd &= 0x7f;
 107   2                      if (dd<32) dd=32;
 108   2              }
 109   1      }
 110          
 111          /*=======================================================
 112           显示光标定位
 113          =======================================================*/
 114          void LocateXY( char posx,char posy) {
 115   1      
 116   1      Uchar temp;
 117   1      
C51 COMPILER V7.01  Z1602                                                                  07/03/2005 10:47:10 PAGE 3   

 118   1              temp = posx ;//& 0x13;
 119   1      //      posy &= 0x03;
 120   1              
 121   1              if ( posy==1 )temp += 0x40;
 122   1              if ( posy==2 )temp += 0x14;
 123   1              if ( posy==3 )temp += 0x54;
 124   1      
 125   1              temp |= 0x80;
 126   1              LcdWriteCommand(temp,0);
 127   1      }
 128          
 129          /*=======================================================
 130           按指定位置显示数出一个字符
 131          =======================================================*/
 132          void DispOneChar(Uchar x,Uchar y,Uchar Wdata) {
 133   1      
 134   1              LocateXY( x, y );                               // 定位显示地址
 135   1              LcdWriteData( Wdata );                  // 写字符
 136   1      }
 137          
 138          /*=======================================================
 139           初始化程序, 必须按照产品资料介绍的初始化过程进行
 140          =======================================================*/
 141          void LcdReset( void ) {
 142   1      
 143   1              LcdWriteCommand( 0x38, 0);                      // 显示模式设置(不检测忙信号)
 144   1                      Delay5Ms();
 145   1              LcdWriteCommand( 0x38, 0);                      // 共三次
 146   1                      Delay5Ms();
 147   1              LcdWriteCommand( 0x38, 0);
 148   1                      Delay5Ms();
 149   1      
 150   1              LcdWriteCommand( 0x38, 1);                      // 显示模式设置(以后均检测忙信号)
 151   1          LcdWriteCommand( 0x08, 1);                  // 显示关闭
 152   1              LcdWriteCommand( 0x01, 1);                      // 显示清屏
 153   1              LcdWriteCommand( 0x06, 1);                      // 显示光标移动设置
 154   1              LcdWriteCommand( 0x0c, 1);                      // 显示开及光标设置
 155   1      }
 156          
 157          /*=======================================================
 158           写控制字符子程序: E=1 RS=0 RW=0
 159          =======================================================*/
 160          void LcdWriteCommand( Uchar CMD,Uchar AttribC ) {
 161   1      
 162   1              if (AttribC) WaitForEnable();                           // 检测忙信号?
 163   1              
 164   1              RS = 0; RW = 0; _nop_();
 165   1      
 166   1              DataPort = CMD; _nop_();                                        // 送控制字子程序
 167   1              
 168   1              Elcm = 1;_nop_();_nop_();Elcm = 0;                      // 操作允许脉冲信号     
 169   1      }
 170                  
 171          /*=======================================================
 172           当前位置写字符子程序: E =1 RS=1 RW=0
 173          =======================================================*/
 174          void LcdWriteData( char dataW ) {
 175   1      
 176   1              WaitForEnable();                                                        // 检测忙信号
 177   1      
 178   1              RS = 1; RW = 0; _nop_();
 179   1      
C51 COMPILER V7.01  Z1602                                                                  07/03/2005 10:47:10 PAGE 4   

 180   1          DataPort = dataW; _nop_();
 181   1      
 182   1              Elcm = 1; _nop_(); _nop_(); Elcm = 0;           // 操作允许脉冲信号             
 183   1      
 184   1      }
 185          
 186          /*=======================================================
 187          正常读写操作之前必须检测LCD控制器状态:  CS=1 RS=0 RW=1
 188          DB7:    0  LCD控制器空闲; 1  LCD控制器忙
 189          ========================================================*/
 190          void WaitForEnable( void ) {
 191   1      
 192   1              DataPort = 0xff;
 193   1      
 194   1              RS =0; RW = 1; _nop_(); Elcm = 1; _nop_(); _nop_();
 195   1              
 196   1              while( DataPort & Busy );
 197   1      
 198   1              Elcm = 0;
 199   1      }       
 200                                 
 201          
 202          // 短延时
 203          void Delay5Ms(void)
 204          {
 205   1              Uint i = 5552;
 206   1              while(i--);
 207   1      }
 208          
 209          //长延时
 210          void Delay400Ms(void)
 211          {
 212   1              Uchar i = 5;
 213   1              Uint j;
 214   1              while(i--)
 215   1              {
 216   2                      j=7269;
 217   2                      while(j--);
 218   2              };
 219   1      }
 220          


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