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

📄 8.1.lst

📁 LCD液晶显示器
💻 LST
字号:
C51 COMPILER V7.09   8_1                                                                   08/23/2005 13:28:01 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE 8_1
OBJECT MODULE PLACED IN 8.1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 8.1.c BROWSE DEBUG OBJECTEXTEND

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.09   8_1                                                                   08/23/2005 13:28:01 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.09   8_1                                                                   08/23/2005 13:28:01 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              Uint i = 5552;
 142   1              while(i--);
 143   1      }
 144          
 145          //长延时
 146          void Delay400Ms(void)
 147          {
 148   1              Uchar i = 5;
 149   1              Uint j;
 150   1              while(i--)
 151   1              {
 152   2                      j=7269;
 153   2                      while(j--);
 154   2              };
 155   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    346    ----
   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 + -