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

📄 1602.lst

📁 直流电机的驱动及1602LCD显示电子表
💻 LST
字号:
C51 COMPILER V8.02   1602                                                                  08/14/2013 16:25:11 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          #include<intrins.h>  //包含_nop_()函数定义的头文件
   3          sbit RS=P2^0;    //寄存器选择位,将RS位定义为P2.0引脚
   4          sbit RW=P2^1;    //读写选择位,将RW位定义为P2.1引脚
   5          sbit E=P2^2;     //使能信号位,将E位定义为P2.2引脚
   6          sbit BF=P0^7;    //忙碌标志位,,将BF位定义为P0.7引脚
   7          
   8          sbit set_H=P2^5;  //调整小时按键
   9          sbit set_M=P2^6;   //调整分
  10          sbit set_S=P2^7;   //调整秒
  11          
  12          
  13          unsigned char hour=12,minite=0,second=0,mscnt;
  14          //hour=12;
  15          //minite=0;
  16          //second=0;
  17          
  18          /*****************************************************
  19          函数功能:延时1ms
  20          (3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒
  21          ***************************************************/
  22          void delay1ms()
  23          {
  24   1           unsigned char i,j; 
  25   1        for(i=0;i<10;i++)
  26   1              for(j=0;j<33;j++);
  27   1      }
  28           /*****************************************************
  29          函数功能:延时若干毫秒
  30          入口参数:n
  31          ***************************************************/
  32           void delay(unsigned char n)
  33           {
  34   1           unsigned char i;
  35   1        for(i=0;i<n;i++)
  36   1             delay1ms();
  37   1       }
  38          /*****************************************************
  39          函数功能:判断液晶模块的忙碌状态
  40          返回值:result。result=1,忙碌;result=0,不忙
  41          ***************************************************/
  42           unsigned char BusyTest(void)
  43            {
  44   1            bit result;
  45   1        RS=0;                      //根据规定,RS为低电平,RW为高电平时,可以读状态
  46   1            RW=1;
  47   1           E=1;                         //E=1,才允许读写
  48   1           _nop_();                    //空操作
  49   1           _nop_();
  50   1           _nop_(); 
  51   1           _nop_();                  //空操作四个机器周期,给硬件反应时间 
  52   1           result=BF;               //将忙碌标志电平赋给result
  53   1       E=0;
  54   1            return result;
  55   1        }
C51 COMPILER V8.02   1602                                                                  08/14/2013 16:25:11 PAGE 2   

  56          /*****************************************************
  57          函数功能:将模式设置指令或显示地址写入液晶模块
  58          入口参数:dictate
  59          ***************************************************/
  60          void WriteInstruction (unsigned char dictate)
  61          {   
  62   1          while(BusyTest()==1); //如果忙就等待
  63   1        RS=0;                   //根据规定,RS和R/W同时为低电平时,可以写入指令
  64   1        RW=0;   
  65   1        E=0;                     //E置低电平(根据表8-6,写指令时,E为高脉冲,
  66   1                                                // 就是让E从0到1发生正跳变,所以应先置"0"
  67   1        _nop_();
  68   1        _nop_();               //空操作两个机器周期,给硬件反应时间
  69   1        P0=dictate;           //将数据送入P0口,即写入指令或地址
  70   1        _nop_();
  71   1        _nop_();
  72   1        _nop_();
  73   1        _nop_();               //空操作四个机器周期,给硬件反应时间
  74   1        E=1;                   //E置高电平
  75   1        _nop_();
  76   1        _nop_();
  77   1        _nop_();
  78   1        _nop_();               //空操作四个机器周期,给硬件反应时间
  79   1         E=0;                  //当E由高电平跳变成低电平时,液晶模块开始执行命令
  80   1       }
  81          /*****************************************************
  82          函数功能:指定字符显示的实际地址
  83          入口参数:x
  84          ***************************************************/
  85           void WriteAddress(unsigned char x)
  86           {
  87   1            WriteInstruction(x|0x80);  //显示位置的确定方法规定为"80H+地址码x"
  88   1      }
  89          /*****************************************************
  90          函数功能:将数据(字符的标准ASCII码)写入液晶模块
  91          入口参数:y(为字符常量)
  92          ***************************************************/
  93           void WriteData(unsigned char y)
  94           {
  95   1          while(BusyTest()==1);  
  96   1         RS=1;            //RS为高电平,RW为低电平时,可以写入数据
  97   1         RW=0;
  98   1         E=0;             //E置低电平(根据表8-6,写指令时,E为高脉冲,
  99   1                               // 就是让E从0到1发生正跳变,所以应先置"0"
 100   1         P0=y;            //将数据送入P0口,即将数据写入液晶模块
 101   1         _nop_();
 102   1         _nop_();
 103   1          _nop_();
 104   1          _nop_();           //空操作四个机器周期,给硬件反应时间
 105   1         E=1;           //E置高电平
 106   1         _nop_();
 107   1         _nop_();
 108   1         _nop_();
 109   1         _nop_();          //空操作四个机器周期,给硬件反应时间
 110   1         E=0;             //当E由高电平跳变成低电平时,液晶模块开始执行命令
 111   1       }
 112          /*****************************************************
 113          函数功能:对LCD的显示模式进行初始化设置
 114          ***************************************************/
 115          void LcdInitiate(void)
 116          {
 117   1          delay(15);                       //延时15ms,首次写指令时应给LCD一段较长的反应时间
C51 COMPILER V8.02   1602                                                                  08/14/2013 16:25:11 PAGE 3   

 118   1          WriteInstruction(0x38);     //显示模式设置:16×2显示,5×7点阵,8位数据接口
 119   1       delay(5);   //延时5ms 
 120   1       WriteInstruction(0x38);
 121   1       delay(5);
 122   1       WriteInstruction(0x38);
 123   1       delay(5);
 124   1       WriteInstruction(0x0c);     //显示模式设置:显示开,无光标
 125   1       delay(5);
 126   1       WriteInstruction(0x06);     //显示模式设置:光标右移,字符不移
 127   1       delay(5);
 128   1       WriteInstruction(0x01);    //清屏幕指令,将以前的显示内容清除
 129   1       delay(5);
 130   1       }
 131          
 132          void int_T0(void) interrupt 1  
 133          {
 134   1         TH0=-5000/256;
 135   1         TL0=-5000%256;
 136   1         mscnt++;
 137   1         if(mscnt==200)
 138   1         { 
 139   2             second++;
 140   2             if(second==60)
 141   2             {
 142   3              second=0;
 143   3              minite++;
 144   3                   if(minite==60)
 145   3                   {
 146   4                    minite=0;
 147   4                    hour++;
 148   4                         if(hour==24)
 149   4                          {
 150   5                           hour=0;
 151   5                          }
 152   4                    }
 153   3              }
 154   2          }
 155   1      }
 156             
 157          void main(void)              //主函数
 158           {
 159   1         unsigned char H,M,S;
 160   1         LcdInitiate();           //调用LCD初始化函数  
 161   1         TMOD=0x01;
 162   1         TH0=-5000/256;
 163   1         TL0=-5000%256;
 164   1         ET0=1;
 165   1         TR0=1;
 166   1         EA=1;
 167   1         while(1)
 168   1                {
 169   2                  //检测是否有时间调整操作
 170   2                              if(set_H==0)
 171   2                              {
 172   3                              delay(10);
 173   3                      if(set_H==0)
 174   3                              {
 175   4                                            hour++;
 176   4                            if(hour==24)
 177   4                                                      {
 178   5                               hour=0;
 179   5                                                      }
C51 COMPILER V8.02   1602                                                                  08/14/2013 16:25:11 PAGE 4   

 180   4                                while(set_H==0);
 181   4                      }
 182   3                               }
 183   2                               if(set_M==0)
 184   2                                              {
 185   3                                              delay(10);
 186   3                                      if(set_M==0)
 187   3                                              {
 188   4                                                       minite++;
 189   4                                    if(minite==60)
 190   4                                                                      {
 191   5                                      minite=0;
 192   5                                      }
 193   4                                       }
 194   3                                              }
 195   2                               if(set_S==0)
 196   2                                              {
 197   3                                              delay(10);
 198   3                                      if(set_S==0)
 199   3                                              { 
 200   4                                                              second++;
 201   4                                    if(second==60)
 202   4                                    {
 203   5                                     second=0;
 204   5                                     }
 205   4                                                       }
 206   3                                              }
 207   2                         WriteAddress(0x42);    //将显示地址指定为第2行第2列
 208   2                         H=hour/10+'0';
 209   2                         WriteData(H);         //将小时十位写入液晶模块
 210   2                              //字符的字形点阵读出和显示由液晶模块自动完成 
 211   2                      
 212   2                         //WriteAddress(0x43);    //将显示地址指定为第2行第3列
 213   2                         H=hour%10+'0';
 214   2                         WriteData(H);         //将小时个位写入液晶模块
 215   2                              //字符的字形点阵读出和显示由液晶模块自动完成 
 216   2                      
 217   2                         WriteAddress(0x45);    //将显示地址指定为第2行第5列
 218   2                         H=':';
 219   2                         WriteData(H);         //将字符常量':'写入液晶模块
 220   2                              //字符的字形点阵读出和显示由液晶模块自动完成 
 221   2                      
 222   2                          WriteAddress(0x47);    //将显示地址指定为第1行第7列
 223   2                         M=minite/10+'0';
 224   2                         WriteData(M);         //将分钟高位写入液晶模块
 225   2                              //字符的字形点阵读出和显示由液晶模块自动完成 
 226   2                      
 227   2                       //    WriteAddress(0x48);    //将显示地址指定为第1行第8列
 228   2                         M=minite%10+'0';
 229   2                         WriteData(M);         //将分钟低位写入液晶模块
 230   2                              //字符的字形点阵读出和显示由液晶模块自动完成 
 231   2                      
 232   2                        WriteAddress(0x4a);    //将显示地址指定为第2行第10列
 233   2                         H=':';
 234   2                         WriteData(H);         //将字符常量':'写入液晶模块
 235   2                              //字符的字形点阵读出和显示由液晶模块自动完成 
 236   2                      
 237   2                         WriteAddress(0x4c);    //将显示地址指定为第2行第11列
 238   2                         S=second/10+'0';
 239   2                         WriteData(S);         //将秒的高位写入液晶模块
 240   2                              //字符的字形点阵读出和显示由液晶模块自动完成 
 241   2                      
C51 COMPILER V8.02   1602                                                                  08/14/2013 16:25:11 PAGE 5   

 242   2                        // WriteAddress(0x4d);    //将显示地址指定为第2行第12列
 243   2                         S=second%10+'0';
 244   2                         WriteData(S);         //将秒的低位写入液晶模块
 245   2                              //字符的字形点阵读出和显示由液晶模块自动完成 
 246   2                                      delay(20);
 247   2                      }
 248   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    440    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -