keyscan.h
来自「液晶控制器S6B0724的控制。mplab 7.60+pic ccs 4.057」· C头文件 代码 · 共 75 行
H
75 行
#include "cpu.h"
#define SCANTIME 217 //3ms 236 //5ms 217 //10ms 4M
#define P2 (*(0x05))
//#define MATRIX //若定义为MATRIX则为4X4键盘的扫描,否则为单个端口的扫描。
#define KeyScan() P2&0x03 //单个端口扫描语句
#define KEYCOUNT1 1 //按键按下时间计数
#define KEYINIT 0xff //这里是高四位作为按键,可根据具体情况定义。
//KeyDown 按下的键(不会自动清除,若用完后应把相应位清除)
//KeyUp 弹起的键(不会自动清除,若用完后应把相应位清除)
//KeyLast 上次键的状态
//KerPress 反应实时键的情况。
int8 KeyDown,KeyUp,KeyLast,KeyPress;
int8 KeyCount; //按键时间计数
int8 KeyCurrent,KeyOld;
/********************************************************************
函数功能:定时器0初始化,用来做键盘扫描,定时时间大约为10ms。
入口参数:无。
返 回:无。
备 注:无。
********************************************************************/
void InitTimer0(void)
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
clear_interrupt(INT_RTCC);
enable_interrupts(INT_RTCC);
SET_TIMER0(SCANTIME);
}
void Key_Init()
{
KeyOld=KEYINIT;
KeyLast=KEYINIT;
KeyCount=0;
KeyDown=0;
KeyUp=0;
}
void GetKey()
{
KeyCurrent=KeyScan(); //获取当前键值
if(KeyCurrent!=KeyOld) //与上一次键值不等,说明发生了改变。
{
KeyOld=KeyCurrent; //保存新键值。
KeyCount=0;
return;
}
else
{
KeyCount++;
if(KeyCount>=KEYCOUNT1) //确认为有效按键(包括空键).
{
KeyCount=KEYCOUNT1; //停止计数
KeyPress=KeyOld; //保存当前按键
KeyDown|=((~KeyPress)&KeyLast); //按下的键(不会自动清除,若用完后应把相应位清除)
KeyUp|=(KeyPress&(~KeyLast)); //弹起的键(不会自动清除,若用完后应把相应位清除)
KeyLast=KeyPress;
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?