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

📄 1602lizi.lst

📁 RT1602液晶显示的例子,调试已通过,上传给大家
💻 LST
字号:
C51 COMPILER V7.02a   1602LIZI                                                             05/19/2007 13:19:24 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE 1602LIZI
OBJECT MODULE PLACED IN 1602lizi.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1602lizi.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*============================================================
   2                  使用1602液晶显示的实验例子     
   3          ==============================================================
   4          SMC1602A(16*2)模拟口线接线方式
   5          连接线图: 
   6                 ---------------------------------------------------
   7                 |LCM-----51   | LCM-----51   | LCM------51      |
   8                 --------------------------------------------------|
   9                 |DB0-----P1.0 | DB4-----P1.4 | RW-------P2.0    |
  10                 |DB1-----P1.1 | DB5-----P1.5 | RS-------P2.1    |
  11                 |DB2-----P1.2 | DB6-----P1.6 | E--------P2.2    |
  12                 |DB3-----P1.3 | DB7-----P1.7 | VLCD接1K电阻到GND|
  13                 ---------------------------------------------------
  14          
  15          
  16          
  17          [注:AT89S51使用12M晶振]
  18          =============================================================*/
  19          
  20          #define LCM_RW  P1_1//定义引脚
  21          #define LCM_RS  P1_2
  22          #define LCM_E   P1_0
  23          #define LCM_Data  P0
  24          #define Busy    0x80 //用于检测LCM状态字中的Busy标识
  25          
  26          #include <at89x51.h>
  27          
  28          void WriteDataLCM(unsigned char WDLCM);
  29          void WriteCommandLCM(unsigned char WCLCM,BuysC);
  30          unsigned char ReadDataLCM(void);
  31          unsigned char ReadStatusLCM(void);
  32          void LCMInit(void);
  33          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
  34          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
  35          void Delay5Ms(void);
  36          void Delay400Ms(void);
  37          
  38          unsigned char code cdle_net[] = {"www.cdle.net"};
  39          unsigned char code email[] = {"pnzwzw@cdle.net"};
  40          
  41          void main(void)
  42          {
  43   1       Delay400Ms(); //启动等待,等LCM讲入工作状态
  44   1       LCMInit(); //LCM初始化
  45   1       Delay5Ms(); //延时片刻(可不要)
  46   1      
  47   1       DisplayListChar(0, 0, cdle_net);
  48   1       DisplayListChar(0, 1, email);
  49   1       ReadDataLCM();//测试用句无意义
  50   1       while(1);
  51   1      }
  52          
  53          //写数据
  54          void WriteDataLCM(unsigned char WDLCM)
  55          {
C51 COMPILER V7.02a   1602LIZI                                                             05/19/2007 13:19:24 PAGE 2   

  56   1       ReadStatusLCM(); //检测忙
  57   1       LCM_Data = WDLCM;
  58   1       LCM_RS = 1;
  59   1       LCM_RW = 0;
  60   1       LCM_E = 0; //若晶振速度太高可以在这后加小的延时
  61   1       LCM_E = 0; //延时
  62   1       LCM_E = 1;
  63   1      }
  64          
  65          //写指令
  66          void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
  67          {
  68   1       if (BuysC) ReadStatusLCM(); //根据需要检测忙
  69   1       LCM_Data = WCLCM;
  70   1       LCM_RS = 0;
  71   1       LCM_RW = 0; 
  72   1       LCM_E = 0;
  73   1       LCM_E = 0;
  74   1       LCM_E = 1; 
  75   1      }
  76          
  77          //读数据
  78          unsigned char ReadDataLCM(void)
  79          {
  80   1       LCM_RS = 1; 
  81   1       LCM_RW = 1;
  82   1       LCM_E = 0;
  83   1       LCM_E = 0;
  84   1       LCM_E = 1;
  85   1       return(LCM_Data);
  86   1      }
  87          
  88          //读状态
  89          unsigned char ReadStatusLCM(void)
  90          {
  91   1       LCM_Data = 0xFF; 
  92   1       LCM_RS = 0;
  93   1       LCM_RW = 1;
  94   1       LCM_E = 0;
  95   1       LCM_E = 0;
  96   1       LCM_E = 1;
  97   1       while (LCM_Data & Busy); //检测忙信号
  98   1       return(LCM_Data);
  99   1      }
 100          
 101          void LCMInit(void) //LCM初始化
 102          {
 103   1       LCM_Data = 0;
 104   1       WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
 105   1       Delay5Ms(); 
 106   1       WriteCommandLCM(0x38,0);
 107   1       Delay5Ms(); 
 108   1       WriteCommandLCM(0x38,0);
 109   1       Delay5Ms(); 
 110   1      
 111   1       WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
 112   1       WriteCommandLCM(0x08,1); //关闭显示
 113   1       WriteCommandLCM(0x01,1); //显示清屏
 114   1       WriteCommandLCM(0x06,1); // 显示光标移动设置
 115   1       WriteCommandLCM(0x0C,1); // 显示开及光标设置
 116   1      }
 117          
C51 COMPILER V7.02a   1602LIZI                                                             05/19/2007 13:19:24 PAGE 3   

 118          //按指定位置显示一个字符
 119          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
 120          {
 121   1       Y &= 0x1;
 122   1       X &= 0xF; //限制X不能大于15,Y不能大于1
 123   1       if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
 124   1       X |= 0x80; //算出指令码
 125   1       WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
 126   1       WriteDataLCM(DData);
 127   1      }
 128          
 129          //按指定位置显示一串字符
 130          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
 131          {
 132   1       unsigned char ListLength;
 133   1      
 134   1        ListLength = 0;
 135   1       Y &= 0x1;
 136   1       X &= 0xF; //限制X不能大于15,Y不能大于1
 137   1       while (DData[ListLength]>0x20) //若到达字串尾则退出
 138   1        {
 139   2         if (X <= 0xF) //X坐标应小于0xF
 140   2          {
 141   3           DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
 142   3           ListLength++;
 143   3           X++;
 144   3          }
 145   2        }
 146   1      }
 147          
 148          //5ms延时
 149          void Delay5Ms(void)
 150          {
 151   1       unsigned int TempCyc = 5552;
 152   1       while(TempCyc--);
 153   1      }
 154          
 155          //400ms延时
 156          void Delay400Ms(void)
 157          {
 158   1       unsigned char TempCycA = 5;
 159   1       unsigned int TempCycB;
 160   1       while(TempCycA--)
 161   1       {
 162   2        TempCycB=7269;
 163   2        while(TempCycB--);
 164   2       };
 165   1      }
 166          


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