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

📄 sp0604_实验18_计算器.lst

📁 基于AT89S52编写的一个计算器C程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.01   SP0604_实验18_计算芲                                                  04/06/2006 23:05:49 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE SP0604_实验18_计算芲
OBJECT MODULE PLACED IN SP0604_实验18_计算器.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE SP0604_实验18_计算器.c BROWSE DEBUG OBJECTEXTEND TABS(2)

line level    source

   1          #include <REGX51.H>
   2          
   3          
   4          #define PORTA P0
   5          #define PORTC P2
   6          #define PORTB P1
   7          #define PINB  P1
   8          #define LEDDATAPORT PORTA
   9          #define LEDBITPORT  PORTC
  10          const unsigned char LEDDATA[]={0x3f,0x06,0x5b,0x4f,0x66,
  11                                         0x6d,0x7d,0x07,0x7f,0x6f,
  12                           0x77,0x7c,0x39,0x5e,0x79,0x71,
  13                           0x00,0x40,
  14                          };
  15          //数码管扫描代码表
  16          unsigned char code LEDBITDATA[]=
  17          {
  18            0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,
  19          };
  20                          
  21          void Delay(unsigned int t)
  22          {
  23   1        while(t)t--;
  24   1      }
  25          
  26                          
  27                          
  28                          
  29          void main(void)
  30          {
  31   1        unsigned char LEDBuffer[8]={0,16,16,16,16,16,16,16};
  32   1        unsigned char ScanLEDCount;
  33   1        
  34   1        unsigned char i;
  35   1        unsigned char Key;
  36   1        unsigned char Temp;
  37   1        unsigned char NoFlashFlag;
  38   1      
  39   1        unsigned char GetKeyCount=0;
  40   1        unsigned char GetKeyMaxFlag=0;
  41   1        
  42   1        unsigned long NumberA;
  43   1        unsigned long NumberB;
  44   1        long Result;
  45   1        unsigned char NagFlag=0;
  46   1        unsigned char DotPosition=0;
  47   1        unsigned char CurrentFunction=0;
  48   1        unsigned char Signal;
  49   1        
  50   1        
  51   1        while(1)
  52   1          {
  53   2          if(DotPosition!=0)
  54   2            {
  55   3            if(DotPosition==ScanLEDCount)LEDDATAPORT=LEDDATA[LEDBuffer[ScanLEDCount]]|0x80;
C51 COMPILER V8.01   SP0604_实验18_计算芲                                                  04/06/2006 23:05:49 PAGE 2   

  56   3              else LEDDATAPORT=LEDDATA[LEDBuffer[ScanLEDCount]];
  57   3          }
  58   2          else LEDDATAPORT=LEDDATA[LEDBuffer[ScanLEDCount]];
  59   2          LEDBITPORT=LEDBITDATA[ScanLEDCount];
  60   2          ScanLEDCount++;
  61   2          if(ScanLEDCount==sizeof(LEDBuffer))ScanLEDCount=0;
  62   2          Delay(664);
  63   2          
  64   2          PORTB = 0xF0;
  65   2          Delay(10);    
  66   2          if((PINB & 0xF0)!=0xF0)
  67   2            {
  68   3            if(NoFlashFlag==0)
  69   3              {
  70   4                Delay(664);
  71   4                if((PINB & 0xF0)!=0xF0)
  72   4                  {
  73   5                NoFlashFlag=1;
  74   5                  Temp=PINB & 0xF0;
  75   5                  PORTB = 0x0F;
  76   5                Delay(10);
  77   5                  Temp|=(PINB & 0x0F);
  78   5                  Key=0;
  79   5                
  80   5                switch(Temp)
  81   5                  {
  82   6                  case 0x7e://"=" Calc Button
  83   6                    Key=15;
  84   6                    break;
  85   6                  case 0xbe:
  86   6                    Key=13;//"/" Div Button           
  87   6                  break;
  88   6                  case 0xde://"*" Mul Button
  89   6                    Key=12;
  90   6                  break;
  91   6                  case 0xee://"0"
  92   6                    Key=0;
  93   6                  break;
  94   6                  case 0x7d://"-"
  95   6                    Key=11;
  96   6                  break;
  97   6                  case 0xbd://"3"
  98   6                    Key=3;
  99   6                  break;
 100   6                  case 0xdd://"2"
 101   6                    Key=2;
 102   6                  break;
 103   6                  case 0xed://"1"
 104   6                    Key=1;
 105   6                  break;
 106   6                  case 0x7b://"+"
 107   6                    Key=10;
 108   6                  break;
 109   6                  case 0xbb://"6"
 110   6                    Key=6;
 111   6                  break;
 112   6                  case 0xdb://"5" No.5 Button
 113   6                    Key=5;
 114   6                  break;
 115   6                  case 0xeb://"4" No.4 Button
 116   6                    Key=4;
 117   6                  break;
C51 COMPILER V8.01   SP0604_实验18_计算芲                                                  04/06/2006 23:05:49 PAGE 3   

 118   6                  case 0x77://"C" Clear Button
 119   6                    Key=14;
 120   6                  break;
 121   6                  case 0xb7://"9"
 122   6                    Key=9;
 123   6                  break;
 124   6                  case 0xd7://"8"
 125   6                    Key=8;
 126   6                  break;
 127   6                  case 0xe7://"7"
 128   6                    Key=7;
 129   6                  break;
 130   6                }
 131   5                
 132   5                switch(CurrentFunction)
 133   5                  {
 134   6                  case 0://输入数据1
 135   6                    if((Key>=0)&&(Key<=9))
 136   6                    {
 137   7                        if(GetKeyMaxFlag==0)
 138   7                        {
 139   8                          for(Temp=GetKeyCount;Temp>0;Temp--)
 140   8                          LEDBuffer[Temp]=LEDBuffer[Temp-1];
 141   8                        LEDBuffer[0]=Key;
 142   8                      GetKeyCount++;
 143   8                      if(GetKeyCount==5)GetKeyMaxFlag=1;
 144   8                        }
 145   7                    }
 146   6                    else if((Key>=10)&&(Key<=13))
 147   6                      {
 148   7                      NumberA=0;
 149   7                      Temp=0;
 150   7                      while(LEDBuffer[Temp]!=16)
 151   7                        {
 152   8                        switch(Temp)
 153   8                          {
 154   9                          case 0:
 155   9                            NumberA+=LEDBuffer[Temp];
 156   9                            break;
 157   9                          case 1:
 158   9                            NumberA+=(unsigned long)(LEDBuffer[Temp])*10;
 159   9                            break;
 160   9                          case 2:
 161   9                            NumberA+=(unsigned long)(LEDBuffer[Temp])*100;
 162   9                            break;
 163   9                          case 3:
 164   9                            NumberA+=(unsigned long)(LEDBuffer[Temp])*1000;
 165   9                            break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -