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

📄 jisuanqi.lst

📁 使用proteus keil等软件,模拟智能洗衣机的工作
💻 LST
字号:
C51 COMPILER V7.07   JISUANQI                                                              02/29/2008 19:52:43 PAGE 1   


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

stmt level    source

   1          //----键盘扫描法程序-------
   2          //----用数码管显示相应的键值-----
   3          //P1.0--P1.3接行-------
   4          //P1.4---P1.7接列-------
   5          #include<reg51.h>
   6          
   7          unsigned char key,c,k,s;
   8          unsigned int *i,j;
   9          unsigned int anjian=0xff,iob,r3,address,add_data=0x00,temp=0x01;
  10          unsigned char code a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0到F的16个键植
  11          unsigned int b[4]={0x01,0x02,0x04,0x08} ;
  12          unsigned int buffer[5]={0x73,0x00,0x00,0x00,0x00};
  13          unsigned int tab[5]={0x00,0x00,0x00,0x00,0x00};
  14          unsigned int add[3]={0x00};
  15          unsigned int flag=0x00;
  16          void cheng();
  17          void updata(unsigned int j);
  18          void buffer_data(void);
  19          void clear_data(void);
  20          void cancell();
  21          void disp();
  22          void clear();
  23          void getkey();
  24          void write();
  25          void sure();
  26          void jia(void);
  27          void chu(void);
  28          void jian(void);
  29          void Delay(unsigned char t);//延时函数
  30          
  31          void main(void)
  32          { 
  33   1              clear();
  34   1              while(1)
  35   1              {    
  36   2                         disp();
  37   2                         clear();
  38   2                             getkey();
  39   2                     write();
  40   2                                 Delay(200);
  41   2              }
  42   1              
  43   1      }
  44          
  45          void Delay(unsigned char t)//延时函数
  46          {
  47   1       unsigned char i;
  48   1         for(t=0;i<=t;t++)
  49   1           for(i=0;i<255;i++);
  50   1      }
  51          
  52          
  53          
  54          void disp(void)
  55          {   
C51 COMPILER V7.07   JISUANQI                                                              02/29/2008 19:52:43 PAGE 2   

  56   1      for(iob=0;iob<4;iob++)
  57   1              {  
  58   2                       P2 = 0x0;
  59   2               switch(iob)
  60   2               {
  61   3                      case 0: P0=buffer[0];break;
  62   3                      case 1: P0=buffer[1];break;
  63   3                      case 2: P0=buffer[2];break;
  64   3                      case 3: P0=buffer[3];break;
  65   3                  default:break;     
  66   3                }
  67   2                        P2=b[iob];
  68   2                        Delay(50);
  69   2           }
  70   1      }
  71          /////////////////////////////////////////////////////////////////////////////////////////////////////
  72          void clear()//////////////////////////////////清屏子程序,
  73          {
  74   1              for(iob=0;iob<4;iob++)
  75   1              {
  76   2                      P2=b[iob]  ;    //扫描4个led端口,显示黑屏代码
  77   2                       P0=0x00;       
  78   2                      Delay(10);
  79   2              }
  80   1      }
  81          bit pkey(void)//判断键的否被按下,通过返回值确定
  82           {
  83   1       P1=0xf0;
  84   1        if(P1!=0xf0)
  85   1          {
  86   2           Delay(100);
  87   2            if(P1!=0xf0)
  88   2             return 1;
  89   2            else 
  90   2      
  91   2             return 0;
  92   2          }
  93   1        else
  94   1            return 0;
  95   1      }//1
  96          void getkey( )
  97          
  98          {//1   
  99   1      
 100   1      
 101   1      
 102   1       
 103   1        while(1)
 104   1           {   
 105   2                      if(pkey()==1)
 106   2                      {
 107   3                     P1=0xfe;
 108   3                     k=0xfe;
 109   3                     for(c=0;c<4;c++)
 110   3                     { 
 111   4                       s=P1&0xf0;
 112   4                       switch(s)
 113   4                      {
 114   5                           case 0xe0: key=4*c+0; break; 
 115   5                               case 0xd0: key=4*c+1; break;
 116   5                            case 0xb0: key=4*c+2; break;
 117   5                            case 0x70: key=4*c+3; break;
C51 COMPILER V7.07   JISUANQI                                                              02/29/2008 19:52:43 PAGE 3   

 118   5                            default: break; 
 119   5                      }
 120   4                                  k=(k<<1)|0x01;
 121   4                                  P1=k;
 122   4                     }//for
 123   3                  //if
 124   3                //if((P1&0xf0)==0xf0)
 125   3                    switch(key)
 126   3               
 127   3               
 128   3                               {//5
 129   4                                      case 0x00 :anjian=7;   break;
 130   4                                          case 0x01 :anjian=8;   break;
 131   4                                          case 0x02 :anjian=9;   break;
 132   4                                          case 0x03 :flag=0x03;buffer_data();clear_data();break;
 133   4                                          case 0x04 :anjian=4;     break;
 134   4                                          case 0x05 :anjian=5;      break;
 135   4                                          case 0x06 :anjian=6;       break;
 136   4                                          case 0x07 :flag=0x04;buffer_data();clear_data();break;
 137   4                                                      case 0x08 :anjian=1;     break;
 138   4                                                      case 0x09 :anjian=2;     break;
 139   4                                                      case 0x0a :anjian=3;     break;
 140   4                                                      case 0x0b :flag=0x02;buffer_data();clear_data();break;
 141   4                                                      case 0x0c :cancell();     break;
 142   4                                                      case 0x0d :anjian=0;     break;
 143   4                                                      case 0x0e :sure();     break;
 144   4                                                      case 0x0f :flag=0x01;buffer_data();clear_data();break;
 145   4              
 146   4                                          default:anjian=0xff; break;     
 147   4                               }//5
 148   3                                               while(pkey()==1);
 149   3                                      }else
 150   2                                              break;
 151   2         }
 152   1       }
 153          
 154          //////////////////////////////////////////////////////////////////////////////////////////////////////
 155          void write()
 156          {  
 157   1               
 158   1               if(anjian != 0xff)
 159   1                {///////////////////////////////////////////////////////////////////////////////////////////
 160   2                  tab[0]=tab[1];
 161   2                 tab[1]=tab[2];
 162   2                      tab[2]=tab[3];
 163   2                      tab[3]=anjian;    //扫描按键数据送往数据缓冲区
 164   2                              ////////////////////////////////////////////////////////////
 165   2                      buffer[0]=a[tab[0]];
 166   2                      buffer[1]=a[tab[1]];
 167   2                      buffer[2]=a[tab[2]];
 168   2                              buffer[3]=a[tab[3]];//输出数据送到缓冲区
 169   2                       
 170   2                         /////////////////
 171   2                              address=(tab[0]*8*8*8)+(tab[1]*8*8)+(tab[2]*8)+tab[3];
 172   2                              
 173   2                }  
 174   1                          anjian=0xff;
 175   1      
 176   1                
 177   1      
 178   1              
 179   1      }
C51 COMPILER V7.07   JISUANQI                                                              02/29/2008 19:52:43 PAGE 4   

 180          void cancell()
 181          {
 182   1                      buffer[3]=buffer[2];
 183   1                      buffer[2]=buffer[1];
 184   1                      buffer[1]=buffer[0];
 185   1                              buffer[0]=0x3f;//输出数据送到缓冲区
 186   1                         ///////////////////////////////////////////////////////////////////////////////////////////
 187   1                              tab[3]=tab[2];
 188   1                      tab[2]=tab[1];
 189   1                      tab[1]=tab[0];
 190   1                              tab[0]=0x00;  //扫描按键数据送往数据缓冲区
 191   1                         //////////////////////////////////////////////////////////////////////////////////////////
 192   1      }
 193          ////////////////////////////////////////////////////////////
 194                       
 195          
 196          void sure()
 197          {  
 198   1      //////////////////////////////////////////////
 199   1              switch(flag)
 200   1                          
 201   1              {                     case 0x01 :jia() ; break;
 202   2                                case 0x02 :jian(); break;
 203   2                                case 0x03 :chu();  break;
 204   2                                 case 0x04 :cheng();break;  
 205   2                                default:anjian=0xff; break; 
 206   2              }
 207   1      }
 208          //////////////////////////////////////////////
 209          
 210          //////////////////////////////////////////////////////////////////////////////////////////////////////
 211          //加法功能键子程序
 212          void jia(void)
 213          {    buffer_data();
 214   1           add[2]=add[0]+add[1];
 215   1           updata(add[2]);    
 216   1      }
 217          void jian(void)
 218          {    buffer_data();
 219   1               add[2]=add[0]-add[1];
 220   1           updata(add[2]);
 221   1      }
 222          void chu(void)
 223          {    buffer_data();
 224   1           add[2]=add[0]/add[1];
 225   1           updata(add[2]);
 226   1      }
 227          void cheng()
 228          {   buffer_data();
 229   1          add[2]=add[0]*add[1];
 230   1              updata(add[2]);
 231   1      }
 232          void updata(unsigned int j)
 233          {  
 234   1         tab[3]=j%10;
 235   1         j=j/10;
 236   1         tab[2]=j%10;
 237   1         j=j/10;
 238   1         tab[1]=j%10;
 239   1         j=j/10;
 240   1         tab[0]=j%10;
 241   1         ///////////////////////
C51 COMPILER V7.07   JISUANQI                                                              02/29/2008 19:52:43 PAGE 5   

 242   1         buffer[0]=a[tab[0]];
 243   1         buffer[1]=a[tab[1]];
 244   1         buffer[2]=a[tab[2]];
 245   1         buffer[3]=a[tab[3]];//
 246   1      }
 247          
 248          ////////////////////////////void updata(unsigned int j)
 249          void clear_data(void)
 250          {
 251   1                      tab[0]=0x00;
 252   1                      tab[1]=0x00;
 253   1                      tab[2]=0x00;
 254   1                      tab[3]=0x00;    
 255   1                              ////////////////////////////////////////////////////////////
 256   1                      buffer[0]=a[tab[0]];
 257   1                      buffer[1]=a[tab[1]];
 258   1                      buffer[2]=a[tab[2]];
 259   1                              buffer[3]=a[tab[3]];
 260   1              
 261   1      }
 262          ////////////////////////////
 263          void buffer_data(void)
 264          {
 265   1                      add_data=(tab[0]*10*10*10)+(tab[1]*10*10)+(tab[2]*10)+tab[3];
 266   1                              add[0]=add[1];
 267   1                              add[1]=add_data;
 268   1      }
 269          


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