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

📄 keyb.c

📁 共享几个AVR单片机的常用代码
💻 C
字号:
#include "KEYB.h"

uint8_t KB_GetChar(uint8_t Sync,uint8_t WaitRelease)
{
	uint8_t kbin,i;

START:
	kbin = 0;
	i = 0;

	KEYB_ROW_DDR	|= (0x0f << KEYB_ROW_SHIFT);		//Row Output Low
	KEYB_ROW_PORT	&= ~(0x0f << KEYB_ROW_SHIFT);

	KEYB_COL_DDR	&= ~(0x0f << KEYB_COL_SHIFT);		//Col Input Pull-Up
	KEYB_COL_PORT	|= (0x0f << KEYB_COL_SHIFT);
	
	DELAY_8M_us;
	DELAY_8M_us;
	DELAY_8M_us;
	DELAY_8M_us;

	do
	{
		kbin = ~((KEYB_COL_PIN>>KEYB_COL_SHIFT)|0xf0);
	}while(Sync && (!kbin));
	
	if(!kbin)
		return 0;
	Timer_Wait_ms(20);
	i =	~((KEYB_COL_PIN>>KEYB_COL_SHIFT)|0xf0);
	if(kbin != i)
		goto START;


	KEYB_ROW_DDR	&= ~(0x0f << KEYB_ROW_SHIFT);		//Row Input Pull-Up
	KEYB_ROW_PORT	|= (0x0f << KEYB_ROW_SHIFT);

	KEYB_COL_DDR	|= (0x0f << KEYB_COL_SHIFT);		//Col Output Low
	KEYB_COL_PORT	&= ~(0x0f << KEYB_COL_SHIFT);
	
	DELAY_8M_us;
	
	kbin |= ~(((KEYB_ROW_PIN<<(4-KEYB_ROW_SHIFT))|0x0f));

WAITRELEASE:
	if(WaitRelease)
	{
		while((~((KEYB_ROW_PIN>>KEYB_ROW_SHIFT)&0x0f))&0x0f);
	}
	Timer_Wait_ms(20);
	if((~((KEYB_ROW_PIN>>KEYB_ROW_SHIFT)&0x0f))&0x0f)
		goto WAITRELEASE;
	
	switch(kbin)
		{
			case 0x11:i = 'F';break;
			case 0x12:i = 'E';break;
			case 0x14:i	= 'D';break;
			case 0x18:i = 'C';break;
			case 0x21:i = 'B';break;
			case 0x22:i = 'A';break;
			case 0x24:i	= '0';break;
			case 0x28:i = '9';break;	
			case 0x41:i = '8';break;
			case 0x42:i = '7';break;
			case 0x44:i	= '6';break;
			case 0x48:i = '5';break;		
			case 0x81:i = '4';break;
			case 0x82:i = '3';break;
			case 0x84:i	= '2';break;
			case 0x88:i = '1';break;
			default:
				goto START;
		}

	

	return i;

}




⌨️ 快捷键说明

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