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

📄 按键处理 处理一键多能.c

📁 本人收集和自己写的部分51系列例程,供各位参考
💻 C
字号:
/*[原创]按键处理 处理一键多能

受到21IC程序匠人的《多种击键类型的处理流程图》启发,自己重新整理,编写了这几个按键处理程序,经过AT89S51和4*4键盘的配合测试,发现效果良好,达到了较好的实时性。

这里只给出简单单击处理源程序*/

//一般短按键处理程序
//占用定时器0,闪烁时间10ms
//有效仿抖,时时性较高只能处理单击按键,目前和4*4键盘扫描程序一起使用

//------------------------------------
// 单击键盘控制程序
// 作者:张子墨
// 最后更新时间:2006/11/21
// 当前版本:0.90
// 测试MCU:AT89S51
//------------------------------------

#include <at89s53.h>
#include "4_4KeyScan.c"      //配套键盘扫描程序,获得键码
#include "12864_Driver.c"    //临时显示效果使用

#define TIMER0VALUE_H 0xDC    //定时器0高位
#define TIMER0VALUE_L 0x00    //定时器0低位  //11.0592晶振定时10ms

unsigned char Key_Num = 0x00;      //本次键码
unsigned char Key_Backup = 0x00;   //备份键码

bit Key_Dis_F = 0;      //按键禁止响应
bit Key_Scan_F = 0;     //按键检测使能,中断每10MS置有效	

//-----------------------------
//
//测试程序用的全局变量,对于主功能没有影响
//
//-----------------------------
unsigned char i = 0;

//-----------------------------
//
// 定时器0初始化函数
//
//-----------------------------

void Timer0Init (void)
{
 TMOD |= 0x01;      //定时器0工作模式1
 IE |= 0x82;      //EA = 1;ET0 = 1;
 TH0 = TIMER0VALUE_H;
 TL0 = TIMER0VALUE_L;
 TR0 = 1;
}

//-----------------------------
//
// 定时器0中断服务函数
//
//-----------------------------

void Timer0SRV (void) interrupt 1 using 2
{
 TH0 = TIMER0VALUE_H;     //重装初值
 TL0 = TIMER0VALUE_L;
 TR0 = 1;
 Key_Scan_F = 1;      //允许扫描键盘
}

//-----------------------------
//
// 临时测试按键效果函数,实际应用修改为散转函数
//
//-----------------------------

void ShortKeyAction (void)
{
 Font[i++] = Key_Num;
 SentAData(Key_Num);
 if(i>32)
 {
  i = 0;
  SentAIns (0x01);
  SentAIns (0x80);
 }
}

//-----------------------------
//
// 按键扫描控制函数
//
//-----------------------------

void KeyDeal (void)
{
 Key_Scan_F = 0;      //表示10ms周期内扫描完成,等待新的周期
 Key_Num = KeyCodeConvert (GetKeyCode());  //获得最新键盘编码 根据实际情况,使用不同的扫描程序
 if((Key_Num!=0x00)&&(Key_Num == Key_Backup))  //如果有按键并且与上次相同
 {
  if(!Key_Dis_F)     //如果当前按键没有操作
  {
   ShortKeyAction();   //进入处理散转
   Key_Dis_F = 1;    //表示按键处理完成
  }
 }
 else       //否则没有按键或者按键变化
 { 
  Key_Backup = Key_Num;    //重新记录按键码
  Key_Dis_F = 0;     //按键标志没有处理
 }
}

⌨️ 快捷键说明

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