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

📄 shumaguan.lst

📁 通过对键盘的编程
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   SHUMAGUAN                                                             10/17/2006 16:37:26 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE SHUMAGUAN
OBJECT MODULE PLACED IN shumaguan.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE shumaguan.c BROWSE DEBUG OBJECTEXTEND

line level    source

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

  56   2                                      {
  57   3                                              currentvalue=transition(kvalue)+currentvalue*10;
  58   3                                              result=currentvalue;
  59   3                                              
  60   3      
  61   3                                       }
  62   2                              else                                               //如果是功能键
  63   2                                      if(kvalue=='o')                    //如果是ON/C,清0
  64   2                                               {
  65   3                                                      result=0;
  66   3                                                      currentvalue=0;
  67   3                                                      lastvalue=0;
  68   3                                              }
  69   2                                              else if(kvalue=='+')      //如果是“+”
  70   2                                                {
  71   3                                                              lastop=kvalue;     //lastop保存操作码
  72   3                                                              lastvalue=currentvalue;//当前值成为上次值
  73   3                                                              currentvalue=0;            //当前值清0
  74   3                                                      }
  75   2                                                              else if(kvalue=='-')
  76   2                                                                      {
  77   3                                                                              lastop=kvalue;
  78   3                                                                              lastvalue=currentvalue;
  79   3                                                                              currentvalue=0;
  80   3                                                                      }
  81   2                                                                              else if(kvalue=='*')
  82   2                                                                              {
  83   3                                                                                      lastop=kvalue;
  84   3                                                                                      lastvalue=currentvalue;
  85   3                                                                                      currentvalue=0;
  86   3                                                                              }
  87   2                                                                                      else if(kvalue=='/')
  88   2                                                                                      {
  89   3                                                                                              lastop=kvalue;
  90   3                                                                                              lastvalue=currentvalue;
  91   3                                                                                              currentvalue=0;
  92   3                                                                                      }                                                                               
  93   2      
  94   2                                                                                              else if(kvalue=='=')     //如果是“=”
  95   2                                                                                                      {       
  96   3                                                                                                              switch(lastop)    //判断操作码是什么
  97   3                                                                                                              {
  98   4                                                                                                                      case '+':
  99   4                                                                                                                      {
 100   5                                                                                                                              result=result+lastvalue;
 101   5                                                                                                                              currentvalue=result;
 102   5                                                                                                                              break;
 103   5                                                                                                                      }
 104   4                                                                                                                      case '-':
 105   4                                                                                                                      {
 106   5                                                                                                                              result=lastvalue-currentvalue;
 107   5                                                                                                                              currentvalue=result;
 108   5                                                                                                                              break;
 109   5                                                                                                                      }
 110   4                                                                                                                      case '*':
 111   4                                                                                                                      {
 112   5                                                                                                                              result=currentvalue*lastvalue;
 113   5                                                                                                                              currentvalue=result;
 114   5                                                                                                                              break;
 115   5                                                                                                                      }
 116   4                                                                                                                      case '/':
 117   4                                                                                                                      {
C51 COMPILER V8.02   SHUMAGUAN                                                             10/17/2006 16:37:26 PAGE 3   

 118   5                                                                                                                              result=lastvalue/currentvalue;
 119   5                                                                                                                              currentvalue=result;
 120   5                                                                                                                              break;
 121   5                                                                                                                      }
 122   4                                                                                                              }
 123   3                                                                                                      }
 124   2                                                              
 125   2                                      if(result<=9999)
 126   2                                      {
 127   3                                              display(result);
 128   3                                              
 129   3                                      }
 130   2                                      else
 131   2                                      {
 132   3                                              display(0);
 133   3                                              result=0;
 134   3                                                      currentvalue=0;
 135   3                                      }
 136   2                              
 137   2                      }
 138   1      
 139   1       
 140   1       
 141   1      }
 142          /*void time0_int() interrupt 1 using 2
 143          {
 144                  
 145                  unsigned char i=0;
 146                  TR0=0;
 147                  
 148                          keyreturnvalue=key_scan();
 149                  
 150                  time_set();
 151          }
 152          
 153          void time_set(void)
 154          {
 155                  TMOD=TMOD&0xf0;
 156                  TMOD=TMOD|0X01;;
 157                  TH0=15535/255;
 158                  TL0=15535%255;
 159                  EA=1;
 160                  ET0=1;
 161                  TR0=1;
 162          } */
 163          /**********************************************************************
 164          **函数功能:判断按键的键值是功能键还是数字键                                             **
 165          **参数:整型数                                                                                                           **
 166          **返回:BOOL型                                                                                                           **
 167          **********************************************************************/

⌨️ 快捷键说明

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