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

📄 keyboard.lst

📁 单片机计算器,可计算多位小数点的+-*/.可在lcd上显示
💻 LST
字号:
C51 COMPILER V8.02   KEYBOARD                                                              08/23/2007 14:58:57 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE KEYBOARD
OBJECT MODULE PLACED IN KeyBoard.OBJ
COMPILER INVOKED BY: C:\Keil\C51\Bin\c51.exe KeyBoard.c DB SB OE ROM(LARGE) SMALL OT(6,SPEED) WL(2) RB(0)

line level    source

*** WARNING C500 IN LINE 1 OF KEYBOARD.C: LICENSE ERROR (R225: REGISTRATION FILE 'TOOLS.INI' NOT FOUND)

   1          /*+++++++++++++++++++++++++++++++++++++++++++++++++++/
   2           程序名 :KeyBoard.c 键盘扫描子程序
   3           入口:
   4           出口:键盘值
   5          +++++++++++++++++++++++++++++++++++++++++++++++++++*/
   6          #include "CPLD.h"
   7          
   8          //===============================================
   9          unsigned  char idata ucKeyState;
  10           float p1; 
  11          float p2; 
  12           
  13          float *p=&p1;
  14          unsigned char idata op;
  15          int flag=1;//控制小数点个数
  16          
  17          float f1;
  18          float f2;
  19          
  20          
  21           
  22           void ISR_int1(void) interrupt 2 using 0          
  23          { 
  24   1                                                      //ucSKey初始化
  25   1      
  26   1       unsigned int  uiI;
  27   1       unsigned char ucLcdPosX;
  28   1       unsigned char ucLcdPosY;
  29   1       
  30   1       for (uiI=0;uiI<10000;uiI++);    
  31   1                                   //延时,去掉抖动 
  32   1      if(INT1==1) goto end01;                     //读入int0,
  33   1                                                 //关闭外部中断
  34   1       for (uiI=0;uiI<10000;uiI++); 
  35   1                      //延时,去掉抖动 ;                           
  36   1      //ucSKey=GetKey();
  37   1      ucKeyState=GetKey();
  38   1                                                         //按键所对应的符号first=first&ucKeyState;
  39   1      while(INT1==0);  
  40   1      
  41   1                                    //按键是否弹起
  42   1      if(ucLcdPosY==16||ucLcdPosY==32)
  43   1      
  44   1              {
  45   2              ucLcdPosX^=1,ucLcdPosY=0;
  46   2              
  47   2              }
  48   1              
  49   1              
  50   1      
  51   1      
  52   1       //按下后显示按键所对应的单个字符
  53   1      if(ucKeyState!='=')
  54   1       
C51 COMPILER V8.02   KEYBOARD                                                              08/23/2007 14:58:57 PAGE 2   

  55   1              {
  56   2                      if(ucKeyState>='0'&&ucKeyState<='9')  //如果用户输入的字符是数字,那么就把对相应的操作数进行处理 
  57   2                              { 
  58   3                              if(ucLcdPosY==16||ucLcdPosY==32)
  59   3      
  60   3                               {
  61   4                                    ucLcdPosX^=1,ucLcdPosY=0;
  62   4              
  63   4                              }
  64   3                                      DispOneChar(ucLcdPosX,ucLcdPosY++,ucKeyState);
  65   3                              
  66   3                                      
  67   3                                      (*p)=(*p)*f1+(ucKeyState-'0')/f2; 
  68   3                                      //'0'的意思是把用户输入的字符转变为对应的数字,如果用户没有输入小数点,那么f1=10,f2=1,否则f1=1,f2的
             -值会每次都改变。 
  69   3                                      f2=((f2-1)<1)?1:(f2*10); 
  70   3      
  71   3                              } 
  72   2                              //用户输入的不是数字,则可能是小数点或者运算符 
  73   2                               
  74   2                                      else if(ucKeyState=='.'&&flag) //是小数点,那么改变状态变量,准备接受操作数的小数部分 
  75   2                                              { 
  76   3                                                      flag=0;
  77   3                                                      f1=1; 
  78   3                                                      f2=10;                                                                                                                                                  
  79   3                                              if(ucLcdPosY==16||ucLcdPosY==32)
  80   3      
  81   3                                    {
  82   4                                      ucLcdPosX^=1,ucLcdPosY=0;
  83   4              
  84   4                                      }
  85   3                                                      DispOneChar(ucLcdPosX,ucLcdPosY++,ucKeyState);          
  86   3                                                                      
  87   3                                                              //      DispOneChar(ucLcdPosX++,ucLcdPosY,'.');
  88   3                                                                      
  89   3      
  90   3                                              } 
  91   2                              else if(ucKeyState=='+'||ucKeyState=='-'||ucKeyState=='*'||ucKeyState=='/') // 是操作符,把操作符保存在
             -变量o里,同时改变指针p指向的变量,准备接受第二个操作数,并把状态变量设为始值 
  92   2                                              
  93   2                                              { 
  94   3                                                      flag=1;
  95   3                                                      op=ucKeyState;
  96   3                                                      
  97   3                                                      p=&p2; 
  98   3                                                      
  99   3                                                      f1=10; 
 100   3                                                      f2=1; 
 101   3                                                      
 102   3                                                      cls();
 103   3                                                      
 104   3                                                      ucLcdPosX=0,ucLcdPosY=0;
 105   3                                                      
 106   3                                              } 
 107   2                                      else if(ucKeyState=='a')
 108   2                                                      {
 109   3                                                              flag=1;
 110   3                                                              
 111   3                                                              cls();
 112   3                                                              p1=0,p2=0,p=&p1;
 113   3                                                              f1=10;f2=1;
 114   3                                                              ucLcdPosY=0;
C51 COMPILER V8.02   KEYBOARD                                                              08/23/2007 14:58:57 PAGE 3   

 115   3                                                      }
 116   2      
 117   2                              
 118   2                    }
 119   1      
 120   1      //NextPos();
 121   1                                        
 122   1      end01:;
 123   1      }
 124          
 125          unsigned char GetKey(void)
 126          {
 127   1         
 128   1      unsigned char kc,ucRetKc;
 129   1      unsigned char m;
 130   1      m=1;
 131   1      ucRetKc=XBYTE[0x8000]& 0x0f;
 132   1      if(ucRetKc!=0x0f)
 133   1      while(m<=0x10){
 134   2      if(m==0x01)ucRetKc=XBYTE[0x80f7]&0x0f;
 135   2      if(m==0x02)ucRetKc=XBYTE[0x80ef]&0x0f;
 136   2      if(m==0x04)ucRetKc=XBYTE[0x80df]&0x0f;
 137   2      if(m==0x08)ucRetKc=XBYTE[0x80bf]&0x0f;
 138   2      if(m==0x10)ucRetKc=XBYTE[0x807f]&0x0f;
 139   2      if(ucRetKc!=0x0f)
 140   2      {ucRetKc=ucRetKc<<4;
 141   3      kc=ucRetKc+m;
 142   3      goto end00;}
 143   2      m*=2;} 
 144   1      end00:
 145   1            
 146   1      switch (kc)                                     //按键所在的具体位置对应于相应的符号
 147   1        {
 148   2         case 0xE1: kc='+' ;
 149   2         break;
 150   2         case 0xD1: kc='9' ;
 151   2         break;
 152   2         case 0xB1: kc='8' ;                           //---   +  9  8  7   ---       
 153   2         break;
 154   2         case 0x71: kc='7';                                    //---   -  6  5  4   ---        
 155   2         break;
 156   2         case 0xE2: kc='-' ;                           //---   *  3  2  1   ---       
 157   2         break;
 158   2         case 0xD2: kc='6' ;                            //---   / =  .  0   ---        
 159   2         break;
 160   2         case 0xB2: kc='5' ;
 161   2         break;                                 
 162   2         case 0x72: kc='4' ;
 163   2         break;
 164   2         case 0xE4: kc= '*';
 165   2         break;
 166   2         case 0xD4: kc= '3';
 167   2         break;
 168   2         case 0xB4: kc='2' ;
 169   2         break;
 170   2         case 0x74: kc='1' ;
 171   2         break;
 172   2         
 173   2         case 0xE8: kc='/' ;
 174   2         break;
 175   2         case 0xD8: kc='=' ;
 176   2         break;
C51 COMPILER V8.02   KEYBOARD                                                              08/23/2007 14:58:57 PAGE 4   

 177   2         case 0xB8: kc= '.';
 178   2         break;
 179   2         case 0x78: kc='0' ;
 180   2         break;
 181   2      case 0xF0: kc='a' ;
 182   2         break;
 183   2      case 0xE0: kc='b' ;
 184   2         break;
 185   2      case 0xC0: kc='c' ;
 186   2         break;
 187   2      case 0x80: kc='d' ;
 188   2         break;
 189   2         default: kc='q';
 190   2        }
 191   1      
 192   1         return kc;
 193   1      
 194   1      }
C51 COMPILER V8.02   KEYBOARD                                                              08/23/2007 14:58:57 PAGE 5   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


P1 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0090H  1
P3 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B0H  1
ucKeyState . . . . . . . . . . . . . .  PUBLIC   IDATA  U_CHAR   0000H  1
IE . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A8H  1
size_t . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_INT    -----  2
f1 . . . . . . . . . . . . . . . . . .  PUBLIC   DATA   FLOAT    0000H  4
_DispOneChar . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
f2 . . . . . . . . . . . . . . . . . .  PUBLIC   DATA   FLOAT    0004H  4
IP . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B8H  1
flag . . . . . . . . . . . . . . . . .  PUBLIC   DATA   INT      0008H  2
INT1 . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      00B3H  1
p1 . . . . . . . . . . . . . . . . . .  PUBLIC   DATA   FLOAT    000AH  4
p2 . . . . . . . . . . . . . . . . . .  PUBLIC   DATA   FLOAT    000EH  4
SCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0098H  1
TCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0088H  1
cls. . . . . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
GetKey . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  kc . . . . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  ucRetKc. . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0006H  1
  m. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  end00. . . . . . . . . . . . . . . .  LABEL    CODE   LABEL    -----  -----
ISR_int1 . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  uiI. . . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0006H  2
  ucLcdPosX. . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0000H  1
  ucLcdPosY. . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0001H  1
  end01. . . . . . . . . . . . . . . .  LABEL    CODE   LABEL    -----  -----
op . . . . . . . . . . . . . . . . . .  PUBLIC   IDATA  U_CHAR   0001H  1
T2CON. . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00C8H  1
p. . . . . . . . . . . . . . . . . . .  PUBLIC   DATA   PTR      0012H  3
PSW. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00D0H  1


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    777    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     21       3
   IDATA SIZE       =      2    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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