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

📄 calculator.lst

📁 lcd1602显示
💻 LST
字号:
C51 COMPILER V9.00   CALCULATOR                                                            09/15/2012 17:53:24 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE CALCULATOR
OBJECT MODULE PLACED IN calculator.OBJ
COMPILER INVOKED BY: D:\Program Files\学习软件\keil c51\C51\BIN\C51.EXE calculator.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include<math.h>
   3          #include"data.h" 
   4          #include"delay12.h"
   5          #include"lcd1602.h"
   6          uchar temp,key,i,flag=0,z=4,flag1=0;
   7          signed long a=0,b=0;    
   8          uchar code table2[]="0123456789+-*/= ";
   9          uchar code table1[]={0xee,0xde,0xbe,0x7e,
  10                                                  0xed,0xdd,0xbd,0x7d,
  11                                                  0xeb,0xdb,0xbb,0x7b,
  12                                                  0xe7,0xd7,0xb7,0x77};
  13          uchar code table3[]="0123456789 ";
  14          uchar code table4[]="error";
  15          uchar code table5[]="Please input";
  16          uchar code table6[]=".";
  17          void qingling()//清零函数
  18          {       
  19   1              uchar x; 
  20   1              flag=0;
  21   1              a=0,b=0;
  22   1              init();
  23   1              writecom(0x80+0x40);
  24   1              for(x=0;x<12;x++)
  25   1              {
  26   2                      writedata(table5[x]);
  27   2              }       
  28   1      }
  29          void display(a0,a1,a2,a3,a4,a5,a6,a7,a8)//1602显示函数
  30          {
  31   1              writecom(0x80+1);
  32   1              writedata(table3[a0]);
  33   1              writecom(0x80+2);
  34   1              writedata(table3[a1]);  
  35   1              writecom(0x80+3);
  36   1              writedata(table3[a2]);  
  37   1              writecom(0x80+4);
  38   1              writedata(table3[a3]);  
  39   1              writecom(0x80+5);
  40   1              writedata(table3[a4]);
  41   1              writecom(0x80+6);
  42   1              writedata(table3[a5]);
  43   1              writecom(0x80+7);
  44   1              writedata(table3[a6]);  
  45   1              writecom(0x80+8);//小数点
  46   1              writedata(table6[0]);   
  47   1              writecom(0x80+9);//小数点后一位
  48   1              writedata(table3[a7]);  
  49   1              writecom(0x80+10);//小数点后两位
  50   1              writedata(table3[a8]);                  
  51   1      }
  52          void error()//提示错误
  53          {
  54   1              uchar x=0;
  55   1              for(x=0;x<5;x++)
C51 COMPILER V9.00   CALCULATOR                                                            09/15/2012 17:53:24 PAGE 2   

  56   1              {
  57   2                      writecom(0x80+0x40+x);
  58   2                      writedata(table4[x]);
  59   2              }
  60   1      }
  61          void turn(signed long c)//转换数字到1602上显示
  62          {
  63   1              uchar A0=0,A1=0,A2=0,A3=0,A4=0,A5=0,A6=0,A7=0,A8=0;
  64   1              A0=c/100000000;if(A0==0)A0=10;
  65   1              A1=c%100000000/10000000;if(A0==10){if(A1==0)A1=10;}
  66   1              A2=c%100000000%10000000/1000000;if(A1==10){if(A2==0)A2=10;}
  67   1              A3=c%100000000%10000000%1000000/100000;if(A2==10){if(A3==0)A3=10;}
  68   1              A4=c%100000000%10000000%1000000%100000/10000;if(A3==10){if(A4==0)A4=10;}
  69   1              A5=c%100000000%10000000%1000000%100000%10000/1000;if(A4==10){if(A5==0)A5=10;}
  70   1              A6=c%100000000%10000000%1000000%100000%10000%1000/100;
  71   1              A7=c%100000000%10000000%1000000%100000%10000%1000%100/10;
  72   1              A8=c%100000000%10000000%1000000%100000%10000%1000%100%10/1;
  73   1              display(A0,A1,A2,A3,A4,A5,A6,A7,A8);    
  74   1      }
  75          int select(uchar num)
  76          {               
  77   1              uchar y;
  78   1              if(num==11)y=1;
  79   1              if(num==12)y=2;
  80   1              if(num==13)y=3;
  81   1              if(num==14)y=4;
  82   1              return y;       
  83   1      }
  84          signed long jisuan(signed long m,signed long n,uchar v)//计算器计算部分
  85          {
  86   1              signed long t;
  87   1              switch(v)
  88   1              {
  89   2                      case 0: t=m+n;flag1=0;break;
  90   2                      case 1: t=m-n;flag1=0;break;                                                                    
  91   2                      case 2: t=m*n;flag1=0;break;
  92   2                      case 3: if(n==0){error();flag1=1;}else t=(m*100)/n;flag1=2;break;
  93   2              }return t;      
  94   1      }
  95          void  detection()//检测数字和符号a,b<65536.并显示
  96          {
  97   1                      uchar A0=0,A1=0,A2=0,A3=0,A4=0,chu=0,num;
  98   1                      signed long s;
  99   1                      P1=0xf0;                
 100   1                              if(P1!=0xf0)//检测按键
 101   1                              {
 102   2                                      delays();
 103   2                                      if(P1!=0xf0)
 104   2                                      {
 105   3                                              temp=P1;
 106   3                                              P1=0x0f;
 107   3                                              key=temp|P1;
 108   3                                              for(i=0;i<16;i++)
 109   3                                              if(key==table1[i])
 110   3                                              {num=i;break;}
 111   3                                      }
 112   2                                      delay(30);
 113   2                                      while(num==15)
 114   2                                      {
 115   3                                              num=16;
 116   3                                              qingling();
 117   3                                      }
C51 COMPILER V9.00   CALCULATOR                                                            09/15/2012 17:53:24 PAGE 3   

 118   2                                      if(flag==0)      //输入并显示第一个数字
 119   2                                      {
 120   3                                              if(num<10)
 121   3                                              {       init();
 122   4                                                      a=(num+a*10);
 123   4                                                      if(a>10000000)error();
 124   4                                                      else turn(a*100);
 125   4                                              }
 126   3                                              else
 127   3                                              {
 128   4                                                      if(num<14)
 129   4                                                              {
 130   5                                                                      init();
 131   5                                                                      flag=1;
 132   5                                                                      z=select(num);
 133   5                                                                      writecom(0x80+15);
 134   5                                                                      writedata(table2[num]);
 135   5                                                              }
 136   4                                              }
 137   3                                      }
 138   2                                      if(flag==1)//输入并显示第二个数字
 139   2                                      {               
 140   3                                              if(num<10)
 141   3                                              {
 142   4                                                      b=num+b*10;
 143   4                                                      if(b>10000000)error();
 144   4                                                      else turn(b*100);
 145   4                                              }
 146   3                                              if(num==14)flag=2;                                                                                                                              
 147   3                                      }
 148   2                                      if(flag==2||num==14)//输出结果
 149   2                                      {       
 150   3                                              init();
 151   3                                              
 152   3                                              s=jisuan(a,b,z);
 153   3                                              if(s<0)
 154   3                                              {
 155   4                                                      writecom(0x80);
 156   4                                                      writedata(table2[11]);
 157   4                                                      s=fabs(s);
 158   4                                              }
 159   3                                              if(flag1==2)turn(s);
 160   3                                              if(flag1==0)turn(s*100);
 161   3                                              if(num==15)
 162   3                                              {
 163   4                                                      while(num==15)
 164   4                                                      {
 165   5                                                              num=17;
 166   5                                                              init();
 167   5                                                              qingling();
 168   5                                                      }
 169   4                                              }
 170   3                                              flag=0;
 171   3                                              a=s;
 172   3                                              b=0;
 173   3                                      }                                       
 174   2                              }
 175   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2015    ----
C51 COMPILER V9.00   CALCULATOR                                                            09/15/2012 17:53:24 PAGE 4   

   CONSTANT SIZE    =     66    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14      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 + -