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

📄 ʵ

📁 简单计算(100一内的加减乘除计算功能)简单易懂
💻
字号:
C51 COMPILER V7.50   实验四                                                                10/20/2008 11:20:40 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 实验四
OBJECT MODULE PLACED IN 实验四.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 实验四.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>                   //包含文件
   2          #define uchar unsigned char
   3          #define uint  unsigned int
   4          
   5          char b[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,
   6                            0xa1,0x86,0x8e,0x8c,0xc1,0xce,0x91,0x89,0xc7,0xff};    // 共阴极字符码
   7          
   8          //延时函数,用于实现程序中的短暂延时,表示延时cnt个毫秒
   9          void delay(unsigned int cnt)
  10          {
  11   1              unsigned char i;
  12   1              while(cnt--)
  13   1              {
  14   2                      for(i=220;i>0;i--)
  15   2                      ;
  16   2              }
  17   1      }
  18          
  19          //键盘扫描程序
  20          uchar keyboardscan(void) 
  21          {
  22   1                uchar sccode,recode;
  23   1                P1=0xf0;    //P1口附初值
  24   1                if((P1&0xf0)!=0xf0)//如果P1口电平不等于0xf0,表示有按键按下
  25   1                { 
  26   2                    delay(20);    //延时20毫秒后再判断,看是否还有按键按下,次步为软件防抖
  27   2                    if((P1&0xf0)!=0xf0)//继续判断是否有按键按下
  28   2                   { 
  29   3                        sccode=0xfe;  //进行逐行判断
  30   3                        while((sccode&0x10)!=0)
  31   3                       { 
  32   4                                    P1=sccode;
  33   4                                if((P1&0xf0)!=0xf0)
  34   4                            {
  35   5                                                recode=(P1&0xf0|0x0f);
  36   5                                                switch((~sccode)+(~recode))
  37   5                                        {   // 下面是键盘的编码识别
  38   6                                                case 0x11:    return(1);    break;
  39   6                                                case 0x21:  return(2);    break;
  40   6                                                case 0x41:    return(3);         break;
  41   6                                                case 0x81:    return(11);  break;//返回对应的键值0~15
  42   6                                                case 0x12:    return(4);    break;
  43   6                                                case 0x22:  return(5);    break;
  44   6                                                case 0x42:  return(6);    break;
  45   6                                                case 0x82:    return(12);       break;
  46   6                                                case 0x14:    return(7);    break;
  47   6                                                case 0x24:  return(8);        break;
  48   6                                                case 0x44:  return(9);   break;
  49   6                                                case 0x84:    return(13);  break;
  50   6                                                case 0x18:    return(10);   break;
  51   6                                                case 0x28:    return(15);   break;
  52   6                                                case 0x48:  return(16);   break;
  53   6                                                case 0x88:    return(14);  break;
  54   6                                                        default:break;
  55   6                               }
C51 COMPILER V7.50   实验四                                                                10/20/2008 11:20:40 PAGE 2   

  56   5                      }
  57   4                      else 
  58   4                          sccode = (sccode<<1)|0x01;
  59   4                    }
  60   3                  }
  61   2                }
  62   1               return(0xff); //如果没有按键按下,则返回0xff
  63   1      }
  64          void output(uchar number)
  65          {
  66   1      P0=b[number/10];
  67   1      P2=b[number%10];
  68   1      }
  69          int yunsuan(uchar a,uchar b,uchar c)
  70          {
  71   1              switch(c)
  72   1              {
  73   2                      case 1:return(a/b);break;
  74   2                      case 2:return(a*b);break;
  75   2                      case 3:return(a-b);break;
  76   2                      case 4:return(a+b);break;
  77   2              }
  78   1      }
  79          void main(void)                 //主函数 
  80          { 
  81   1              unsigned char n1,n2,key,index,a;
  82   1              n1=n2=index=0;
  83   1              P0=P2=b[0];
  84   1              while(1)
  85   1              {
  86   2                      key = keyboardscan();//键盘扫描,看是否有按键按下
  87   2                      if(key != 0xff)//如果有按键按下,则key不再是0xff了,显示该按键键值
  88   2                      {
  89   3                              if(key<10)
  90   3                              {
  91   4                                      if(!index) n1=key%10;
  92   4                                      else n2=key%10;
  93   4                                      output(key%10);
  94   4                              }
  95   3                              else if(key==15)
  96   3                              {
  97   4                                      n1=n2=index=0;
  98   4                                      output(0);
  99   4                              }
 100   3                              else if(key==16)
 101   3                              {
 102   4                                      if(!index) output(n1);
 103   4                                      else
 104   4                                      {
 105   5                                              a=yunsuan(n1,n2,index);
 106   5                                              a=a%100;
 107   5                                              output(a);
 108   5                                              n1=a;
 109   5                                              n2=index=0;
 110   5                                      }
 111   4                              }
 112   3                              else
 113   3                              {               
 114   4                                      if(index==0||n2==0) index=key-10;
 115   4                                      else
 116   4                                      {
 117   5                                              a=yunsuan(n1,n2,index);
C51 COMPILER V7.50   实验四                                                                10/20/2008 11:20:40 PAGE 3   

 118   5                                              a=a%100;
 119   5                                              output(a);
 120   5                                              n1=a;
 121   5                                              n2=0;
 122   5                                              index=key-10;
 123   5                                      }
 124   4                              }
 125   3                      }
 126   2              }
 127   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    421    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     23       2
   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 + -