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

📄 key.lst

📁 51edn开发板程序
💻 LST
字号:
C51 COMPILER V7.50   KEY                                                                   06/02/2008 20:59:07 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN Key.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Key.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /******************************************************************
   2             本程序只供学习使用,未经作者许可,不得用于其它任何用途
   3          
   4                  欢迎访问我的USB专区:http://group.ednchina.com/93/
   5                  欢迎访问我的blog:   http://www.ednchina.com/blog/computer00
   6                                       http://computer00.21ic.org
   7          
   8          KEY.C  file
   9          
  10          作者:Computer-lov
  11          建立日期: 2007.03.20
  12          修改日期: 2007.11.18
  13          版本:V1.2
  14          版权所有,盗版必究。
  15          Copyright(C) Computer-lov 2007-2017
  16          All rights reserved
  17          *******************************************************************/
  18          
  19          #include "Key.h"
  20          #include "MyType.h"
  21          #include "config.h"
  22          
  23          volatile uint8 idata KeyCurrent,KeyOld,KeyNoChangedTime;
  24          volatile uint8 idata KeyPress;
  25          volatile uint8 idata KeyDown,KeyUp,KeyLast;
  26          
  27          volatile uint8 KeyCanChange;
  28          
  29          volatile uint16 SystemTick=0;
  30          
  31          /********************************************************************
  32          函数功能:定时器0初始化,用来做键盘扫描,定时时间大约为5ms。
  33          入口参数:无。
  34          返    回:无。
  35          备    注:无。
  36          ********************************************************************/
  37          void InitTimer0(void)
  38          {
  39   1       TMOD&=0xF0;
  40   1       TMOD|=0x01;
  41   1       TH0=0xDC;
  42   1       ET0=1;
  43   1       TR0=1;
  44   1      }
  45          /*******************************************************************/
  46          
  47          
  48          /********************************************************************
  49          函数功能:键盘初始化
  50          入口参数:无。
  51          返    回:无。
  52          备    注:无。
  53          ********************************************************************/
  54          void InitKeyboard(void)
  55          {
C51 COMPILER V7.50   KEY                                                                   06/02/2008 20:59:07 PAGE 2   

  56   1       KeyIO=0xFF;      //键盘对应的口设置为输入状态
  57   1       KeyPress=0;          //无按键按下
  58   1       KeyNoChangedTime=0;
  59   1       KeyOld=0;
  60   1       KeyCurrent=0;
  61   1       KeyLast=0;
  62   1       KeyDown=0;
  63   1       KeyUp=0;
  64   1       InitTimer0();            //初始化定时器
  65   1       KeyCanChange=1;          //允许键值改变
  66   1      }
  67          /*******************************************************************/
  68          
  69          sbit LED_0=P1^0;
  70          sbit LED_1=P1^1;
  71          sbit LED_2=P1^2;
  72          sbit LED_3=P1^3;
  73          
  74          #define LED_SEG P0
  75          
  76          #ifndef LCD
              /*=====0-9=====A-F-OFF=====*/
              code uint8 Table[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
                                   0x80,0x90,0x88,0x83,0xc6,0x86,0x8e,0x82,0xFF};
              
              uint8 LedBuffer[4];
              
              #endif
  84                       
  85          /********************************************************************
  86          函数功能:定时器0中断处理。
  87          入口参数:约5ms中断一次。
  88          返    回:无。
  89          备    注:无。
  90          ********************************************************************/
  91          void Timer0Isr(void) interrupt 1
  92          {
  93   1       uint8 temp;
  94   1       
  95   1      #ifndef LCD
               static uint8 LedDigit=0;
              #endif
  98   1       
  99   1       TH0=(65536-Fclk/1000/12*5+22)/256;      //定时器0重装
 100   1       TL0=(65536-Fclk/1000/12*5+22)%256;
 101   1       
 102   1       SystemTick++;
 103   1       
 104   1      #ifndef LCD  //没有定义LCD,则使用数码管显示
               switch(LedDigit)
               {
                case 0:
                 LED_3=1;
                 LED_SEG=Table[LedBuffer[0]];
                 LED_0=0;
                 LedDigit=1;
                break;
                case 1:
                 LED_0=1;
                 LED_SEG=Table[LedBuffer[1]];
                 LED_1=0;
                 LedDigit=2;
C51 COMPILER V7.50   KEY                                                                   06/02/2008 20:59:07 PAGE 3   

                break;
                case 2:
                 LED_1=1;
                 LED_SEG=Table[LedBuffer[2]];
                 LED_2=0;
                 LedDigit=3;
                break;
                case 3:
                 LED_2=1;
                 LED_SEG=Table[LedBuffer[3]];
                 LED_3=0;
                 LedDigit=0;
                break;
                default:
                 LedDigit=0;
                break;
               }
              #endif
 136   1      
 137   1       if(!KeyCanChange)return;     //如果正在处理按键,则不再扫描键盘 
 138   1      
 139   1       //开始键盘扫描
 140   1       //保存按键状态到当前按键情况
 141   1       //KeyCurrent总共有8个bit
 142   1       //当某个开关按下时,对应的bit为1
 143   1       
 144   1       P2_4=0; //扫描第一列
 145   1       temp=~KeyIO;
 146   1       P2_4=1;
 147   1       temp&=0x0F;
 148   1       P2_5=0; //扫描第二列
 149   1       KeyCurrent=~KeyIO;    
 150   1       P2_5=1;
 151   1       
 152   1       KeyCurrent<<=4;
 153   1       KeyCurrent|=temp;
 154   1       
 155   1       if(KeyCurrent!=KeyOld)  //说明按键情况发生了改变
 156   1        {
 157   2         KeyNoChangedTime=0;       //键盘按下时间为0
 158   2         KeyOld=KeyCurrent;        //保存当前按键情况
 159   2         return;
 160   2        }
 161   1       else
 162   1        {
 163   2         KeyNoChangedTime++;       //按下时间累计
 164   2         if(KeyNoChangedTime>=1)       //如果按下时间足够
 165   2          {
 166   3                  KeyNoChangedTime=1;
 167   3                  KeyPress=KeyOld;      //保存按键
 168   3                  KeyDown|=(~KeyLast)&(KeyPress); //求出新按下的键
 169   3                  KeyUp|=KeyLast&(~KeyPress);     //求出新释放的键
 170   3                  KeyLast=KeyPress;                    //保存当前按键情况
 171   3                                              if(KeyDown)BeepOn(); //按键按下,蜂鸣器响
 172   3                                              else if(KeyUp)BeepOff();
 173   3                 }
 174   2        }
 175   1      }
 176          /*******************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V7.50   KEY                                                                   06/02/2008 20:59:07 PAGE 4   

   CODE SIZE        =    194    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3    ----
   IDATA SIZE       =      7    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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