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

📄 time_lcd.lst

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


C51 COMPILER V8.02, COMPILATION OF MODULE TIME_LCD
OBJECT MODULE PLACED IN time_lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE time_lcd.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          #define XMS 5500      
  10          uchar MScond=0;                                                                 /*ms*/
  11          uchar Scond=0;                                                                  /*s*/
  12          uchar Minute=0;                                                                 /*min*/
  13          uchar Hour=0;                                                                   /*h*/
  14          uchar buf[8];
  15          void WriteDataLCM(uchar WDLCM);
  16          void WriteCommandLCM(uchar WCLCM,BuysC);
  17          uchar ReadDataLCM(void);
  18          uchar ReadStatusLCM(void);
  19          void LCMInit(void);
  20          void DisplayOneChar(uchar X, uchar Y, uchar DData);
  21          void DisplayStrChar(uchar X, uchar Y, uchar *DData);
  22          void Delay5Ms(void);
  23          void Delay400Ms(void);
  24          
  25          uchar code Time[] = {"Now Time:"};
  26          /**************************************************************************/
  27          void timer0(void) interrupt 1 using 0
  28          {
  29   1              TH0=0xb1;       
  30   1              TL0=0xeb;
  31   1              MScond=MScond+1;
  32   1              if(MScond==50)          
  33   1                      {
  34   2                              MScond=0;
  35   2                              Scond=Scond+1;
  36   2                              if(Scond==60)
  37   2                                      {
  38   3                                              Scond=0;
  39   3                                              Minute=Minute+1;
  40   3                                              if(Minute==60)
  41   3                                                      {
  42   4                                                              Minute=0;
  43   4                                                              Hour=Hour+1;
  44   4                                                              if(Hour==24)Hour=0;
  45   4                                                      }
  46   3                                      }
  47   2                      }
  48   1      }
  49          
  50          void BCD(void)
  51          {
  52   1              buf[7]=Scond%10+0x30;
  53   1              buf[6]=Scond/10+0x30;
  54   1              buf[5]=0x3a;
  55   1              buf[4]=Minute%10+0x30;
C51 COMPILER V8.02   TIME_LCD                                                              12/09/2008 14:31:25 PAGE 2   

  56   1              buf[3]=Minute/10+0x30;
  57   1              buf[2]=0x3a;
  58   1              buf[1]=Hour%10+0x30;
  59   1              buf[0]=Hour/10+0x30;
  60   1      }
  61          /*************************************************************************/
  62                    
  63          void main(void)
  64          {
  65   1              uchar TMP;
  66   1              TMOD=0x01;
  67   1              TH0=0xb1;       
  68   1              TL0=0xeb;
  69   1              TR0=1;
  70   1              ET0=1;
  71   1              EA=1;
  72   1      
  73   1              Delay400Ms();                                                           /*启动等待,等LCM讲入工作状态*/
  74   1              LCMInit();                                                              /*LCM初始化*/
  75   1              Delay5Ms();                                                             /*延时片刻(可不要)*/
  76   1              DisplayStrChar(0, 0, Time);
  77   1              while(1)
  78   1                      {if(TMP!=Scond){TMP=Scond;BCD();DisplayStrChar(8, 1, buf);}}
  79   1      }
  80                                                                                          /*写数据*/
  81          void WriteDataLCM(uchar WDLCM)
  82          {
  83   1              ReadStatusLCM();                                                        /*检测忙*/
  84   1              LCM_Data = WDLCM;
  85   1              LCM_RS = 1;
  86   1              LCM_RW = 0;
  87   1              LCM_E = 0;                                                              /*若晶振速度太高可以在这后加小的延时*/
  88   1              LCM_E = 0;                                                              /*延时*/
  89   1              LCM_E = 1;
  90   1      }
  91          
  92                                                                                          /*写指令*/
  93          void WriteCommandLCM(uchar WCLCM,BuysC)                                         /*BuysC为0时忽略忙检测*/
  94          {
  95   1              if (BuysC) ReadStatusLCM();                                             /*根据需要检测忙*/
  96   1              LCM_Data = WCLCM;
  97   1              LCM_RS = 0;
  98   1              LCM_RW = 0; 
  99   1              LCM_E = 0;
 100   1              LCM_E = 0;
 101   1              LCM_E = 1; 
 102   1      }
 103          
 104                                                                                          /*读数据*/
 105          uchar ReadDataLCM(void)
 106          {
 107   1              LCM_RS = 1; 
 108   1              LCM_RW = 1;
 109   1              LCM_E = 0;
 110   1              LCM_E = 0;
 111   1              LCM_E = 1;
 112   1              return(LCM_Data);
 113   1      }
 114          
 115                                                                                          /*读状态*/
 116          uchar ReadStatusLCM(void)
 117          {
C51 COMPILER V8.02   TIME_LCD                                                              12/09/2008 14:31:25 PAGE 3   

 118   1              LCM_Data = 0xFF; 
 119   1              LCM_RS=0;
 120   1              LCM_RW = 1;
 121   1              LCM_E = 0;
 122   1              LCM_E = 0;
 123   1              LCM_E = 1;
 124   1              while (LCM_Data & Busy);                                                /*检测忙信号*/
 125   1              return(LCM_Data);
 126   1      }
 127          
 128          void LCMInit(void)                                                              /*LCM初始化*/
 129          {
 130   1              LCM_Data = 0;
 131   1              WriteCommandLCM(0x38,0);                                                /*三次显示模式设置,不检测忙信号*/
 132   1              Delay5Ms(); 
 133   1              WriteCommandLCM(0x38,0);
 134   1              Delay5Ms(); 
 135   1              WriteCommandLCM(0x38,0);
 136   1              Delay5Ms(); 
 137   1      
 138   1              WriteCommandLCM(0x38,1);                                                /*显示模式设置,开始要求每次检测忙信号*/
 139   1              WriteCommandLCM(0x08,1);                                                /*关闭显示*/
 140   1              WriteCommandLCM(0x01,1);                                                /*显示清屏*/
 141   1              WriteCommandLCM(0x06,1);                                                /* 显示光标移动设置*/
 142   1              WriteCommandLCM(0x0C,1);                                                /* 显示开及光标设置*/
 143   1      }
 144          
 145                                                                                          /*按指定位置显示一个字符*/
 146          void DisplayOneChar(uchar X, uchar Y, uchar DData)
 147          {
 148   1              Y &= 0x1;
 149   1              X &= 0xF;                                                               /*限制X不能大于15,Y不能大于1*/
 150   1              if (Y) X |= 0x40;                                                       /*当要显示第二行时地址码+0x40;*/
 151   1              X |= 0x80;                                                              /*算出指令码*/
 152   1              WriteCommandLCM(X, 0);                                                  /*这里不检测忙信号,发送地址码*/
 153   1              WriteDataLCM(DData);
 154   1      }
 155          
 156                                                                                          /*按指定位置显示一串字符*/
 157          void DisplayStrChar(uchar X, uchar Y, uchar *DData)
 158          {
 159   1              uchar ListLength;
 160   1              ListLength = 0;
 161   1              Y &= 0x1;
 162   1              X &= 0xF;                                                               /*限制X不能大于15,Y不能大于1*/
 163   1              while (DData[ListLength]>0)                                             /*若到达字串尾则退出*/
 164   1                      {
 165   2                              if (X <= 0xF)                                           /*X坐标应小于0xF*/
 166   2                                      {
 167   3                                              DisplayOneChar(X, Y, DData[ListLength]);/*显示单个字符*/
 168   3                                              ListLength++;
 169   3                                              X++;
 170   3                                      }
 171   2                      }
 172   1      }
 173          
 174                                                                                          /*5ms延时*/
 175          void Delay5Ms(void)
 176          {
 177   1              uint TempCyc = 5552;
 178   1              while(TempCyc--);
 179   1      }
C51 COMPILER V8.02   TIME_LCD                                                              12/09/2008 14:31:25 PAGE 4   

 180          
 181                                                                                          /*400ms延时*/
 182          void Delay400Ms(void)
 183          {
 184   1              uchar TempCycA = 5;
 185   1              uint TempCycB;
 186   1              while(TempCycA--)
 187   1                      {
 188   2                              TempCycB=7269;
 189   2                              while(TempCycB--);
 190   2                      }
 191   1      }
 192          
 193          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    472    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     12      10
   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 + -