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

📄 keypad.c

📁 单片机的多级通讯程序 包含有keil源程序 和proteus的仿真程序
💻 C
字号:

/*
****************************************************

		键盘

****************************************************
*/


#include <reg52.H>
#include "Typedef.H"
#include "UserDef.H"
#include "Keypad.h"


/* 按键对照表 */
static INT32U code KeyMap[][2] = {
//	扫描码	虚键码
	0xFFFF,	VK_NULL,
	0xFFEF,	VK_0,
	0xFFFD,	VK_1,
	0xFFDF,	VK_2,
	0xFDFF,	VK_3,
	0xFFFB,	VK_4,
	0xFFBF,	VK_5,
	0xFBFF,	VK_6,
	0xFFF7,	VK_7,
	0xFF7F,	VK_8,
	0xF7FF,	VK_9,
	0xEFFF,	VK_ADD,
	0xDFFF,	VK_SUB,
	0xBFFF, VK_MUL,
	0x7FFF, VK_DIV,
	0xFEFF,	VK_EQU,
	0xFFFE, VK_CLR,
	};


/* 端口定义 */
sbit KP_Col0 = P1^0;
sbit KP_Col1 = P1^1;
sbit KP_Col2 = P1^2;
sbit KP_Col3 = P1^3;
sbit KP_Row0 = P1^4;
sbit KP_Row1 = P1^5;
sbit KP_Row2 = P1^6;
sbit KP_Row3 = P1^7;


/*  全局变量 */


/***************************************************

		按键扫描程序  

****************************************************/
INT8U Keypad_GetKey(void)
	{
	static INT8U cnt = 0;	//按键消抖计数器
	static INT16U PrevImg = 0x0FFF;	//上次的扫描码
	static INT8U PrevKey = VK_NULL;	//上次有效按键的虚键码
	INT16U img;
	INT8U n;
	BOOLEAN find;

	img = 0;
	find = FALSE;

	//获取扫描码
	P1 = 0xFF;
	KP_Col0 = 0;KP_Col1 = 1;KP_Col2 = 1;KP_Col3 = 1;
	img |= (P1>>4); img <<= 4;
	KP_Col0 = 1;KP_Col1 = 0;KP_Col2 = 1;KP_Col3 = 1;
	img |= (P1>>4); img <<= 4;
	KP_Col0 = 1;KP_Col1 = 1;KP_Col2 = 0;KP_Col3 = 1;
	img |= (P1>>4);	img <<= 4;
	KP_Col0 = 1;KP_Col1 = 1;KP_Col2 = 1;KP_Col3 = 0;
	img |= (P1>>4);

	//消抖
	if (PrevImg != img)
		{
		cnt = 0;
		PrevImg = img;
		return VK_NULL;
		}

	PrevImg = img;
	cnt ++;
	if (cnt < 5)
		{
		return VK_NULL;
		}

	//本次消抖完毕,计数器清零,为下次消抖做准备
	cnt = 0;

	//获取按键的虚键码
	for (n=0;n<(sizeof(KeyMap)/8);n++)
		{
		if (KeyMap[n][0] == img)
			{
			find = TRUE;
			break;
			}
		}

	if (find == TRUE)
		{
		if (KeyMap[n][1] != PrevKey)	//只识别改变的按键动作
			{
			PrevKey = KeyMap[n][1];
			return KeyMap[n][1];
			}
		else
			return VK_NULL;
		}
	else 
		return VK_INVALID;
	}


⌨️ 快捷键说明

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