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

📄 lcm1602.lst

📁 一个使用adc0809进行数据采集,采用1602液晶显示模拟电压的源程序,已经调试通过.
💻 LST
字号:
C51 COMPILER V7.10   LCM1602                                                               03/25/2006 23:18:28 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE LCM1602
OBJECT MODULE PLACED IN LCM1602.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCM1602.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          
   3          //#include "scancodes.h"
   4          
   5          #include <REG51.H>
   6          #include <stdio.h>
   7          
   8          sbit            LCM_RW          = P3^6; //定义LCD引脚
   9          sbit            LCM_RS          = P3^7;
  10          sbit            LCM_E           = P3^5;
  11          #define         LCM_Data        P1
  12          #define         Busy            0x80    //用于检测LCM状态字中的Busy标识
  13          
  14          void LCMInit(void);
  15          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
  16          void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);
  17          void Delay5Ms(void);
  18          void Delay400Ms(void);
  19          void Decode(unsigned char ScanCode);
  20          void WriteDataLCM(unsigned char WDLCM);
  21          void WriteCommandLCM(unsigned char WCLCM,BuysC);
  22          
  23          unsigned char ReadDataLCM(void);
  24          unsigned char ReadStatusLCM(void);
  25          unsigned char code cdle_net[] = {"-www.cdle.net--"};
  26          unsigned char code email[] = {"pnzwzw@cdle.net"};
  27          unsigned char code Cls[] = {" "};
  28          
  29          
  30          
  31          void main(void)
  32          {
  33   1      unsigned char TempCyc;
  34   1      
  35   1              Delay400Ms(); //启动等待,等LCM讲入工作状态
  36   1              LCMInit(); //LCM初始化
  37   1              Delay5Ms(); //延时片刻(可不要)
  38   1              
  39   1              DisplayListChar(0, 0, cdle_net);
  40   1              DisplayListChar(0, 1, email);
  41   1              ReadDataLCM();//测试用句无意义
  42   1              for (TempCyc=0; TempCyc<10; TempCyc++)
  43   1              Delay400Ms(); //延时
  44   1              DisplayListChar(0, 1, Cls);
  45   1      }
  46          
  47          //写数据
  48          void WriteDataLCM(unsigned char WDLCM)
  49          {
  50   1              ReadStatusLCM(); //检测忙
  51   1              LCM_Data = WDLCM;
  52   1              LCM_RS = 1;
  53   1              LCM_RW = 0;
  54   1              LCM_E = 0; //若晶振速度太高可以在这后加小的延时
  55   1              LCM_E = 0; //延时
C51 COMPILER V7.10   LCM1602                                                               03/25/2006 23:18:28 PAGE 2   

  56   1              LCM_E = 1;
  57   1      }
  58          
  59          //写指令
  60          void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC为0时忽略忙检测
  61          {
  62   1              if (BuysC) ReadStatusLCM(); //根据需要检测忙
  63   1              LCM_Data = WCLCM;
  64   1              LCM_RS = 0;
  65   1              LCM_RW = 0;
  66   1              LCM_E = 0;
  67   1              LCM_E = 0;
  68   1              LCM_E = 1;
  69   1      }
  70          
  71          //读数据
  72          unsigned char ReadDataLCM(void)
  73          {
  74   1              LCM_RS = 1;
  75   1              LCM_RW = 1;
  76   1              LCM_E = 0;
  77   1              LCM_E = 0;
  78   1              LCM_E = 1;
  79   1              return(LCM_Data);
  80   1      }
  81          
  82          //读状态
  83          unsigned char ReadStatusLCM(void)
  84          {
  85   1              LCM_Data = 0xFF;
  86   1              LCM_RS = 0;
  87   1              LCM_RW = 1;
  88   1              LCM_E = 0;
  89   1              LCM_E = 0;
  90   1              LCM_E = 1;
  91   1              while (LCM_Data & Busy)
  92   1              {
  93   2                      ; //检测忙信号
  94   2              }
  95   1              return(LCM_Data);
  96   1      }
  97          
  98          void LCMInit(void) //LCM初始化
  99          {
 100   1              LCM_Data = 0;
 101   1              WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
 102   1              Delay5Ms();
 103   1              WriteCommandLCM(0x38,0);
 104   1              Delay5Ms();
 105   1              WriteCommandLCM(0x38,0);
 106   1              Delay5Ms();
 107   1              
 108   1              WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
 109   1              WriteCommandLCM(0x08,1); //关闭显示
 110   1              WriteCommandLCM(0x01,1); //显示清屏
 111   1              WriteCommandLCM(0x06,1); // 显示光标移动设置
 112   1              WriteCommandLCM(0x0F,1); // 显示开及光标设置
 113   1      }
 114          
 115          //按指定位置显示一个字符
 116          void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
 117          {
C51 COMPILER V7.10   LCM1602                                                               03/25/2006 23:18:28 PAGE 3   

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


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