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

📄 1602.lst

📁 1602液晶的驱动和读写程序 付LCD1602液晶的英文资料
💻 LST
字号:
C51 COMPILER V8.02   1602                                                                  12/11/2008 09:13:51 PAGE 1   


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

line level    source

   1          #include"reg51.h"
   2          #define uchar unsigned char
   3          #define uint unsigned int
   4          sbit LCM_RW=P3^3;                                                               /*定义引脚*/
   5          sbit LCM_RS=P3^2;
   6          sbit LCM_E=P3^4  ;
   7          #define LCM_Data P0
   8          #define Busy 0x80                                                               /*用于检测LCM状态字中的Busy标识*/ 
   9          
  10          void WriteDataLCM(uchar WDLCM);
  11          void WriteCommandLCM(uchar WCLCM,BuysC);
  12          uchar ReadDataLCM(void);
  13          uchar ReadStatusLCM(void);
  14          void LCMInit(void);
  15          void DisplayOneChar(uchar X, uchar Y, uchar DData);
  16          void DisplayStrChar(uchar X, uchar Y, uchar *DData);
  17          void Delay5Ms(void);
  18          void Delay400Ms(void);
  19          
  20          uchar code cdle_net[] = {"KP-51PRO V2.0"};
  21          uchar code email[] = {"cany_999@163.com"};
  22          void main(void)
  23          {
  24   1              Delay400Ms();                                                           /*启动等待,等LCM讲入工作状态*/
  25   1              LCMInit();                                                              /*LCM初始化*/
  26   1              Delay5Ms();                                                             /*延时片刻(可不要)*/
  27   1              DisplayStrChar(2, 0, cdle_net);
  28   1              DisplayStrChar(0, 1, email);
  29   1              while(1);
  30   1      }
  31                                                                                          /*写数据*/
  32          void WriteDataLCM(uchar WDLCM)
  33          {
  34   1              ReadStatusLCM();                                                        /*检测忙*/
  35   1              LCM_Data = WDLCM;
  36   1              LCM_RS = 1;
  37   1              LCM_RW = 0;
  38   1              LCM_E = 0;                                                              /*若晶振速度太高可以在这后加小的延时*/
  39   1              LCM_E = 0;                                                              /*延时*/
  40   1              LCM_E = 1;
  41   1      }
  42                                                                                          /*写指令*/
  43          void WriteCommandLCM(uchar WCLCM,BuysC)                                         /*BuysC为0时忽略忙检测*/
  44          {
  45   1              if (BuysC) ReadStatusLCM();                                             /*根据需要检测忙*/
  46   1              LCM_Data = WCLCM;
  47   1              LCM_RS = 0;
  48   1              LCM_RW = 0; 
  49   1              LCM_E = 0;
  50   1              LCM_E = 0;
  51   1              LCM_E = 1; 
  52   1      }
  53                                                                                          /*读数据*/
  54          uchar ReadDataLCM(void)
  55          {
C51 COMPILER V8.02   1602                                                                  12/11/2008 09:13:51 PAGE 2   

  56   1              LCM_RS = 1; 
  57   1              LCM_RW = 1;
  58   1              LCM_E = 0;
  59   1              LCM_E = 0;
  60   1              LCM_E = 1;
  61   1              return(LCM_Data);
  62   1      }
  63                                                                                          /*读状态*/
  64          uchar ReadStatusLCM(void)
  65          {
  66   1              LCM_Data = 0xFF; 
  67   1              LCM_RS=0;
  68   1              LCM_RW = 1;
  69   1              LCM_E = 0;
  70   1              LCM_E = 0;
  71   1              LCM_E = 1;
  72   1              while (LCM_Data & Busy);                                                /*检测忙信号*/
  73   1              return(LCM_Data);
  74   1      }
  75          
  76          void LCMInit(void)                                                              /*LCM初始化*/
  77          {
  78   1              LCM_Data = 0;
  79   1              WriteCommandLCM(0x38,0);                                                /*三次显示模式设置,不检测忙信号*/
  80   1              Delay5Ms(); 
  81   1              WriteCommandLCM(0x38,0);
  82   1              Delay5Ms(); 
  83   1              WriteCommandLCM(0x38,0);
  84   1              Delay5Ms(); 
  85   1      
  86   1              WriteCommandLCM(0x38,1);                                                /*显示模式设置,开始要求每次检测忙信号*/
  87   1              WriteCommandLCM(0x08,1);                                                /*关闭显示*/
  88   1              WriteCommandLCM(0x01,1);                                                /*显示清屏*/
  89   1              WriteCommandLCM(0x06,1);                                                /* 显示光标移动设置*/
  90   1              WriteCommandLCM(0x0C,1);                                                /*显示开及光标设置*/
  91   1      
  92   1      }                                                                               /*按指定位置显示一个字符*/
  93          void DisplayOneChar(uchar X, uchar Y, uchar 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              WriteCommandLCM(X, 0);                                                  /*这里不检测忙信号,发送地址码*/
 100   1              WriteDataLCM(DData);
 101   1      }
 102          
 103                                                                                          /*按指定位置显示一串字符*/
 104          void DisplayStrChar(uchar X, uchar Y, uchar *DData)
 105          {
 106   1              uchar ListLength;
 107   1              ListLength = 0;
 108   1              Y &= 0x1;
 109   1              X &= 0xF;                                                               /*限制X不能大于15,Y不能大于1*/
 110   1              while (DData[ListLength]>0)                                             /*若到达字串尾则退出*/
 111   1                      {
 112   2                              if (X <= 0xF)                                           /*X坐标应小于0xF*/
 113   2                                      {
 114   3                                              DisplayOneChar(X, Y, DData[ListLength]); /*显示单个字符*/
 115   3                                              ListLength++;
 116   3                                              X++;
 117   3                                      }
C51 COMPILER V8.02   1602                                                                  12/11/2008 09:13:51 PAGE 3   

 118   2                      }
 119   1      }
 120                                                                                          /*5ms延时*/
 121          void Delay5Ms(void)
 122          {
 123   1              uint TempCyc = 5552;
 124   1              while(TempCyc--);
 125   1      }
 126          
 127                                                                                          /*400ms延时*/
 128          void Delay400Ms(void)
 129          {
 130   1              uchar TempCycA = 5;
 131   1              uint TempCycB;
 132   1              while(TempCycA--)
 133   1                      {
 134   2                              TempCycB=7269;
 135   2                              while(TempCycB--);
 136   2                      }
 137   1      }
 138          
 139          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    318    ----
   CONSTANT SIZE    =     31    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       9
   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 + -