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

📄 keyscan.h

📁 液晶控制器S6B0724的控制。mplab 7.60+pic ccs 4.057
💻 H
字号:

#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -