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

📄 lcd.lst

📁 4×4按键扫描
💻 LST
字号:
C51 COMPILER V8.02   LCD                                                                   10/08/2008 17:00:29 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: D:\keil 8.02\C51\BIN\C51.EXE lcd.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include"lcd.h"
   2          
   3          /**************************************************************
   4                                                           精确延时 1 ms     XALT:11.0592M
   5          ***************************************************************/
   6          /*void Delay1Ms(void)
   7          {
   8                  unsigned char i=131;
   9                  while(i!=0){
  10                          _nop_();
  11                          _nop_();
  12                          _nop_();
  13                          _nop_();
  14                          _nop_();
  15                          i--;
  16                  }
  17          }
  18          
  19          /**************************************************************
  20                                                           精确延时 N ms    XALT:11.0592M
  21          ***************************************************************/
  22          /*void DelayMs(unsigned int Delay)
  23          {
  24                  unsigned char i;
  25                  for(i=Delay;i!=0;i--){
  26                          Delay1Ms();
  27                  }
  28          }
  29          
  30          /**************************************************************
  31                                                           LCD 写数据
  32          ***************************************************************/
  33          void WriteDataLcd(unsigned char Dat)
  34          {
  35   1              ReadStatusLcd();        // 检测忙
  36   1              LcdData = Dat;
  37   1              LcdRS = 1;
  38   1              LcdRW = 0;
  39   1              LcdE  = 0;                      // 若晶振速度太高可以在这后加小的延时
  40   1              DelayMs(1);
  41   1              LcdE  = 1;                      // 写数据 E=1, Rw=0, Rs=1
  42   1      }
  43          
  44          /**************************************************************
  45                                                           LCD 写命令
  46          ***************************************************************/
  47          void WriteCmdLcd(unsigned char Cmd, BusyCmd)    // BusyCmd为0时忽略忙检测
  48          {
  49   1              if (BusyCmd) ReadStatusLcd();   // 根据需要检测忙
  50   1              LcdData = Cmd;
  51   1              LcdRS = 0;
  52   1              LcdRW = 0; 
  53   1              LcdE  = 0;
  54   1              DelayMs(1);
  55   1              LcdE  = 1;                                      // 写指令 E=1, Rw=0, Rs=0  
C51 COMPILER V8.02   LCD                                                                   10/08/2008 17:00:29 PAGE 2   

  56   1      }
  57          
  58          
  59          /**************************************************************
  60                                                           检测状态
  61          ***************************************************************/
  62          unsigned char ReadStatusLcd(void)
  63          {
  64   1              LcdData = 0xFF; 
  65   1              LcdRS = 0;
  66   1              LcdRW = 1;
  67   1              LcdE  = 0;
  68   1              DelayMs(1);
  69   1              LcdE  = 1;                                      // 读状态 E=1, Rw=1, Rs=0
  70   1              while (LcdData & Busy);         // 检测忙信号
  71   1              return(LcdData);
  72   1      }
  73          
  74          /**************************************************************
  75                                                           LCD初始化
  76          ***************************************************************/
  77          void LcdInit(void) 
  78          {                                                                         
  79   1              LcdData = 0;                    // 给数据端口送0
  80   1              WriteCmdLcd(0x38,0);            // 三次显示模式设置,不检测忙信号
  81   1              DelayMs(5); 
  82   1      
  83   1              WriteCmdLcd(0x38,1);            // 显示模式设置,开始要求每次检测忙信号
  84   1              WriteCmdLcd(0x08,1);            // 关闭显示
  85   1              WriteCmdLcd(0x01,1);            // 显示清屏
  86   1              WriteCmdLcd(0x06,1);            // 显示光标移动设置
  87   1              WriteCmdLcd(0x0C,1);            // 显示开及光标设置
  88   1      }
  89          
  90          /**************************************************************
  91                                                          按指定位置显示一个字符
  92          ***************************************************************/
  93          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  94          {
  95   1              Y &= 0x1;
  96   1              X &= 0xF;                                       // 限制X不能大于15,Y不能大于1
  97   1              if (Y) X |= 0x40;                       // 当要显示第二行时地址码 0x40;
  98   1              X |= 0x80;                                      // 算出指令码
  99   1              WriteCmdLcd(X, 0);                      // 这里不检测忙信号,发送地址码
 100   1              WriteDataLcd(DData);
 101   1      }
 102          
 103          /**************************************************************
 104                                                          按指定位置显示一串字符
 105          ***************************************************************/
 106          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
 107          {
 108   1              unsigned char ListLength;
 109   1      
 110   1              ListLength = 0;
 111   1              Y &= 0x1;
 112   1              X &= 0xF;                                               // 限制X不能大于15,Y不能大于1
 113   1              while (DData[ListLength]>0x20)  // 若到达字串尾则退出
 114   1              {
 115   2                      if (X <= 0xF)                           // X坐标应小于0xF
 116   2                      {
 117   3                              DisplayOneChar(X, Y, DData[ListLength]);         // 显示单个字符
C51 COMPILER V8.02   LCD                                                                   10/08/2008 17:00:29 PAGE 3   

 118   3                              ListLength = ListLength+1 ;
 119   3                              X = X+1 ;
 120   3                      }
 121   2              }
 122   1      }
 123          
 124          
 125          
 126          /*void main(void)
 127          {
 128                  DelayMs(400);           // 启动等待,等LCM讲入工作状态
 129                  LcdInit();                      // LCD初始化
 130          
 131                  DisplayListChar(1, 1, Name);
 132                  DisplayListChar(2, 0, Logo);
 133          
 134                  while(1)
 135                  {
 136                          ;
 137                  }
 138          }*/


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