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

📄 main.lst

📁 基于51单片机的简易计算器
💻 LST
字号:
C51 COMPILER V8.02   MAIN                                                                  06/02/2011 14:07:46 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: F:\程序\mmm\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include"reg52.h"
   2          #include"math.h"
   3          
   4          #define uchar unsigned char
   5          #define uint unsigned int
   6          
   7          #define key P3
   8          #define duan P2
   9          #define wei P1
  10          
  11          sbit led=P0^0;
  12          sbit buzzer=P0^1;
  13          
  14          uchar num,temp,num1,i=0;
  15          long bczs=0,czs=0,jiguo=0,jiguo1=0;
  16          uchar czs12=1;    //输入数的选择标志位,1为第一个数,2为第二个数
  17          uchar yiweiflag,qinflag;  //移位标志
  18          
  19          uchar code shuzi[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};      //0~9,-,
  20          uchar code weizi[9]={0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  21          uchar code error[10]={0xff,0xaf,0xc0,0xaf,0xaf,0x86,0xff,0xff,0xff};//error
  22          uchar playshuzu[9],fuhao;
  23          uchar zhi,weishu=0;
  24          
  25          void init();              //函数申明
  26          uchar keyscan();
  27          uchar scanzhi();
  28          void display();
  29          void duzhichuli();
  30          void zhuandisplayjiguo();
  31          void jiafa();
  32          void jianfa();
  33          void chengfa();
  34          void chufa();
  35          void qin();
  36          void displayerror();
  37          //======================================
  38          void main()                       //主函数
  39          {
  40   1              init();
  41   1              display();
  42   1              while(1)
  43   1              {
  44   2                      duzhichuli();
  45   2              }
  46   1      }
  47          //===============================================================================
  48          void init()
  49          {
  50   1              uchar i;
  51   1              czs12=1;
  52   1              yiweiflag=1;  //1不移
  53   1              qinflag=0;    //不清除
  54   1              duan=shuzi[8];
  55   1              wei=weizi[5];
C51 COMPILER V8.02   MAIN                                                                  06/02/2011 14:07:46 PAGE 2   

  56   1              playshuzu[1]=shuzi[0];
  57   1              for(i=2;i<9;i++)
  58   1                      playshuzu[i]=shuzi[10];
  59   1                      
  60   1              bczs=0;czs=0;jiguo=0,jiguo1=0;          
  61   1      }
  62          //===============================================================================
  63          void delay(uint x)
  64          {
  65   1              uchar y;
  66   1              for(x;x>0;x--)
  67   1                      for(y=112;y>0;y--);
  68   1      }
  69          
  70          //====================================
  71          uchar keyscan()
  72          {
  73   1      unsigned char recode,i,j;
  74   1              for(i=0;i<4;i++)
  75   1                      {
  76   2                              P3=~(0x01<<i);
  77   2                              recode=P3>>4;
  78   2                              if(recode<0x0f)
  79   2                              { 
  80   3                              for(j=0;j<4;j++)
  81   3                              {if(!(recode&0x01<<j))break;} 
  82   3                              return (i<<2)+(j+1); //返回键值 1-16
  83   3                              } 
  84   2                              delay(5); //延时5ms
  85   2                      }
  86   1         return 0; //无按键返回
  87   1      }
  88          //========================================
  89          uchar scanzhi()
  90          {
  91   1              uchar zhi,k;
  92   1              k=keyscan();
  93   1              switch(k)
  94   1              {
  95   2                      case 0: zhi=27;break;
  96   2                      case 1: zhi=7;break;
  97   2                      case 2: zhi=8;break;
  98   2                      case 3: zhi=9;break;
  99   2                      case 4: zhi=24;break;   // /
 100   2      
 101   2                      case 5: zhi=4;break;
 102   2                      case 6: zhi=5;break;
 103   2                      case 7: zhi=6;break;
 104   2                      case 8: zhi=23;break;   //*
 105   2      
 106   2                      case 9: zhi=1;break;
 107   2                      case 10: zhi=2;break;
 108   2                      case 11: zhi=3;break;
 109   2                      case 12: zhi=22;break;   //-
 110   2      
 111   2                      case 13: zhi=26;break;  //nc
 112   2                      case 14: zhi=0;break;
 113   2                      case 15: zhi=25;break;  //=
 114   2                      case 16: zhi=21;break;  //+
 115   2              }
 116   1              return(zhi);
 117   1      }
C51 COMPILER V8.02   MAIN                                                                  06/02/2011 14:07:46 PAGE 3   

 118          //===========================================
 119          void duzhichuli()
 120          {
 121   1              uchar tt,u;
 122   1      
 123   1              tt=scanzhi();
 124   1              if(tt!=27)
 125   1              {
 126   2                      led=0;
 127   2                      buzzer=0;
 128   2                      if(tt<=9)//数字输入
 129   2                      {
 130   3                              if(qinflag==1)  qin();
 131   3                                      qinflag=0;
 132   3                              if(yiweiflag!=1)
 133   3                              {
 134   4                                      for(u=8;u>1;u--)                         //移位输入
 135   4                                      {
 136   5                                              playshuzu[u]=playshuzu[u-1];
 137   5                                      } 
 138   4                              }
 139   3                              yiweiflag=0;    //移位
 140   3                              playshuzu[1]=shuzi[tt]; 
 141   3                              if(czs12==1)   bczs=bczs*10+tt;                 //
 142   3                              if(czs12==2)   czs=czs*10+tt;           
 143   3                      }
 144   2                      if(tt>20)//符号输入
 145   2                      {
 146   3                              switch(tt)
 147   3                              {
 148   4                                      case 21:        jiafa();break;          //+
 149   4                                      case 22:    jianfa();break;             //-
 150   4                                      case 23:    chengfa();break;    //*
 151   4                                      case 24:    chufa();break;
 152   4                                      case 25:    zhuandisplayjiguo();break;          //=
 153   4                                      case 26:    init();break;               //nc
 154   4                              }               
 155   3                      } 
 156   2              }
 157   1        //-----------------------------------------------
 158   1              while(tt!=27)      //松手检测
 159   1              {
 160   2                      led=0;
 161   2                      buzzer=0;
 162   2                      tt=scanzhi();
 163   2                      delay(1);
 164   2                      if(tt==27) goto chu;
 165   2              }
 166   1      
 167   1              chu: delay(1);
 168   1              led=1;
 169   1              buzzer=1;
 170   1      }
 171          
 172          //============================================
 173          void display()
 174          {
 175   1      
 176   1              TMOD=0x01;
 177   1              TH0=(65536-200)/256;
 178   1              TL0=(65536-200)%256;
 179   1              EA=1;
C51 COMPILER V8.02   MAIN                                                                  06/02/2011 14:07:46 PAGE 4   

 180   1              ET0=1;
 181   1              TR0=1;
 182   1      
 183   1      }
 184          void TIME0(void) interrupt 1
 185          {
 186   1              TH0=(65536-200)/256;
 187   1              TL0=(65536-200)%256;
 188   1              i++;
 189   1              if(i==9) i=1;
 190   1              wei=weizi[i];
 191   1                  duan=playshuzu[i];  
 192   1      }
 193          //===============================================          //显示数转操作数
 194          void zhuandisplayjiguo()
 195          {
 196   1              uchar i,k;
 197   1              long ttt;
 198   1      
 199   1              for(i=1;i<9;i++)
 200   1                      playshuzu[i]=shuzi[10];
 201   1          //----------------------------------------
 202   1              switch(fuhao)
 203   1              {
 204   2                      case 1: jiguo=bczs+czs;break;
 205   2                      case 2: jiguo=bczs-czs;break;
 206   2                      case 3: jiguo=bczs*czs;break;
 207   2                      case 4: jiguo=bczs/czs;break;
 208   2                      case 0: jiguo=jiguo1;break;
 209   2              }
 210   1              fuhao=0;
 211   1      
 212   1              //----------------------------------------
 213   1              ttt=jiguo;
 214   1              jiguo1=jiguo;                                                      //显示处理
 215   1              k=1;                                    //取数的个数
 216   1          for(i=1;i<=8;i++)
 217   1                 {
 218   2                              if(ttt/10!=0)  k++;
 219   2                              ttt=ttt/10;     
 220   2                 }    
 221   1      
 222   1              for(i=8;i>k;i--)
 223   1                 {
 224   2                              playshuzu[i]=shuzi[10];
 225   2                 }
 226   1              if(jiguo<0)  { jiguo=fabs(jiguo);playshuzu[k+1]=shuzi[11]; }   //取正加负号
 227   1              
 228   1              for(i=1;i<=k;i++)
 229   1                 {
 230   2                              playshuzu[i]=shuzi[jiguo%10];
 231   2                              jiguo=jiguo/10; 
 232   2                 }
 233   1              if(jiguo1>99999999) displayerror();
 234   1              
 235   1      }
 236          //===================================================
 237          void qin()
 238          {
 239   1              uchar i;
 240   1              yiweiflag=1;  //1不移
 241   1              playshuzu[1]=shuzi[0];
C51 COMPILER V8.02   MAIN                                                                  06/02/2011 14:07:46 PAGE 5   

 242   1              for(i=2;i<9;i++)
 243   1                      playshuzu[i]=shuzi[10];
 244   1      }
 245          //===================================================
 246          void displayerror()
 247          {
 248   1              uchar i;
 249   1              for(i=1;i<=8;i++)
 250   1                      playshuzu[i]=error[i];
 251   1      }
 252          //===================================================
 253          void jiafa()   //+
 254          {
 255   1      
 256   1              qinflag=1;
 257   1          if(jiguo1!=0) bczs=jiguo1;
 258   1              czs=0;
 259   1              czs12=2;
 260   1              fuhao=1;   //+          
 261   1      }
 262          
 263          void jianfa()
 264          {
 265   1      
 266   1              qinflag=1;
 267   1              if(jiguo1!=0) bczs=jiguo1;
 268   1              czs=0;
 269   1              czs12=2;
 270   1              fuhao=2;   //-
 271   1      }
 272          
 273          void chengfa()
 274          {
 275   1      
 276   1              qinflag=1;
 277   1              if(jiguo1!=0) bczs=jiguo1;
 278   1              czs=0;
 279   1              czs12=2;
 280   1              fuhao=3;   //*  
 281   1      }
 282          
 283          void chufa()
 284          {
 285   1      
 286   1              qinflag=1;
 287   1              if(jiguo1!=0) bczs=jiguo1;
 288   1              czs=0;
 289   1              czs12=2;
 290   1              fuhao=4;   // /
 291   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1304    ----
   CONSTANT SIZE    =     31    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     35       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 + -