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

📄 32.lst

📁 程序用C51实现: 单片机对LCD1602的控制显示 采用总线方式
💻 LST
字号:
C51 COMPILER V7.50   32                                                                    08/20/2005 16:00:53 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 32
OBJECT MODULE PLACED IN F:\MCS_51\LCD\32.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE F:\MCS_51\LCD\32.C DB SB OE

line level    source

   1          #include <reg51.h>
   2          #include<intrins.h>
   3          
   4          #define Uchar unsigned char
   5          #define Uint unsigned int
   6          
   7          // LCM1602A端口地址定义
   8          char xdata Lcd1602CmdPort _at_ 0x7cff;          //E=1 RS=0 RW=0
   9          char xdata Lcd1602WdataPort _at_ 0x7eff;            //E =1 RS=1 RW=0
  10          char xdata Lcd1602StatusPort _at_ 0x7dff;           //CS=1 RS=0 RW=1
  11          
  12          #define Busy    0x80                                            // 忙判别位
  13          
  14          code char exampl[]="For an example. - By xiaoqi\n";
  15          
  16          void Delay400Ms(void);
  17          void Delay5Ms(void);
  18          void LcdWriteData( char dataW );
  19          void LcdWriteCommand( Uchar CMD,Uchar AttribC );
  20          void LcdReset( void );
  21          void Display( Uchar dd );
  22          void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
  23          void ePutstr(Uchar x,Uchar y, Uchar code *ptr);
  24          
  25          //主程序
  26          void main(void)
  27          {
  28   1              Uchar temp;
  29   1      
  30   1              Delay400Ms();                           //启动时必须的延时,等待lcm进入工作状态
  31   1      
  32   1              LcdReset();                                 //这也是必需的....初始化
  33   1              temp = 32;
  34   1              ePutstr(0,0,exampl);                //上面一行显示一个预定字符串
  35   1      
  36   1              Delay400Ms();                       //保留显示内容
  37   1              Delay400Ms();
  38   1              Delay400Ms();
  39   1              Delay400Ms();
  40   1              Delay400Ms();
  41   1              Delay400Ms();
  42   1              Delay400Ms();
  43   1              Delay400Ms();
  44   1      
  45   1              while(1)
  46   1              {
  47   2                      temp &= 0x7f;                       //只显示ASCII字符
  48   2      
  49   2                      if (temp<32)temp=32;       //屏蔽控制字符,不予显示
  50   2                      Display( temp++ );
  51   2      
  52   2                      Delay400Ms();
  53   2              }
  54   1      }
  55          
C51 COMPILER V7.50   32                                                                    08/20/2005 16:00:53 PAGE 2   

  56          //显示字符串
  57          void ePutstr(Uchar x,Uchar y, Uchar code *ptr)
  58          {
  59   1      Uchar i,l=0;
  60   1              while (ptr[l] >31){l++;};
  61   1              for (i=0;i<l;i++) {
  62   2                      DispOneChar(x++,y,ptr[i]);
  63   2                      if ( x == 16 )
  64   2      {
  65   3                              x = 0; y ^= 1;
  66   3                      }
  67   2              }
  68   1      }
  69          
  70          // 演示一行连续字符串,配合上位程序演示移动字串
  71          void Display( Uchar dd )
  72          {
  73   1      
  74   1      Uchar i;
  75   1      
  76   1              for (i=0;i<16;i++)
  77   1      {
  78   2      
  79   2                      DispOneChar(i,1,dd++);
  80   2      
  81   2                      dd &= 0x7f;
  82   2                      if (dd<32) dd=32;
  83   2              }
  84   1      }
  85          
  86          // 显示光标定位
  87          void LocateXY( char posx,char posy)
  88          {
  89   1      
  90   1      Uchar temp;
  91   1      
  92   1              temp = posx & 0xf;
  93   1              posy &= 0x1;
  94   1              if ( posy )temp |= 0x40;
  95   1              temp |= 0x80;
  96   1              LcdWriteCommand(temp,0);
  97   1      }
  98          
  99          // 按指定位置显示数出一个字符
 100          void DispOneChar(Uchar x,Uchar y,Uchar Wdata)
 101           {
 102   1              LocateXY( x, y );                                    // 定位显示地址
 103   1              LcdWriteData( Wdata );                       // 写字符
 104   1      }
 105          
 106          // 初始化程序, 必须按照产品资料介绍的初始化过程进行
 107          void LcdReset( void ) {
 108   1      
 109   1              LcdWriteCommand( 0x38, 0);                      // 显示模式设置(不检测忙信号)
 110   1                      Delay5Ms();
 111   1              LcdWriteCommand( 0x38, 0);                      // 共三次
 112   1                      Delay5Ms();
 113   1              LcdWriteCommand( 0x38, 0);
 114   1                      Delay5Ms();
 115   1      
 116   1              LcdWriteCommand( 0x38, 1);                      // 显示模式设置(以后均检测忙信号)
 117   1          LcdWriteCommand( 0x08, 1);                  // 显示关闭
C51 COMPILER V7.50   32                                                                    08/20/2005 16:00:53 PAGE 3   

 118   1              LcdWriteCommand( 0x01, 1);                      // 显示清屏
 119   1              LcdWriteCommand( 0x06, 1);                      // 显示光标移动设置
 120   1              LcdWriteCommand( 0x0c, 1);                      // 显示开及光标设置
 121   1      }
 122          
 123          // 写控制字符子程序: E=1 RS=0 RW=0
 124          
 125          void LcdWriteCommand( Uchar CMD,Uchar AttribC ) {
 126   1      
 127   1              if (AttribC) while( Lcd1602StatusPort & Busy );         // 检测忙信号?
 128   1              Lcd1602CmdPort = CMD;
 129   1      }
 130          
 131          // 当前位置写字符子程序: E =1 RS=1 RW=0
 132          void LcdWriteData( char dataW ) {
 133   1      
 134   1              while( Lcd1602StatusPort & Busy );                              // 检测忙信号
 135   1              Lcd1602WdataPort = dataW;
 136   1      }
 137          
 138          // 短延时
 139          void Delay5Ms(void)
 140          {
 141   1              Uchar i;
 142   1              
 143   1              i=5552;
 144   1              while(i--)          //  for (i=0;i<5552;i++)
 145   1              {  ;  }
 146   1      }         
 147          
 148          //长延时
 149          void Delay400Ms(void)
 150          {
 151   1              Uchar i = 5;
 152   1              Uint j;
 153   1              while(i--)
 154   1              {
 155   2                      
 156   2                      for (j=0;j<7269;j++);
 157   2              };
 158   1      }
C51 COMPILER V7.50   32                                                                    08/20/2005 16:00:53 PAGE 4   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


_LcdWriteData. . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  dataW. . . . . . . . . . . . . . . .  * REG *  DATA   CHAR     0007H  1
exampl . . . . . . . . . . . . . . . .  PUBLIC   CODE   ARRAY    0000H  29
Lcd1602StatusPort. . . . . . . . . . .  PUBLIC   XDATA  CHAR     7DFFH  1
_DispOneChar . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  x. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  y. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
  Wdata. . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
LcdReset . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
Lcd1602CmdPort . . . . . . . . . . . .  PUBLIC   XDATA  CHAR     7CFFH  1
main . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  temp . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
_Display . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  dd . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  i. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0001H  1
_LcdWriteCommand . . . . . . . . . . .  PUBLIC   CODE   PROC     0004H  -----
  CMD. . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  AttribC. . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
Delay400Ms . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
  j. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0006H  2
_ePutstr . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  x. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  y. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0001H  1
  ptr. . . . . . . . . . . . . . . . .  AUTO     DATA   PTR      0002H  2
  i. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0004H  1
  l. . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0005H  1
Delay5Ms . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
_LocateXY. . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  posx . . . . . . . . . . . . . . . .  * REG *  DATA   CHAR     0007H  1
  posy . . . . . . . . . . . . . . . .  * REG *  DATA   CHAR     0005H  1
  temp . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
Lcd1602WdataPort . . . . . . . . . . .  PUBLIC   XDATA  CHAR     7EFFH  1


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