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

📄 lcd1206.lst

📁 lcd1602的驱动程序,lcd初始化,读写数据等
💻 LST
字号:
C51 COMPILER V8.08   LCD1206                                                               03/02/2008 13:56:09 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE LCD1206
OBJECT MODULE PLACED IN LCD1206.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD1206.C BROWSE DEBUG OBJECTEXTEND

line level    source

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

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

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


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    312    ----
   CONSTANT SIZE    =     27    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       8
C51 COMPILER V8.08   LCD1206                                                               03/02/2008 13:56:09 PAGE 4   

   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 + -