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

📄 22.lst

📁 液晶1602的驱动程序。 用的是勤正达的FM1602A--3。 MCU用51
💻 LST
字号:
C51 COMPILER V6.12  22                                                                     11/27/2008 09:54:37 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE 22
OBJECT MODULE PLACED IN .\22.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE .\22.c DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          #include"reg51.h"
   3          #define uchar unsigned char
   4          #define uint  unsigned int
   5          
   6          
   7          sbit rs=P3^0;
   8          sbit rw=P3^1;
   9          sbit e=P3^2;
  10          sbit ds=P1;
  11          sbit key=P2^0;
  12          sbit bf=P1^7;
  13          
  14          uint ms=0;
  15          uint second=0;
  16          uint min=0;
  17          uint hr=0;
  18          uint day=0;
  19          uint keytime=0;
  20          
  21          
  22          
  23          uchar code tab[]={"***FM1602A--3***"};
  24          uchar code tab1[]={0x0f,0x09,0x0f,0x09,0x0f,0x09,0x0b,0x11,
  25          0x1F,0x11,0x11,0x11,0x1F,0x11,0x11,0x1F};         //   月日
  26          uchar code number[]={"0123456789"};
  27          
  28          uchar code inti0[]={"11 26   00:00:00"};
  29          
  30          
  31          
  32          void nop(){}
  33          
  34          void delaym(uint q)               //延时
  35          {uchar n;
  36   1      while(q--)
  37   1      {for(n=0;n<24;n++){;;}}
  38   1      }
  39          
  40          void delay(unsigned int n)
  41          
  42          {
  43   1      
  44   1          unsigned int i,j;
  45   1      
  46   1          for(j=n;j>0;j--)
  47   1      
  48   1          for(i=112;i>0;i--);
  49   1      
  50   1      }                         /////// 精确MS,
  51          
  52          
  53          
  54          void check()                       //    判忙
  55          {rs=0;
C51 COMPILER V6.12  22                                                                     11/27/2008 09:54:37 PAGE 2   

  56   1      rw=1;
  57   1      e=0;
  58   1      P1=0xff;
  59   1      e=1;
  60   1      nop();
  61   1      nop();
  62   1      while(P&0x80){};
  63   1      delaym(10);
  64   1      }
  65          
  66          void sendc(uchar com)            //  发命令字
  67          {check();
  68   1       
  69   1       
  70   1       rs=0;
  71   1       rw=0;
  72   1       e=1;
  73   1       P1=com;
  74   1       
  75   1       nop();
  76   1       e=0;
  77   1       nop();
  78   1       }
  79          
  80          void sendd(uchar word)            // 发显示字
  81          {check();
  82   1       
  83   1       
  84   1       rs=1;
  85   1       rw=0;
  86   1       e=1;
  87   1      P1=word;
  88   1      nop();
  89   1      e=0;
  90   1       nop();
  91   1       }
  92          
  93          void inti()                        // 初始化
  94          {uchar d;
  95   1      sendc(0x01);
  96   1       sendc(0x38);
  97   1       sendc(0x0c);
  98   1       sendc(0x06);
  99   1       delaym(10);
 100   1      
 101   1       sendc(0x80);
 102   1      for(d=0;d<16;d++)
 103   1      {sendd(*(inti0+d));};
 104   1      sendc(0x82);
 105   1      sendd(0x00);
 106   1      sendc(0x85);
 107   1      sendd(0x01);
 108   1       sendc(0xc0);
 109   1      for(d=0;d<16;d++)
 110   1      {sendd(*(tab+d));};
 111   1      }
 112          
 113          void cpuinti()         //////////CPU开中断
 114          {
 115   1      TMOD=0x01;
 116   1      TH0=0x3c;
 117   1      TL0=0xb0;
C51 COMPILER V6.12  22                                                                     11/27/2008 09:54:37 PAGE 3   

 118   1      TR0=1;
 119   1      EA=1;
 120   1      ET0=1;
 121   1       }
 122          
 123          
 124          void displayday()         //////显示天
 125          {uchar do1,dt;
 126   1      if(day>9)
 127   1      {
 128   2      dt=day/10;
 129   2      do1=day%10;}
 130   1      else{dt=0;do1=day;};
 131   1      
 132   1      sendc(0x83);
 133   1      sendd(*(number+dt));
 134   1      sendc(0x84);
 135   1      sendd(*(number+do1));
 136   1      while(day==31)
 137   1      {day=1;
 138   2      };
 139   1      }
 140          
 141          
 142          
 143          
 144          void displayhr()         //////显示小时
 145          {uchar ho,ht;
 146   1      if(hr>9)
 147   1      {
 148   2      ht=hr/10;
 149   2      ho=hr%10;}
 150   1      else{ht=0;ho=hr;};
 151   1      
 152   1      sendc(0x88);
 153   1      sendd(*(number+ht));
 154   1      sendc(0x89);
 155   1      sendd(*(number+ho));
 156   1      while(hr==24)
 157   1      {hr=0;
 158   2      day++;
 159   2      displayday();
 160   2      };
 161   1      }
 162          
 163          
 164          
 165          void displaymin()   ///////////显示 分
 166          {uchar mo,mt;
 167   1      if(min>9)
 168   1      {
 169   2      mt=min/10;
 170   2      mo=min%10;}
 171   1      else{mt=0;mo=min;};
 172   1      
 173   1      sendc(0x8b);
 174   1      sendd(*(number+mt));
 175   1      sendc(0x8c);
 176   1      sendd(*(number+mo));
 177   1      while(min==60)
 178   1      {min=0;
 179   2      hr++;
C51 COMPILER V6.12  22                                                                     11/27/2008 09:54:37 PAGE 4   

 180   2      displayhr();};
 181   1      }
 182          
 183          
 184          
 185          void displaysec()   /////////////显示 秒
 186          {uchar o,t;
 187   1      if(second>9)
 188   1      {
 189   2      t=second/10;
 190   2      o=second%10;}
 191   1      else{t=0;o=second;};
 192   1      
 193   1      sendc(0x8e);
 194   1      sendd(*(number+t));
 195   1      sendc(0x8f);
 196   1      sendd(*(number+o));
 197   1      while(second==60)
 198   1      {second=0;
 199   2      min++;
 200   2      displaymin();};
 201   1      }
 202           
 203          void keyt ()            
 204          {keytime=0;        ///////// 键时
 205   1      while(key==0){delay(1);keytime++;};           /////////// 按键计时
 206   1      }
 207          
 208          
 209          void dayshine()  ////////////设置天位
 210          
 211          {sendc(0x83);
 212   1       sendc(0x84);
 213   1      for(;;){
 214   2      while(key==1){};
 215   2      delaym(10);
 216   2      keyt();
 217   2      if(keytime>1000)
 218   2      {TR0=1;sendc(0x0c);sendc(0x06);while(1){};};
 219   2      
 220   2      day++;if(day==31){day=0;};displayday();
 221   2            };
 222   1      
 223   1      } 
 224          
 225          
 226          
 227          
 228          
 229          void hrshine()  ////////////设置小时位
 230          {sendc(0x88);
 231   1       sendc(0x89);
 232   1      for(;;){
 233   2      while(key==1){};
 234   2      delaym(10);
 235   2      keyt();
 236   2      if(keytime>1000)
 237   2      {displayhr();dayshine();};
 238   2      
 239   2      hr++;if(hr==24){hr=0;};displayhr();
 240   2              };
 241   1      }
C51 COMPILER V6.12  22                                                                     11/27/2008 09:54:37 PAGE 5   

 242          
 243           
 244          
 245          void minshine()          ///////// 设置分位
 246          {sendc(0x8b);
 247   1       sendc(0x8c);
 248   1      for(;;){
 249   2       while(key==1){};
 250   2      delaym(10);
 251   2      keyt();
 252   2      if(keytime>1000){displaymin();hrshine();};
 253   2      min++;if(min==60){min=0;};displaymin();
 254   2                };
 255   1      
 256   1      }
 257          
 258          
 259          void secshine()          ///////// 设置秒位
 260          {sendc(0x8e);sendc(0x0f);
 261   1      sendc(0x04);
 262   1       sendc(0x8f);
 263   1      for(;;){
 264   2       while(key==1){};
 265   2      delaym(10);
 266   2      keyt();
 267   2      if(keytime>1000){displaysec();minshine();};
 268   2      second++;if(second==60){second=0;};displaysec();};
 269   1      }
 270           
 271          
 272          
 273          
 274          void longkey()
 275          {for(;;){if(key==0){TR0=0;keyt();if(keytime>1000){ secshine(); }
 276   3      };};
 277   1      
 278   1      }
 279          
 280          void setcgram()           ///////////// 设置CGRAM
 281          {uchar x; 
 282   1       sendc(0x40);
 283   1       for(x=0;x<16;x++)
 284   1       {sendd(*(tab1+x));}
 285   1      }
 286          
 287          
 288          void timer() interrupt 1            ///////////中断入口
 289          {
 290   1      ms++;
 291   1      
 292   1      displaysec();
 293   1      while(ms==15){;TH0=0x3c;TL0=0xb0;
 294   2      ms=0;
 295   2      second++;}
 296   1      }
 297          
 298          
 299          
 300          
 301          void main()             
 302          {setcgram();
 303   1       inti(); 
C51 COMPILER V6.12  22                                                                     11/27/2008 09:54:37 PAGE 6   

 304   1      cpuinti();
 305   1       longkey();
 306   1        }


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