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

📄 text1.lst

📁 六位无符号整数加减乘除计算器
💻 LST
字号:
C51 COMPILER V8.08   TEXT1                                                                 03/11/2009 19:20:36 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: E:\单片机软件\keil\kell\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          sbit p30=P3^0;
   3          sbit p31=P3^1;
   4          sbit p32=P3^2;
   5          sbit p33=P3^3;
   6          sbit p34=P3^4;
   7          sbit p35=P3^5;
   8          
   9          sbit p10=P1^0;
  10          sbit p11=P1^1;
  11          sbit p12=P1^2;
  12          sbit p13=P1^3;
  13          int LED[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  14          int temp1=0,temp2=0,rst;
  15          int dat[6]={0},flag=0,flg=0;//dat[0]最低位个位 flag按键标志位   flg运算符标志
  16          
  17          void delay(int m)//延时程序
  18          {
  19   1              while(--m);
  20   1      }
  21          
  22          void disp(int key_dat)//按键数据显示函数
  23          {
  24   1              int i;
  25   1              if(flag)//标志判断 如果 flag=1 说明有按下
  26   1              for(i=5;i>=1;i--)//数组中数据向后移一位
  27   1              {
  28   2                      dat[i]=dat[i-1];
  29   2              }
  30   1              dat[0]=key_dat;//第一位赋值按键值
  31   1              P3=0X01;//p3.0口有效
  32   1              for(i=0;i<6;i++)
  33   1              {
  34   2                      P2=LED[dat[i]];//将数据传送到p2口
  35   2                      delay(50);
  36   2                      P3=P3<<1;//p3口右移一位                         
  37   2              }
  38   1              flag=0;//标志判断  如果 flag=0 说明没有按下
  39   1      }
  40          
  41          void clr(void)//清零函数
  42          {
  43   1              int i;
  44   1              for(i=0;i<6;i++)
  45   1              dat[i]=0;
  46   1              disp(dat[0]);
  47   1      }
  48          
  49          void temp(int f)//运算符号(处理第一个数及运算符)
  50          {
  51   1              if(flag)
  52   1              temp1=dat[5]*100000+dat[4]*10000+dat[3]*1000+dat[2]*100+dat[1]*10+dat[0];       
  53   1              flg=f;//1 add  ;2 sub   ;3mul   ;4 div
  54   1              flag=0;
  55   1              clr();//清零
C51 COMPILER V8.08   TEXT1                                                                 03/11/2009 19:20:36 PAGE 2   

  56   1      }
  57          
  58          void display(int n)//LED显示
  59          {
  60   1              char i;
  61   1              dat[5]=n/100000;//十万位
  62   1              dat[4]=n/10000%10;//万位
  63   1              dat[3]=n/1000%10;//千位
  64   1              dat[2]=n/100%10;//百位
  65   1              dat[1]=n/10%10;//十位
  66   1              dat[0]=n%10;//个位
  67   1              delay(20);
  68   1      
  69   1              P3=0X01;
  70   1              for(i=0;i<6;i++)
  71   1              {
  72   2                      P2=LED[dat[i]];
  73   2                      delay(20);
  74   2                      P3=P3<<1;                       
  75   2              }
  76   1      
  77   1      }
  78          
  79          void result(void)//运算结果函数
  80          {
  81   1              if(flag)
  82   1              temp2=dat[5]*100000+dat[4]*10000+dat[3]*1000+dat[2]*100+dat[1]*10+dat[0];
  83   1              switch(flg)
  84   1              {
  85   2                      case 0: temp2=temp1;break;
  86   2                      case 1: rst=temp1+temp2;break;
  87   2                      case 2: rst=temp1-temp2;break;
  88   2                      case 3: rst=temp1*temp2;break;
  89   2                      case 4: rst=temp1/temp2;break;
  90   2      
  91   2              }
  92   1              flg=0;
  93   1              flag=0;//标志判断  if flag=0 说明没有键按下
  94   1              display(rst);
  95   1      }
  96          
  97          
  98          void keyscan(void)//键盘扫描函数
  99          {
 100   1              P1=0xef;//第一列
 101   1              if(!p13){flag=1;while(!p13)clr();}//on键清零
 102   1              if(!p12){flag=1;while(!p12)disp(1);}//1
 103   1              if(!p11){flag=1;while(!p11)disp(4);}//4
 104   1              if(!p10){flag=1;while(!p10)disp(7);}//7
 105   1              
 106   1              
 107   1              P1=0xdf;//第二列
 108   1              if(!p13){flag=1;while(!p13)disp(0);}//0
 109   1              if(!p12){flag=1;while(!p12)disp(2);}//2
 110   1              if(!p11){flag=1;while(!p11)disp(5);}//5
 111   1              if(!p10){flag=1;while(!p10)disp(8);}//8
 112   1              
 113   1              
 114   1              P1=0xbf;//第三列
 115   1              if(!p13){flag=1;while(!p13)result();}//等号
 116   1              if(!p12){flag=1;while(!p12)disp(3);}//3
 117   1              if(!p11){flag=1;while(!p11)disp(6);}//6
C51 COMPILER V8.08   TEXT1                                                                 03/11/2009 19:20:36 PAGE 3   

 118   1              if(!p10){flag=1;while(!p10)disp(9);}//9
 119   1              
 120   1              P1=0x7f;//第四列
 121   1              if(!p13){flag=1;while(!p13)temp(1);}//+
 122   1              if(!p12){flag=1;while(!p12)temp(2);}//-
 123   1              if(!p11){flag=1;while(!p11)temp(3);}//*
 124   1              if(!p10){flag=1;while(!p10)temp(4);}///
 125   1              disp(dat[0]);//如果没有按键 就还显示原来的数值
 126   1      }
 127           
 128          main()
 129          {
 130   1      
 131   1              while(1)
 132   1              { 
 133   2                      keyscan();//键盘扫描调用
 134   2          }   
 135   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    985    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     42       4
   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 + -