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

📄 calculator.lst

📁 简单的用单片机编写的程序实现一位的数的加减乘除
💻 LST
字号:
C51 COMPILER V6.23a  CALCULATOR                                                            03/16/2006 12:22:41 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE CALCULATOR
OBJECT MODULE PLACED IN Calculator.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Calculator.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<AT89X52.h>//仅完成个位的四则运算,并可以处理负数结果
   2          signed char code  a[]={0x3f,0x06,0x5b,0x4f,0x66 ,0x6d ,0x7d ,0x07 ,0x7f ,0x6f,0x00,0x40};
   3          unsigned char code tv[]={0xfe,0xfd,0xfb,0xf7};
   4          signed int data led[4];
   5          signed int data tvdata=0;
   6          signed int n=0;//输入状态变量
   7          signed int s=0;//存输入值
   8          signed int t=0;//计算状态参量
   9          signed int x=0;//存第一个数
  10          signed int y=0;//存第二个数
  11          signed int z=0;//输出结果
  12          
  13          void delay(void)
  14             {
  15   1          unsigned int i;
  16   1          for(i=0;i<100;i++);
  17   1         }
  18          
  19          kp_scan()//获取键盘值
  20          {
  21   1       unsigned char i,j;
  22   1       P1=0xff;
  23   1       P1=0x0f;
  24   1       i=P1;
  25   1       P1=0xff;
  26   1       P1=0xf0;
  27   1       j=P1;
  28   1       return(i+j);
  29   1      }
  30          
  31          led_show()
  32          {
  33   1       signed int i,k,m;
  34   1       if(tvdata>=0&&tvdata<999)//正数显示
  35   1         {
  36   2           led[0]=10;//正数时符号位为空
  37   2           led[1]=tvdata/100;//取百位
  38   2           led[2]=tvdata%100/10;//取十位
  39   2           led[3]=tvdata%10;//取个位
  40   2      
  41   2           for(k=0;k<4;k++)
  42   2           {
  43   3              i=led[k];
  44   3             P0=a[i];
  45   3            i=led[k];
  46   3           P2=tv[k];
  47   3            delay();
  48   3           }
  49   2          }
  50   1       if(tvdata<0&&tvdata>-999)//负数显示
  51   1         {
  52   2          m=tvdata;
  53   2           m=-m;
  54   2           led[0]=11;//显示负号
  55   2           led[1]=m/100;//取百位
C51 COMPILER V6.23a  CALCULATOR                                                            03/16/2006 12:22:41 PAGE 2   

  56   2           led[2]=m%100/10;//取十位
  57   2           led[3]=m%10;//取个位
  58   2      
  59   2           for(k=0;k<4;k++)
  60   2           {
  61   3         i=led[k];
  62   3          P0=a[i];
  63   3        i=led[k];
  64   3        P2=tv[k];
  65   3        delay();
  66   3         }
  67   2         }
  68   1      }
  69          
  70          result(t,y,x)
  71          {
  72   1        signed int z;
  73   1        if(t==1)//加法
  74   1          {
  75   2          z=x+y;
  76   2          }
  77   1        if(t==2)//减法
  78   1          {
  79   2         z=x-y;
  80   2         }
  81   1        if(t==3)//乘法
  82   1        {
  83   2         z=x*y;
  84   2         }
  85   1        if(t==4&&y!=0)//除法
  86   1          {
  87   2         z=x/y;
  88   2         }
  89   1        else if(t==4&&y==0)//除0错误
  90   1          {
  91   2          z=999;//超出显示数值范围
  92   2          }
  93   1        else
  94   1         {
  95   2           ;
  96   2          }
  97   1        return(z);
  98   1      } 
  99            
 100          
 101          main()
 102          {
 103   1      
 104   1       while(1)
 105   1           {
 106   2           tvdata=kp_scan();
 107   2           if(tvdata!=0xff)//保持显示数值                   
 108   2           {  
 109   3       s=tvdata;
 110   3             } 
 111   2      switch(tvdata)
 112   2      {
 113   3               case 0xd7:{tvdata=0;s=0;y=s;}break;
 114   3               case 0xeb:{tvdata=1;s=1;y=s;}break;
 115   3               case 0xdb:{tvdata=2;s=2;y=s;}break;
 116   3               case 0xbb:{tvdata=3;s=3;y=s;}break;
 117   3               case 0xed:{tvdata=4;s=4;y=s;}break;
C51 COMPILER V6.23a  CALCULATOR                                                            03/16/2006 12:22:41 PAGE 3   

 118   3               case 0xdd:{tvdata=5;s=5;y=s;}break;
 119   3               case 0xbd:{tvdata=6;s=6;y=s;}break;
 120   3               case 0xee:{tvdata=7;s=7;y=s;}break;
 121   3               case 0xde:{tvdata=8;s=8;y=s;}break;     
 122   3               case 0xbe:{tvdata=9;s=9;y=s;}break; 
 123   3               case 0xe7:{tvdata=0;s=0;y=0;z=0;}break;//ON/C键
 124   3               case 0x77:{s=0;x=y;t=1;}break;//加法键
 125   3               case 0x7b:{s=0;x=y;t=2;}break;//减法键          
 126   3               case 0x7d:{s=0;x=y;t=3;}break;//乘法键
 127   3               case 0x7e:{s=0;x=y;t=4;}break;//除法键
 128   3               case 0xb7:{s=result(t,y,x);}break;//等于键
 129   3             default: ;
 130   3             }
 131   2              tvdata=s;
 132   2             led_show();
 133   2            }
 134   1      }
 135          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    757    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     22       6
   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 + -