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

📄 1602.lst

📁 1602液晶测试程序, RS EQU P3.7 RW EQU P3.6 E EQU P3.5
💻 LST
字号:
C51 COMPILER V8.01   1602                                                                  06/27/2006 00:20:43 PAGE 1   


C51 COMPILER V8.01, 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          //使用1602液晶显示的实验例子
   2          //(转载)SMC1602A(16*2)模拟口线接线方式(原著:明皓)
   3          //连接线图: 
   4          //       ---------------------------------------------------
   5          //       |LCM-----51   | LCM-----51   | LCM------51      |
   6          //       --------------------------------------------------|
   7          //       |DB0-----P1.0 | DB4-----P1.4 | RW-------P2.0    |
   8          //       |DB1-----P1.1 | DB5-----P1.5 | RS-------P2.1    |
   9          //       |DB2-----P1.2 | DB6-----P1.6 | E--------P2.2    |
  10          //       |DB3-----P1.3 | DB7-----P1.7 | VLCD接1K电阻到GND|
  11          //       ---------------------------------------------------
  12          // 
  13          //[注:AT89S51使用12M晶振]
  14          //=============================================================
  15          #define LCM_RW  P2_0 //定义引脚
  16          #define LCM_RS  P2_1
  17          #define LCM_E   P2_2
  18          #define LCM_Data  P1
  19          #define Busy    0x80 //用于检测LCM状态字中的Busy标识
  20          #include  <at89x51.h>
  21          void WriteDataLCM(unsigned char WDLCM);
  22          void WriteCommandLCM(unsigned char WCLCM,BuysC);
  23          unsigned char ReadDataLCM(void);
  24          unsigned char ReadStatusLCM(void);
  25          void LCMInit(void);
  26          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
  27          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
  28          void Delay5Ms(void);
  29          void Delay400Ms(void);
  30          unsigned char code uctech[] = {"uctech"};
  31          unsigned char code net[] = {"uctech.icpcn.com"};
  32          void main(void)
  33          {
  34   1       Delay400Ms(); //启动等待,等LCM讲入工作状态
  35   1       LCMInit(); //LCM初始化
  36   1       Delay5Ms(); //延时片刻(可不要)
  37   1       DisplayListChar(0, 5, uctech);
  38   1       DisplayListChar(0, 0, net);
  39   1       ReadDataLCM();//测试用句无意义
  40   1       while(1);
  41   1      }
  42          //写数据
  43          void WriteDataLCM(unsigned char WDLCM)
  44          {
  45   1       ReadStatusLCM(); //检测忙
  46   1       LCM_Data = WDLCM;
  47   1       LCM_RS = 1;
  48   1       LCM_RW = 0;
  49   1       LCM_E = 0; //若晶振速度太高可以在这后加小的延时
  50   1       LCM_E = 0; //延时
  51   1       LCM_E = 1;
  52   1      }
  53          //写指令
  54          void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
  55          {
C51 COMPILER V8.01   1602                                                                  06/27/2006 00:20:43 PAGE 2   

  56   1       if (BuysC) ReadStatusLCM(); //根据需要检测忙
  57   1       LCM_Data = WCLCM;
  58   1       LCM_RS = 0;
  59   1       LCM_RW = 0; 
  60   1       LCM_E = 0;
  61   1       LCM_E = 0;
  62   1       LCM_E = 1; 
  63   1      }
  64          //读数据
  65          unsigned char ReadDataLCM(void)
  66          {
  67   1       LCM_RS = 1; 
  68   1       LCM_RW = 1;
  69   1       LCM_E = 0;
  70   1       LCM_E = 0;
  71   1       LCM_E = 1;
  72   1       return(LCM_Data);
  73   1      }
  74          //读状态
  75          unsigned char ReadStatusLCM(void)
  76          {
  77   1       LCM_Data = 0xFF; 
  78   1       LCM_RS = 0;
  79   1       LCM_RW = 1;
  80   1       LCM_E = 0;
  81   1       LCM_E = 0;
  82   1       LCM_E = 1;
  83   1       while (LCM_Data & Busy); //检测忙信号
  84   1       return(LCM_Data);
  85   1      }
  86          void LCMInit(void) //LCM初始化
  87          {
  88   1       LCM_Data = 0;
  89   1       WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
  90   1       Delay5Ms(); 
  91   1       WriteCommandLCM(0x38,0);
  92   1       Delay5Ms(); 
  93   1       WriteCommandLCM(0x38,0);
  94   1       Delay5Ms(); 
  95   1       WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
  96   1       WriteCommandLCM(0x08,1); //关闭显示
  97   1       WriteCommandLCM(0x01,1); //显示清屏
  98   1       WriteCommandLCM(0x06,1); // 显示光标移动设置
  99   1       WriteCommandLCM(0x0C,1); // 显示开及光标设置
 100   1      }
 101          //按指定位置显示一个字符
 102          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
 103          {
 104   1       Y &= 0x1;
 105   1       X &= 0xF; //限制X不能大于15,Y不能大于1
 106   1       if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
 107   1       X |= 0x80; // 算出指令码
 108   1       WriteCommandLCM(X, 0); //这里不检测忙信号,发送地址码
 109   1       WriteDataLCM(DData);
 110   1      }
 111          //按指定位置显示一串字符
 112          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
 113          {
 114   1       unsigned char ListLength;
 115   1        ListLength = 0;
 116   1       Y &= 0x1;
 117   1       X &= 0xF; //限制X不能大于15,Y不能大于1
C51 COMPILER V8.01   1602                                                                  06/27/2006 00:20:43 PAGE 3   

 118   1       while (DData[ListLength]>0x20) //若到达字串尾则退出
 119   1        {
 120   2         if (X <= 0xF) //X坐标应小于0xF
 121   2          {
 122   3           DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
 123   3           ListLength++;
 124   3           X++;
 125   3          }
 126   2        }
 127   1      }
 128          //5ms延时
 129          void Delay5Ms(void)
 130          {
 131   1       unsigned int TempCyc = 5552;
 132   1       while(TempCyc--);
 133   1      }
 134          //400ms延时
 135          void Delay400Ms(void)
 136          {
 137   1       unsigned char TempCycA = 5;
 138   1       unsigned int TempCycB;
 139   1       while(TempCycA--)
 140   1       {
 141   2        TempCycB=7269;
 142   2        while(TempCycB--);
 143   2       };
 144   1      }


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