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

📄 scankey.c

📁 PS/2接口转矩阵键盘,51单片机编程实现
💻 C
字号:
#include "includekey.h"

/*
row val
*/
sbit row0=P0^0;
sbit row1=P0^1;
sbit row2=P0^2;
sbit row3=P0^3;
sbit row4=P0^4;
sbit row5=P0^4;
sbit row6=P0^5;
sbit row7=P0^6;

/*
col val
*/
sbit col0=P2^7;
sbit col1=P2^6;
sbit col2=P2^5;
sbit col3=P2^4;
sbit col4=P2^3;
sbit col5=P2^2;
sbit col6=P2^1;
sbit col7=P2^0;

sbit col9=P1^4;
sbit col10=P1^3;
sbit col11=P1^2;
sbit col12=P1^1;


sfr rowline = 0x80;
sfr port1 = 0x90;
sfr colline = 0xA0;
sfr port3 = 0xB0;

#define BIT0 0x01
#define BIT1 0x02
#define BIT2 0x04
#define BIT3 0x08
#define BIT4 0x10
#define BIT5 0x20
#define BIT6 0x40
#define BIT7 0x80

unsigned char code UnShifted[59][2] = {
	0x1C, 'a',
	0x32, 'b',
	0x21, 'c',
	0x23, 'd',
	0x24, 'e',
	0x2B, 'f',
	0x34, 'g',
	0x33, 'h',
	0x43, 'i',
	0x3B, 'j',
	0x42, 'k',
	0x4B, 'l',
	0x3A, 'm',
	0x31, 'n',
	0x44, 'o',
	0x4D, 'p',
	0x15, 'q',
	0x2D, 'r',
	0x1B, 's',
	0x2C, 't',
	0x3C, 'u',
	0x2A, 'v',
	0x1D, 'w',
	0x22, 'x',
	0x35, 'y',
	0x1A, 'z',
	0x45, '0',
	0x16, '1',
	0x1E, '2',
	0x26, '3',
	0x25, '4',
	0x2E, '5',
	0x36, '6',
	0x3D, '7',
	0x3E, '8',
	0x46, '9',
	0x0E, '`',
	0x4E, '-',
	0x55, '=',
	0x5D, '\\',
	0x29, ' ',
	0x54, '[',
	0x5B, ']',
	0x4C, ';',
	0x52, '\'',
	0x41, ',',
	0x49, '.',
	0x4A, '/',
	0x71, '.',
	0x70, '0',
	0x69, '1',
	0x72, '2',
	0x7A, '3',
	0x6B, '4',
	0x73, '5',
	0x74, '6',
	0x6C, '7',
	0x75, '8',
	0x7D, '9',
};
/*
key vakue
*/
unsigned char code wh_keyvalue[5][8]={0x1c,0x32,0x21,0x23,0x24,0x2b,0x34,0x33,\
0x43,0x3b,0x42,0x4b,0x3a,0x31,0x44,0x4d,\
0x15,0x2d,0x1b,0x2c,0x3c,0x2a,0x1d,0x22,\
0x35,0x1a,0x45,0x16,0x1e,0x26,0x25,0x5a,\
0x2e,0x36,0x3d,0x5a,0x46,0x29,0x66,0x5a};


//////////////////////////////////////////////////////
/*
get key value
row out
col in
*/
unsigned char getkey(void)
{
	unsigned char keyvalue=0,temp=0,row=0,col=0,count=0,i;
	rowline = 0xFF;
	colline = 0x00;
	while(rowline == 0xff)
	{
		//wait for key down;
	}
	dmsec(50);
	if (rowline != 0xff)	// if a key is still down 
	{
		//row check
		rowline = 0xff;
		for(i=0; i < 8; i++)
		{
			temp = rowline & (BIT0 << i);
			if (temp == 0) 
			{
				row = i;
				break;
			}
		}
		//col check
		rowline = 0xff;
		for(i=0; i < 8; i++)
		{
			colline = ~(BIT0 << i);
			if (rowline != 0xff)
			{
				col = 7 - i;
				break;
			}
		}

		keyvalue = wh_keyvalue[row][col];
	}
	else
	{
		keyvalue = NOKEY;
	}
//	while(rowline != 0xff)
//	{
//		//wait for key up;
//	}
	return keyvalue;
}

⌨️ 快捷键说明

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