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

📄 key.c

📁 比较经典的自制键盘子程序
💻 C
字号:
// File Name: key.c
// Header: 得到键盘的键码并将键码显示
// Author: Wang Xiaorong
// Date: 20070409

#define GO_OUT 10
unsigned char xdata KEYOUT _at_ 0xdfff;
unsigned char xdata KEYIN  _at_ 0xefff;
unsigned char xdata LEDSEG  _at_ 0x7fff;
unsigned char xdata LEDBIT  _at_ 0xbfff;
unsigned char code KEYMAP[] =
{0X00,0,6,0X00,12,0X00,0X00,0X00,18};	 
unsigned char code LEDMAP[] =
{
	0x3f, 0x06, 0x5b, 0x4f, 0x66, 
	0x6d, 0x7d, 0x07, 0x7f, 0x6f,0x00
};
unsigned char LEDBuf[6];
delay1ms()
{
	unsigned char i;
	for(i = 250; i > 0; i--); 
	for(i = 247; i > 0; i--);
}
display()
{
	unsigned char i;
	unsigned char outbit;
	outbit = 0x01;  // 从右边开始显示
	for (i = 0; i < 6; i++)
	{
		LEDBIT = 0x00;     // 关所有LED
		LEDSEG = LEDMAP[LEDBuf[i]];
		LEDBIT = outbit;
		delay1ms();
		outbit <<= 1;     // 显示下一位
	}
}
unsigned char testKey()
{
	KEYOUT = 0x00;
	return(~KEYIN & 0x0f);		
}
unsigned char getKey()
{
	unsigned char outkey;
	unsigned char inkey;
	unsigned char i;
	unsigned char keyNO;
	while(1)
	{
		if(testKey())
		{
			display();
			display();
			if(testKey())
			{
				outkey = 0x01;
				for(i = 0;i < 6;i++)
				{
					KEYOUT = ~outkey;
					outkey <<=1;
					inkey = ~KEYIN & 0x0f;
					if(inkey)
					{
						keyNO = i + KEYMAP[inkey];
						break;	
					}	
				}
				while(testKey())
				 	display();
				return(keyNO);
			}			
		}
		else
			display();
	}
}
main()
{
	unsigned char k;
	while(1)
	{		
		k = getKey();
		LEDBuf[0] = k%10;
		LEDBuf[1] = k/10;	
		LEDBuf[2] = GO_OUT;
		LEDBuf[3] = GO_OUT;
		LEDBuf[4] = GO_OUT;
		LEDBuf[5] = GO_OUT;
		display();
	}
}

⌨️ 快捷键说明

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