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

📄 shumaguan2.lst

📁 通过对键盘的编程
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   SHUMAGUAN2                                                            10/26/2006 22:08:52 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE SHUMAGUAN2
OBJECT MODULE PLACED IN shumaguan2.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE shumaguan2.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          
  26          /**********************************************************************
  27          **                                                              变量定义                                                         **
  28          **********************************************************************/
  29          unsigned int result=0;
  30          unsigned int currentvalue=0,lastvalue;
  31          unsigned char lastop,op1;
  32          bit flag=0;
  33          int code num_tab1[4]=
  34          {0x88,0x84,0x82,0x81}
  35          ;
  36          int code num_tab2[11]=
  37          {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}
  38          ;
  39          unsigned  char code keyvalue[][4]={
  40          {'7','8','9','/'},
  41          {'4','5','6','*'},
  42          {'1','2','3','-'},
  43          {'o','0','=','+'}
  44          };
  45          /**********************************************************************
  46          **函数功能:主函数                                                                                                       **
  47          **参数:无                                                                                                                       **
  48          **返回:无                                                                                                                       **
  49          **********************************************************************/
  50          void main()
  51          {
  52   1        unsigned char kvalue,flag=0;
  53   1                       while(1)
  54   1                      {
  55   2                      
C51 COMPILER V8.02   SHUMAGUAN2                                                            10/26/2006 22:08:52 PAGE 2   

  56   2                              kvalue=key_scan();
  57   2                              if(kvalue!=0)
  58   2                              result=process(kvalue);
  59   2                              kvalue=0;
  60   2                                      if(result<=9999)
  61   2                                      {
  62   3                                              display(result);
  63   3                                              
  64   3                                      }
  65   2                                      else
  66   2                                      {
  67   3                                              display(0);
  68   3                                      
  69   3                                      }
  70   2                              
  71   2                      }
  72   1      
  73   1      }
  74          /**********************************************************************
  75          **函数功能:键值处理函数(处理+.-.*./.=)                                                          **
  76          **参数:字符型                                                                                                           **
  77          **返回:整型                                                                                                             **
  78          **********************************************************************/
  79          unsigned int process(unsigned char kvalue)
  80          {
  81   1      
  82   1                              if(isdigit(kvalue)&&!flag)        //如果是数字,求值
  83   1                                      {
  84   2                                              currentvalue=transition(kvalue)+currentvalue*10;
  85   2                                              result=currentvalue;
  86   2                                              
  87   2      
  88   2                                       }
  89   1                              else                                               //如果是功能键
  90   1                                      if(kvalue=='o')                    //如果是ON/C,清0
  91   1                                      {
  92   2                                               result=0;
  93   2                                              currentvalue=0;
  94   2                                              lastvalue=0;
  95   2                                      }
  96   1                                      else if(kvalue=='+')      //如果是“+”
  97   1                                      {
  98   2                                                lastop=kvalue;           //lastop保存操作码
  99   2                                                lastvalue=result;//当前值成为上次值
 100   2                                                currentvalue=0;                  //当前值清0
 101   2                                      }
 102   1                                              else if(kvalue=='-')
 103   1                                              {
 104   2                                                      lastop=kvalue;
 105   2                                                      lastvalue=result;
 106   2                                                      currentvalue=0;
 107   2                                              }
 108   1                                                      else if(kvalue=='*')
 109   1                                                      {
 110   2                                                              lastop=kvalue;
 111   2                                                              lastvalue=result;
 112   2                                                              currentvalue=0;
 113   2                                                      }
 114   1                                                              else if(kvalue=='/')
 115   1                                                              {
 116   2                                                                      lastop=kvalue;
 117   2                                                                      lastvalue=result;
C51 COMPILER V8.02   SHUMAGUAN2                                                            10/26/2006 22:08:52 PAGE 3   

 118   2                                                                      currentvalue=0;
 119   2                                                              }                                                                               
 120   1      
 121   1                                                                      else if(kvalue=='=')     //如果是“=”
 122   1                                                                      {       
 123   2                                                                              switch(lastop)    //判断操作码是什么
 124   2                                                                              {
 125   3                                                                                      case '+':
 126   3                                                                                      {
 127   4                                                                                      //      result=result+lastvalue;
 128   4                                                                                              result=currentvalue+lastvalue;
 129   4                                                                                              lastvalue=result;
 130   4                                                                                              break;
 131   4                                                                                      }
 132   3                                                                                      case '-':
 133   3                                                                                      {
 134   4                                                                                              result=lastvalue-currentvalue;
 135   4                                                                                              lastvalue=result;
 136   4                                                                                              break;
 137   4                                                                                      }
 138   3                                                                                      case '*':
 139   3                                                                                      {
 140   4                                                                                              result=currentvalue*lastvalue;
 141   4                                                                                              lastvalue=result;
 142   4                                                                                              break;
 143   4                                                                                      }
 144   3                                                                                      case '/':
 145   3                                                                                      {
 146   4                                                                                              result=lastvalue/currentvalue;
 147   4                                                                                              lastvalue=result;
 148   4                                                                                              break;
 149   4                                                                                      }
 150   3      
 151   3                                                                              }
 152   2                                                              }
 153   1              if(result>9999)
 154   1              {
 155   2                      result=0;
 156   2                      currentvalue=0;
 157   2              }
 158   1              return result;
 159   1      }
 160                                                                          
 161          
 162          /**********************************************************************
 163          **函数功能:判断按键的键值是功能键还是数字键                                             **
 164          **参数:整型数                                                                                                           **
 165          **返回:BOOL型                                                                                                           **
 166          **********************************************************************/
 167          bit isdigit(unsigned char kvalue)
 168          {
 169   1              if(kvalue>='0'&&kvalue<='9')
 170   1              return 1;
 171   1              else 

⌨️ 快捷键说明

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