#define KEY_PRESSED     1
#define KEY_UNPRESSED   0
#define KEY_REPTIME    100
struct FIFOb dFIFO, uFIFO;
unsigned char key;
unsigned short itime;
unsigned char APIKeyUp() 
{
	return PopF(&uFIFO);
}

unsigned char APIKeyDown()
{
	return PopF(&dFIFO);
}
unsigned char Scan(unsigned char col_row)
{
	WriteMax(0, 0x01);
	if( ( ReadMax(0) & 0xF0 ) == 0xF0 ){
		switch (col_row){
		case 0xE0:
			return 0x31;
		case 0xD0:
			return 0x34;
		case 0xB0:
			return 0x37;
		case 0x70:
			return 0x2A;
		}
	}
	WriteMax(0, 0x02);
	if( ( ReadMax(0) & 0xF0 ) == 0xF0 ){
		switch (col_row){
		case 0xE0:
			return 0x32;
		case 0xD0:
			return 0x35;
		case 0xB0:
			return 0x38;
		case 0x70:
			return 0x30;
		}
	}
	WriteMax(0, 0x04);
	if( ( ReadMax(0) & 0xF0 ) == 0xF0 ){
		switch (col_row){
		case 0xE0:
			return 0x33;
		case 0xD0:
			return 0x36;
		case 0xB0:
			return 0x39;
		case 0x70:
			return 0x23;
		}
	}
	WriteMax(0, 0x08);
	if( ( ReadMax(0) & 0xF0 ) == 0xF0 ){
		switch (col_row){
		case 0xE0:
			return 0x41;
		case 0xD0:
			return 0x42;
		case 0xB0:
			return 0x43;
		case 0x70:
			return 0x44;
		}
	}
	return 0;
}
void T0_ISR(void) __interrupt ( 1 ) //действия, выполняемы обработчиком прерываний таймера 0
{
	static unsigned char regENA = ReadMax(4);
	static unsigned char key=0, KeyPressed=0;
	static unsigned char ktime=0;
	unsigned char col_row;
    TH0  = 0xDC; //100 per sec
	TL0  = 0x01;
	itime++;
		
	WriteMax(0,0x00);
	col_row = ReadMax(0);//читаем регистр клавы
	ktime++;
	
	if (col_row == 0xF0){
		if(ktime<3) return;
		if (key != 0){
			PushF(&uFIFO, key);
			key=0;
		}
		KeyPressed=0;
		ktime=0;
		return;
	}

	regENA ^= 0x1c;
	WriteMax(4, regENA);

	if( ktime > KEY_REPTIME){
		ktime=0;
		KeyPressed=0;
	}
	
	if (!KeyPressed){
		key = Scan(col_row); //сканируем столбцы соответствующей строки клавы
		PushF(&dFIFO, key); //записываем в буфер введенный символ
		KeyPressed=1;
		return;
	}

}
Соседние файлы в папке SRC
  • #
    09.05.20148.03 Кб35index.c
  • #
    09.05.2014114.94 Кб34index.lst
  • #
    09.05.201422.6 Кб34index.rel
  • #
    09.05.2014114.94 Кб34index.rst
  • #
    09.05.201443.89 Кб34index.sym
  • #
    09.05.20142.02 Кб35kb.c
  • #
    09.05.20148.03 Кб35simple.c