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

📄 sun.lst

📁 这是自己用一个单片机做的计算器
💻 LST
字号:
C51 COMPILER V8.08   SUN                                                                   03/18/2009 03:02:07 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE SUN
OBJECT MODULE PLACED IN sun.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE sun.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          
   3            #include <reg52.h>
   4            #include <stdio.h>
   5            #include <string.h>
   6            #include <intrins.h>
   7            #include <absacc.h>
   8          
   9            #include <main.h>
  10          
  11          float f_data;
  12          xdata  uchar indata[20];
  13          xdata  uchar out_data[10];
  14          code uchar p_float[7]={0x0f,0x17,0x1f,0x27,0x2f,0x37,0x3f};
  15          code uchar sign[7]={0x0e,0x16,0x1e,0x26,0x2e,0x36,0x3e};
  16          //////////////////////////////////////////////////////////
  17          
  18           ///***************************************************************//
  19           //7281
  20           //*****************************************************************//
  21          void delay(unsigned int dd)
  22          {
  23   1          unsigned int i;
  24   1          for(i=0;i<dd;i++);
  25   1              return;
  26   1      }
  27           /***********************接受 符号*********************************************/
  28           /*****************************************************************************/
  29          unsigned char receive(void)
  30          { unsigned char i,k=0;
  31   1        clk=0;
  32   1        clk=1;
  33   1        while(dat);
  34   1        clk=0;
  35   1        clk=1;
  36   1        for(i=0;i<8;i++)
  37   1           {  delay(4);
  38   2              k=k<<1;
  39   2              if(dat) k=k|0x01;       
  40   2              else k=k&0xfe;
  41   2              clk=0;
  42   2              clk=1;
  43   2            }
  44   1        return k;
  45   1      }
  46          /***********************************写入*******************************************/
  47          /**********************************************************************************/
  48          void wr_7281(unsigned char b)
  49          {unsigned char i;
  50   1       do{
  51   2           clk=0;
  52   2           clk=1;
  53   2          }                        //B为控制字,C为数据
  54   1       while(dat);
  55   1       clk=0;
C51 COMPILER V8.08   SUN                                                                   03/18/2009 03:02:07 PAGE 2   

  56   1       clk=1;
  57   1       while(!dat);                //建立握手信?
  58   1       for(i=0;i<8;i++)
  59   1          { if(b<0x80)dat=0;
  60   2            else dat=1;
  61   2            clk=0;
  62   2            clk=1;
  63   2            b=b<<1;
  64   2            delay(2);
  65   2          }
  66   1        dat=1;
  67   1        delay(2);
  68   1        return ;
  69   1      }
  70           /**********************************显示位**************************************/
  71           /******************************************************************************/
  72          void setdisplay(uchar *p,uchar digit )
  73          { unsigned m,i;
  74   1        for(i=0;i<digit;i++)
  75   1            {
  76   2             m=i<<4;
  77   2             wr_7281(0x15);
  78   2             wr_7281(m|p[i]);
  79   2            }
  80   1        return;
  81   1      }
  82          //****************************************运算结果进行输出*************************
  83          void LED_OUT()
  84          {  uchar end_cunt,      p_cunt;                     //分别为浮点数长度和小数点位置
  85   1         uchar i,j;
  86   1         if(f_data==0)                                //如果运算结果位0,则仅在最右一位LED显示一个0
  87   1            {
  88   2              out_data[0]=0;                     
  89   2              setdisplay(out_data,1 );
  90   2            }
  91   1         else if(f_data>0)                            //如果运算结果大于0
  92   1            {
  93   2              sprintf(indata,"%f",f_data);             //把一个浮点数复制给一个字符串变量
  94   2              if(f_data>99999999)
  95   2                 {  wr_7281(0x18);                      //设置段显示
  96   3                    wr_7281(0x00); //显示E 意思为错误或溢出
  97   3                                wr_7281(0x03); //显示E 意思为错误或溢出
  98   3                                wr_7281(0x04); //显示E 意思为错误或溢出
  99   3                                wr_7281(0x05); //显示E 意思为错误或溢出
 100   3                                wr_7281(0x06); //显示E 意思为错误或溢出
 101   3                    return;
 102   3                 }
 103   2              j=0;
 104   2              end_cunt=0;
 105   2              p_cunt=0;
 106   2              for(i=0;i<9;i++)
 107   2                 { 
 108   3                   if(indata[i]!=".")
 109   3                     {  
 110   4                       if(indata[i]=="/0")
 111   4                          {
 112   5                            end_cunt=i;                // 保存浮点长度
 113   5                            break;
 114   5                          }
 115   4                       out_data[j]=indata[i];
 116   4                       j++;
 117   4                      }
C51 COMPILER V8.08   SUN                                                                   03/18/2009 03:02:07 PAGE 3   

 118   3                   if(indata[i]==".") 
 119   3                       p_cunt=i;                        //保存小数点位置
 120   3                  }
 121   2               if(p_cunt==0 && end_cunt!=0)  //无小数点显示小于8位LED
 122   2                 {
 123   3                    setdisplay(out_data,end_cunt );
 124   3                  }
 125   2               if( p_cunt!=0 && end_cunt!=0)  //有小数点显示小于8位LED
 126   2                 {
 127   3                    wr_7281(0x18);                           //设置成段显示
 128   3                    wr_7281(p_float[end_cunt-p_cunt-2]);     //显示小数点
 129   3                    setdisplay(out_data,end_cunt-1 );
 130   3                  }
 131   2               if( p_cunt!=0 && end_cunt==0)  //有点超长
 132   2                 {
 133   3                   wr_7281(0x18);                      //设置成显示小数
 134   3                   wr_7281(p_float[7-p_cunt]);         //显示小数点
 135   3                    setdisplay(out_data,8 );
 136   3                 }
 137   2              }
 138   1          else
 139   1              {
 140   2                sprintf(indata,"%f",f_data);
 141   2                if(f_data<-9999999)
 142   2                   {wr_7281(0x18);                      //设置段显示
 143   3                    wr_7281(0x00); //显示E 意思为错误或溢出
 144   3                                wr_7281(0x03); //显示E 意思为错误     或溢出
 145   3                                wr_7281(0x04); //显示E 意思为错误     或溢出
 146   3                                wr_7281(0x05); //显示E 意思为错误     或溢出
 147   3                                wr_7281(0x06); //显示E 意思为错误或溢出
 148   3                     return;
 149   3                   }
 150   2                 j=0;
 151   2                 end_cunt=0;
 152   2                 p_cunt=0;
 153   2                 for(i=0;i<8;i++)
 154   2                     { 
 155   3                      if(indata[i]!=".")
 156   3                         {  
 157   4                          if(indata[i]=="/0")
 158   4                             {
 159   5                              end_cunt=i;
 160   5                              break;
 161   5                             }
 162   4                          out_data[j]=indata[i];
 163   4                          j++;
 164   4                          }
 165   3                      if(indata[i]==".") 
 166   3                         p_cunt=i;
 167   3                      }
 168   2                 if(p_cunt==0 && end_cunt!=0)  //无点不超长
 169   2                   {
 170   3                     wr_7281(0x18);                      //设置成段显示
 171   3                     wr_7281(sign[end_cunt-1]);          //显示负号
 172   3                     setdisplay(out_data,end_cunt);
 173   3                    }
 174   2                 if( p_cunt!=0 && end_cunt!=0)  //有点不超长
 175   2                    {
 176   3                     wr_7281(0x18);                       //设置成显示小数
 177   3                     wr_7281(p_float[end_cunt-p_cunt-2]); //显示小数点
 178   3                     wr_7281(sign[end_cunt-2]);           //显示负号
 179   3                     setdisplay(out_data,end_cunt);
C51 COMPILER V8.08   SUN                                                                   03/18/2009 03:02:07 PAGE 4   

 180   3                     }
 181   2                 if( p_cunt!=0 && end_cunt==0)  //有点超长
 182   2                    {
 183   3                     wr_7281(0x18);                      //设置成段显示
 184   3                     wr_7281(p_float[6-p_cunt]);         //显示小数点
 185   3                     wr_7281(sign[6]);                   //最高位显示负号
 186   3                     setdisplay(out_data,7);
 187   3                    }
 188   2              }
 189   1          return;
 190   1      }
 191           //*************************************************************************************
 192          float add_all(uchar *p_i,uchar *p_f,uchar count)        //数组中十进制转化为浮点型数据
 193          {
 194   1           float add_a; 
 195   1           uchar tr,i;
 196   1           for(i=0;i<(count+1)/2;i++)   //交换输入顺序
 197   1              {
 198   2                   tr=p_i[i];
 199   2                   p_i[i]=p_i[count-i];
 200   2                   p_i[count-i]=tr;
 201   2              }
 202   1           add_a=p_i[7]*10000000+
 203   1                 p_i[6]*1000000+
 204   1                 p_i[5]*100000+
 205   1                 p_i[4]*10000+
 206   1                 p_i[3]*1000+
 207   1                 p_i[2]*100+
 208   1                 p_i[1]*10+
 209   1                 p_i[0];
 210   1           add_a=add_a+
 211   1                    p_f[0]*0.1+
 212   1                    p_f[1]*0.01+
 213   1                    p_f[2]*0.001+
 214   1                    p_f[3]*0.0001+
 215   1                    p_f[4]*0.00001+
 216   1                    p_f[5]*0.000001+
 217   1                    p_f[6]*0.0000001;
 218   1        return add_a;
 219   1      }
 220          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1654    ----
   CONSTANT SIZE    =     22    ----
   XDATA SIZE       =     30    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      25
   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 + -