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

📄 kb.c

📁 基于C51的通用人机界面程序
💻 C
字号:
#define _key_ 
#include "general.h"

uchar 	key_bak;
uchar 	key_temp;
uchar 	key_cnt;								//counter
uchar 	key_value;
bit 	key_ok;
static uchar code code_key[16]={0x11,0x12,0x14,0x18,
								0x21,0x22,0x24,0x28,
								0x41,0x42,0x44,0x48,
								0x81,0x82,0x84,0x88};
   
/*	-- 1 -- 2 -- 3 -- enter --
	-- 4 -- 5 -- 6 --
    -- 7 -- 8 -- 9 --
	-- 0 -- 
/******************************************
查键值表,特征键值转为顺序键值
******************************************/
uchar get_key(uchar c)
{
   uchar i=0;
   while(code_key[i]!= c) 
	i++;
   return i;//0x00~0x0f
 }

/**************************************************************
名称:kbscan                                     
描述:键盘扫描
输入:无
输出:键值key
其他:P0.4~7扫描0输出,P0.0~3输入0进来
**************************************************************/
void kbscan(void)
{
	uchar sccode,recode;				//扫描码,接收码
	P0=0x0f;							//扫0000
	if((P0&0x0f)!=0x0f)					//有键按下
	{
			sccode=0xef;				
			while((sccode&0x01)!=0)
			{
				P0=sccode;				//扫1110
				if((P0&0x0f)!=0x0f)		//扫描到
				{
					recode=(P0&0x0f)|0xf0;//输出键值,特征位为0
					//
					key_temp=((~sccode)+(~recode));//扫描+输出  行+列 返回特征字节->顺序键码
					//C1:10-01,02,04,08		11,12,14,18
					//C2:20-01,02,04,08		21,22,24,28
					//C3:40-01,02,04,08		41,42,44,48
					//C4:80-01,02,04,08		81,82,84,88
				}
				else
				sccode=(sccode<<1)|0x10;	//0左移1位,末位补1

			}
			if (key_temp == key_bak){ key_cnt++;}
            else{key_cnt=0;key_bak=key_temp;}
		
	}
	else{
	
        if (key_cnt){
            key_ok=1;
            key_value=get_key(key_temp);    			//键解码
        }
        key_cnt=0;
    }
}

//对外接口函数
unsigned char getkey(void)        //返回按键码
{
    key_ok=0;													//结束
    return(key_value);
}

bit testkey(void)                			//检查有无按键
{
    kbscan();            						//键扫描
    return(key_ok);
}
   

⌨️ 快捷键说明

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