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

📄 lcd_calm.lst

📁 用LCD显示器的计算器
💻 LST
字号:
C51 COMPILER V7.07   LCD_CALM                                                              04/13/2009 20:45:12 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE LCD_CALM
OBJECT MODULE PLACED IN lcd_calm.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd_calm.c DEBUG OBJECTEXTEND

stmt level    source

   1                                                     #include <AT89X51.H> 
   2          #include<stdio.h>
   3          #include<math.h>
   4          #include<absacc.h>
   5          
   6            
   7          unsigned char code dispcode[]="0123456789";
   8          
   9          unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  10          unsigned char a[8];
  11          unsigned char i,j;
  12          unsigned char temp,x,count;
  13          unsigned char key,k;
  14          unsigned long sun=0,chu=0,xian=0;
  15          unsigned long bian=0;
  16          sbit RS=P1^5;
  17          sbit RW=P1^6;
  18          sbit EN=P1^7;
  19          void delay(unsigned char);
  20          void init();
  21          void wc51r(unsigned char j);
  22          void wc51ddr(unsigned char j);
  23          
  24          
  25          
  26          
  27          
  28          
  29          
  30          void main(void) 
  31          
  32          { 
  33   1      
  34   1        TMOD=0x01; 
  35   1      
  36   1        TH0=(65536-10000) / 256; 
  37   1      
  38   1        TL0=(65536-10000) % 256; 
  39   1      
  40   1        TR0=1; 
  41   1      
  42   1        ET0=1; 
  43   1      
  44   1        EA=1;
  45   1      
  46   1       
  47   1        init();
  48   1        wc51r(0x80);
  49   1      
  50   1        
  51   1         
  52   1         
  53   1         
  54   1         
  55   1         
C51 COMPILER V7.07   LCD_CALM                                                              04/13/2009 20:45:12 PAGE 2   

  56   1        count=0;
  57   1        
  58   1        
  59   1      
  60   1      for( k=4;;k++) 
  61   1      
  62   1          { 
  63   2      
  64   2            P3=dispbitcode[k]; 
  65   2            
  66   2            temp=P3; 
  67   2      
  68   2            temp=temp & 0x0f; 
  69   2      
  70   2            if (temp!=0x0f) 
  71   2      
  72   2              { 
  73   3      
  74   3                for(i=50;i>0;i--) 
  75   3      
  76   3                for(j=200;j>0;j--); 
  77   3      
  78   3                temp=P3; 
  79   3      
  80   3                temp=temp & 0x0f; 
  81   3      
  82   3                if (temp!=0x0f) 
  83   3      
  84   3                  { 
  85   4      
  86   4                    temp=P3; 
  87   4      
  88   4                    temp=temp & 0x0f;              
  89   4                
  90   4                    switch(temp) 
  91   4      
  92   4                      { 
  93   5      
  94   5                        case 0x0e: 
  95   5                        
  96   5                         if (k==4)
  97   5                          key=7;
  98   5      
  99   5                         if (k==5)
 100   5                          key=4;
 101   5      
 102   5                         if (k==6)
 103   5                          key=1;
 104   5      
 105   5                         if (k==7)
 106   5                          key=15;
 107   5      
 108   5                          break; 
 109   5      
 110   5                        case 0x0d:
 111   5       
 112   5                         if (k==4)
 113   5                          key=8;
 114   5      
 115   5                         if (k==5)
 116   5                          key=5;
 117   5      
C51 COMPILER V7.07   LCD_CALM                                                              04/13/2009 20:45:12 PAGE 3   

 118   5                         if (k==6)
 119   5                          key=2;
 120   5      
 121   5                         if (k==7)
 122   5                          key=0; 
 123   5      
 124   5                          break; 
 125   5      
 126   5                        case 0x0b: 
 127   5                      
 128   5                         if (k==4)
 129   5                          key=9;
 130   5                      
 131   5                         if (k==5)
 132   5                          key=6;
 133   5      
 134   5                         if (k==6)
 135   5                          key=3;
 136   5      
 137   5                         if (k==7)
 138   5                          key=14; 
 139   5      
 140   5                          break; 
 141   5      
 142   5                        case 0x07: 
 143   5      
 144   5                         if (k==4)
 145   5                          key=10; 
 146   5      
 147   5                         if (k==5)
 148   5                          key=11;
 149   5      
 150   5                         if (k==6)
 151   5                          key=12;
 152   5      
 153   5                         if (k==7)
 154   5                          key=13;
 155   5      
 156   5                          break;
 157   5                        
 158   5      
 159   5      
 160   5       
 161   5      
 162   5                      }
 163   4                                      
 164   4                                       while(temp!=0x0f) 
 165   4      
 166   4                      { 
 167   5      
 168   5                        temp=P3; 
 169   5      
 170   5                        temp=temp & 0x0f;              
 171   5      
 172   5                      } 
 173   4       
 174   4                     }
 175   3                    }
 176   2                                else
 177   2                                    key=16;
 178   2                   if (k==7)
 179   2                      k=3;
C51 COMPILER V7.07   LCD_CALM                                                              04/13/2009 20:45:12 PAGE 4   

 180   2                if ((key>=0) && (key<10))
 181   2                   { 
 182   3                   sun=sun*10+key;
 183   3                   xian=sun;  
 184   3                   }
 185   2                if ((key>9) && (key<15))
 186   2                   {
 187   3                    switch(count)
 188   3                                {
 189   4                      case 0:
 190   4                       count=key;
 191   4                       chu=sun;
 192   4                       sun=0;
 193   4                  
 194   4                      break;
 195   4      
 196   4                     case 10:
 197   4                      
 198   4                       count=key;
 199   4                       xian=chu/sun;
 200   4                       chu=xian;
 201   4                       sun=0;
 202   4                      break;
 203   4      
 204   4                    case 11:
 205   4                      
 206   4                       count=key;
 207   4      
 208   4                       xian=chu*sun;
 209   4      
 210   4                       chu=xian;
 211   4      
 212   4                       sun=0;
 213   4      
 214   4                      break;
 215   4      
 216   4                    case 12:
 217   4                      
 218   4                       count=key;
 219   4      
 220   4                       xian=chu-sun;
 221   4      
 222   4                       chu=xian;
 223   4      
 224   4                       sun=0;
 225   4                      break;
 226   4      
 227   4                    case 13:
 228   4                      
 229   4                       count=key;
 230   4      
 231   4                       xian=chu+sun;
 232   4      
 233   4                       chu=xian;
 234   4      
 235   4                       sun=0;
 236   4                      break;
 237   4      
 238   4                    case 14:
 239   4                      
 240   4      
 241   4                       count=key;
C51 COMPILER V7.07   LCD_CALM                                                              04/13/2009 20:45:12 PAGE 5   

 242   4      
 243   4                      break;
 244   4      
 245   4                    
 246   4                                      }
 247   3                   }
 248   2                        if (key==15)
 249   2                            {
 250   3                                 count=0;
 251   3      
 252   3                       sun=0;
 253   3      
 254   3                       chu=0;
 255   3      
 256   3                       xian=0;
 257   3                                }
 258   2      
 259   2                              
 260   2       
 261   2               }
 262   1              }
 263          void t0(void) interrupt 1 using 0 
 264          
 265          { 
 266   1        TR0=0;
 267   1      
 268   1        TH0=(65536-4000) / 256; 
 269   1      
 270   1        TL0=(65536-4000) % 256;
 271   1        
 272   1        if (bian!=xian)
 273   1        {
 274   2        a[7]=xian/10000000;
 275   2        a[6]=xian%10000000/1000000;
 276   2        a[5]=xian%1000000/100000;
 277   2        a[4]=xian%100000/10000;
 278   2        a[3]=xian%10000/1000;
 279   2        a[2]=xian%1000/100;
 280   2        a[1]=xian%100/10;
 281   2        a[0]=xian%10;
 282   2        
 283   2        
 284   2          x=0;
 285   2              
 286   2              wc51r(0x01);
 287   2              wc51r(0x80);
 288   2      
 289   2        
 290   2        
 291   2            while(!(a[7-x]>0))
 292   2                      {
 293   3                               
 294   3                               if (x>6)
 295   3                                   break;
 296   3                                   else
 297   3                                        x++;
 298   3                              }
 299   2                 
 300   2         for(;x<8;x++)
 301   2        {
 302   3         wc51ddr(dispcode[a[7-x]]);
 303   3         }
C51 COMPILER V7.07   LCD_CALM                                                              04/13/2009 20:45:12 PAGE 6   

 304   2        
 305   2         bian=xian;
 306   2          
 307   2              }
 308   1        
 309   1              TR0=1; 
 310   1               
 311   1      } 
 312          
 313          
 314          
 315          
 316          
 317          
 318          void init()
 319          {
 320   1      wc51r(0x01);
 321   1      
 322   1      wc51r(0x38);
 323   1      
 324   1      wc51r(0x0f);
 325   1      
 326   1      wc51r(0x06);
 327   1      
 328   1      }
 329          
 330          
 331          void wc51r(unsigned char i)
 332          {
 333   1      EN=0;RS=0;RW=0;
 334   1      EN=1;
 335   1      P2=i;
 336   1      EN=0;
 337   1      delay(5);
 338   1      
 339   1      }
 340          void wc51ddr(unsigned char i)
 341          {
 342   1      EN=0;RS=1;RW=0;
 343   1      EN=1;
 344   1      P2=i;
 345   1      EN=0;
 346   1      delay(5);
 347   1      
 348   1      }
 349          void delay(unsigned char p)
 350          {   unsigned char y=0;
 351   1          for(;p>0;p--)
 352   1          { for(y=0;y<125;y++)
 353   2              {;}
 354   2          }
 355   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1099    ----
   CONSTANT SIZE    =     19    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     31    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
C51 COMPILER V7.07   LCD_CALM                                                              04/13/2009 20:45:12 PAGE 7   

END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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