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

📄 lcd1602.lst

📁 能较好的实现无线通信 用点阵来实现 距离有100米 程序已通过调试
💻 LST
字号:
C51 COMPILER V8.05a   LCD1602                                                              06/08/2008 19:08:31 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN LCD1602.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD1602\LCD1602.c BROWSE DEBUG OBJECTEXTEND PRINT(.\LCD1602.lst) OBJECT(LCD
                    -1602.obj)

line level    source

   1          #include "LCD1602.h"
   2          
   3          /*********LCD1602***********/
   4          
   5          sbit    LCD_RW  =       P3^6;
   6          sbit    LCD_RS  =       P3^7;
   7          sbit    LCD_E   =       P3^4;
   8          
   9          //sbit  LCD_RW  =       P2^5;
  10          //sbit  LCD_RS  =       P2^6;
  11          //sbit  LCD_E   =       P2^4;
  12          
  13          #define LCD_Data        P1
  14                                                            
  15          #define BUSYFLAG 0x80 //用于检测LCM状态字中的Busy标识
  16          
  17          
  18          #define Xtal 11.0592
  19          
  20          void delay_1ms(void)
  21          {
  22   1              unsigned int i;
  23   1      
  24   1              for (i=1; i<(unsigned int)((Xtal*143-2)/12); ++i);  
  25   1      }
  26          
  27          void delay_ms(unsigned int n)
  28          {
  29   1              unsigned int i;
  30   1      
  31   1              for (i=0; i<n; ++i)
  32   1                      delay_1ms();
  33   1      }
  34          
  35          
  36          
  37          /*static void short_delay(unsigned int i)
  38          {
  39                  while (i>0) i--;
  40          }*/
  41          
  42          
  43          void ReadBusyLCD(void)     // 测试LCD忙碌状态 直到忙碌状态结束
  44          {       
  45   1              bit result;
  46   1              LCD_Data |= BUSYFLAG; //D7(BF) 1-正在执行内部操作 0-可接收指令
  47   1              do
  48   1              {
  49   2                      LCD_RS = 0;
  50   2                      LCD_RW = 1;
  51   2                      LCD_E = 1;
  52   2                      result = (bit)(LCD_Data & 0x80);////
  53   2                      LCD_E = 0;
  54   2              }while (result == 1);
C51 COMPILER V8.05a   LCD1602                                                              06/08/2008 19:08:31 PAGE 2   

  55   1      }
  56          
  57          
  58          
  59          //写数据
  60          void WriteDataLCD(unsigned char WDLCD)
  61          {
  62   1              ReadBusyLCD(); //检测忙
  63   1              LCD_Data = WDLCD;
  64   1              LCD_RS = 1;
  65   1              LCD_RW = 0;
  66   1              LCD_E = 1;
  67   1              LCD_E = 1;
  68   1              LCD_E = 0; //若晶振速度太高可以在这后加小的延时
  69   1      
  70   1      }
  71          
  72          
  73          //写指令
  74          void WriteCommandLCD(unsigned char WCLCD,unsigned char BusyC) //BusyC为0时忽略忙检测
  75          {
  76   1              if (BusyC) ReadBusyLCD(); //根据需要检测忙
  77   1              LCD_Data = WCLCD;
  78   1              LCD_RS = 0;
  79   1              LCD_RW = 0; 
  80   1              LCD_E = 1;
  81   1              LCD_E = 1; 
  82   1              LCD_E = 0;
  83   1      
  84   1      }
  85          
  86          
  87          void LCDInit(void) //LCM初始化
  88          {
  89   1              LCD_E = 0;
  90   1              WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号
  91   1              delay_ms(5);
  92   1              //short_delay(250);
  93   1              WriteCommandLCD(0x38,0);
  94   1              //short_delay(250);
  95   1              delay_ms(5);
  96   1              WriteCommandLCD(0x38,0);
  97   1              WriteCommandLCD(0x38,1); //显示模式设置,开始要求每次检测忙信号
  98   1              WriteCommandLCD(0x08,1); //关闭显示
  99   1              WriteCommandLCD(0x01,1); //显示清屏
 100   1              WriteCommandLCD(0x06,1); // 显示光标移动设置
 101   1              WriteCommandLCD(0x0C,1); // 显示开及光标设置
 102   1              delay_ms(5);
 103   1              //short_delay(250);
 104   1      }
 105          
 106          
 107          //按指定位置显示一个字符
 108          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
 109          {
 110   1              Y &= 0x1;
 111   1              X &= 0xF; //限制X不能大于15,Y不能大于1
 112   1              if (Y) X |= 0x40; //当要显示第二行时地址码 0x40;
 113   1              X |= 0x80; // 算出指令码
 114   1              WriteCommandLCD(X, 0); //这里不检测忙信号,发送地址码
 115   1              WriteDataLCD(DData);
 116   1      }
C51 COMPILER V8.05a   LCD1602                                                              06/08/2008 19:08:31 PAGE 3   

 117          
 118          
 119          //按指定位置显示一串字符
 120          void DisplayListChar_code(unsigned char X, unsigned char Y, unsigned char code *DData)
 121          {
 122   1              unsigned char ListLength;
 123   1              unsigned char j;
 124   1              ListLength = strlen(DData);
 125   1              Y &= 0x1;
 126   1              X &= 0xF; //限制X不能大于15,Y不能大于1
 127   1              if (X <= 0xF) //X坐标应小于0xF
 128   1              { 
 129   2                      for(j=0;j<ListLength;++j)
 130   2                      {                       
 131   3                      DisplayOneChar(X, Y, DData[j]); //显示单个字符
 132   3                      X++;
 133   3                  }
 134   2              }
 135   1      }
 136          
 137          
 138          
 139          #ifdef DisplayListChar_ENABLE
              void DisplayListChar(unsigned char X, unsigned char Y, unsigned char  *DData)
              {
                      unsigned char ListLength;
                      unsigned char j;
                      ListLength = strlen(DData);
                      Y &= 0x1;
                      X &= 0xF; //限制X不能大于15,Y不能大于1
                      if (X <= 0xF) //X坐标应小于0xF
                      { 
                              for(j=0;j<ListLength;++j)
                              {                       
                              DisplayOneChar(X, Y, DData[j]); //显示单个字符
                              X++;
                          }
                      }
              
              }
              
              #endif 
 159          
 160          
 161          
 162          #ifdef ReadDataLCD_ENABLE
                      //读数据
                      unsigned char ReadDataLCD(void)
                      {
                              LCD_RS = 1; 
                              LCD_RW = 1;
                              LCD_E = 1;
                              LCD_E = 0;
                              //short_delay(250);
                              delay_ms(5);
                              return(LCD_Data);
                      }
              #endif
 175           


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V8.05a   LCD1602                                                              06/08/2008 19:08:31 PAGE 4   

   CODE SIZE        =    243    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -