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

📄 shumaguan3.lst

📁 通过对键盘的编程
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   SHUMAGUAN3                                                            10/22/2006 19:31:20 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE SHUMAGUAN3
OBJECT MODULE PLACED IN shumaguan3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE shumaguan3.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /**********************************************************************
   2          **文件名:shumaguan.c                                                                                            **
   3          **功能:实现键盘、数码管显示,实现计算器功能                                             **
   4          **创建人:xingyuegu                                                                                                      **
   5          **日期:2006-9-10                                                                                                        **
   6          **版本:1.0                                                                                                                      **
   7          **修改日期:2006-10-17                                                                                           **
   8          **版本:2.0                                                                                                                      **
   9          **********************************************************************/
  10          
  11          #include <reg51.h>
  12          
  13          /**********************************************************************
  14          **                                                              函数申明                                                         **
  15          **********************************************************************/
  16          
  17          void delay(unsigned int);
  18          void display(int );
  19          unsigned char key_scan(void);
  20          unsigned char transition(unsigned char);
  21          void time_set();
  22          void time0_int();
  23          bit isdigit(unsigned char );
  24          unsigned int process(unsigned char );
  25          void init(void);
  26          
  27          /**********************************************************************
  28          **                                                              变量定义                                                         **
  29          **********************************************************************/
  30          unsigned int result=0;
  31          unsigned int currentvalue=0,lastvalue;
  32          unsigned char lastop;
  33          volatile bit flag=0;
  34          int code num_tab1[4]=
  35          {0x88,0x84,0x82,0x81}
  36          ;
  37          int code num_tab2[11]=
  38          {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}
  39          ;
  40          unsigned  char code keyvalue[][4]={
  41          {'7','8','9','/'},
  42          {'4','5','6','*'},
  43          {'1','2','3','-'},
  44          {'o','0','=','+'}
  45          };
  46          /**********************************************************************
  47          **函数功能:主函数                                                                                                       **
  48          **参数:无                                                                                                                       **
  49          **返回:无                                                                                                                       **
  50          **********************************************************************/
  51          void main()
  52          {
  53   1              unsigned char kvalue;
  54   1              init();
  55   1                       while(1)
C51 COMPILER V8.02   SHUMAGUAN3                                                            10/22/2006 19:31:20 PAGE 2   

  56   1                      {
  57   2                               if(flag)
  58   2                              {
  59   3                                      kvalue=key_scan();
  60   3                                      init();
  61   3                                      flag=0;
  62   3                                      if(kvalue!=0)
  63   3                                      result=process(kvalue);
  64   3                              } 
  65   2                                      if(result<=9999)
  66   2                                      {
  67   3                                              display(result);
  68   3                                              
  69   3                                      }
  70   2                                      else
  71   2                                      {
  72   3                                              display(0);
  73   3                                      
  74   3                                      }
  75   2                              
  76   2                      }
  77   1      
  78   1      }
  79          /**********************************************************************
  80          **函数功能:初始化函数(包括中断初始化)                                                         **
  81          **参数:无                                                                                                                       **
  82          **返回:无                                                                                                                       **
  83          **********************************************************************/
  84          void init(void)
  85          {
  86   1              //SP=0x50;
  87   1              EA=1;
  88   1              EX0=1;
  89   1              IT0=1;
  90   1              P1=0xf0;
  91   1      }
  92          /**********************************************************************
  93          **函数功能:中断服务子程序                                                                                       **
  94          **参数:无                                                                                                                       **
  95          **返回:无                                                                                                                       **
  96          **********************************************************************/
  97          
  98          void int0_isr(void) interrupt 0 using 1
  99          {
 100   1      
 101   1              if(!flag)
 102   1              {
 103   2                      EX0=0;
 104   2                      flag=1;
 105   2              }
 106   1      
 107   1              
 108   1      }
 109          /**********************************************************************
 110          **函数功能:键值处理函数(处理+.-.*./.=)                                                          **
 111          **参数:字符型                                                                                                           **
 112          **返回:整型                                                                                                             **
 113          **********************************************************************/
 114          unsigned int process(unsigned char kvalue)
 115          {
 116   1      
 117   1                              if(isdigit(kvalue))//&&!flag)     //如果是数字,求值
C51 COMPILER V8.02   SHUMAGUAN3                                                            10/22/2006 19:31:20 PAGE 3   

 118   1                                      {
 119   2                                              currentvalue=transition(kvalue)+currentvalue*10;
 120   2                                              result=currentvalue;
 121   2                                              
 122   2      
 123   2                                       }
 124   1                              else                                               //如果是功能键
 125   1                                      if(kvalue=='o')                    //如果是ON/C,清0
 126   1                                      {
 127   2                                               result=0;
 128   2                                              currentvalue=0;
 129   2                                              lastvalue=0;
 130   2                                      }
 131   1                                      else if(kvalue=='+')      //如果是“+”
 132   1                                      {
 133   2                                                lastop=kvalue;           //lastop保存操作码
 134   2                                                lastvalue=currentvalue;//当前值成为上次值
 135   2                                                currentvalue=0;                  //当前值清0
 136   2                                      }
 137   1                                              else if(kvalue=='-')
 138   1                                              {
 139   2                                                      lastop=kvalue;
 140   2                                                      lastvalue=currentvalue;
 141   2                                                      currentvalue=0;
 142   2                                              }
 143   1                                                      else if(kvalue=='*')
 144   1                                                      {
 145   2                                                              lastop=kvalue;
 146   2                                                              lastvalue=currentvalue;
 147   2                                                              currentvalue=0;
 148   2                                                      }
 149   1                                                              else if(kvalue=='/')
 150   1                                                              {
 151   2                                                                      lastop=kvalue;
 152   2                                                                      lastvalue=currentvalue;
 153   2                                                                      currentvalue=0;
 154   2                                                              }                                                                               
 155   1      
 156   1                                                                      else if(kvalue=='=')     //如果是“=”
 157   1                                                                      {       
 158   2                                                                              switch(lastop)    //判断操作码是什么
 159   2                                                                              {
 160   3                                                                                      case '+':
 161   3                                                                                      {
 162   4                                                                                              result=result+lastvalue;
 163   4                                                                                              currentvalue=result;
 164   4                                                                                              break;
 165   4                                                                                      }
 166   3                                                                                      case '-':
 167   3                                                                                      {
 168   4                                                                                              result=lastvalue-currentvalue;
 169   4                                                                                              currentvalue=result;
 170   4                                                                                              break;
 171   4                                                                                      }
 172   3                                                                                      case '*':
 173   3                                                                                      {
 174   4                                                                                              result=currentvalue*lastvalue;
 175   4                                                                                              currentvalue=result;
 176   4                                                                                              break;
 177   4                                                                                      }
 178   3                                                                                      case '/':
 179   3                                                                                      {
C51 COMPILER V8.02   SHUMAGUAN3                                                            10/22/2006 19:31:20 PAGE 4   

 180   4                                                                                              result=lastvalue/currentvalue;
 181   4                                                                                              currentvalue=result;
 182   4                                                                                              break;
 183   4                                                                                      }
 184   3                                                                              }
 185   2                                                              }
 186   1              if(result>9999)
 187   1              {
 188   2                      result=0;
 189   2                      currentvalue=0;

⌨️ 快捷键说明

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