key.c

来自「ATMEGA16使用8×8矩阵键盘的源码」· C语言 代码 · 共 43 行

C
43
字号
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <stdint.h>

uint8_t getkey(void);
const uint8_t keyVAL[] PROGMEM={0x1e,0x1d,0x1b,0x17,0x2e,0x2d,0x2b,0x27,
                             0x4e,0x4d,0x4b,0x47,0x8e,0x8d,0x8b,0x87
                            };

uint8_t getkey(void)
   {
   	uint8_t key_tmp,key_tmp1=1,i;
   	key_tmp=PIND;
   	key_tmp&=0x0f;
   	if(key_tmp==0x0f) key_tmp1=0;
   	else
   		  {
   		  	_delay_ms(20);
   		  	key_tmp=PIND;
   	        key_tmp&=0x0f;
   	        if(key_tmp==0x0f) key_tmp1=0;
   	        else
   	      	  {
   	      	  	DDRD=0x00;
   	      	  	key_tmp1=PIND;
   	      	  	key_tmp1=PIND;
				key_tmp1=PIND;
		
   	      	  	key_tmp1&=0xf0;
   	      	  	key_tmp|=key_tmp1;
   	      	  	for(key_tmp1=1;key_tmp1<=16;key_tmp1++)
   	      	  	   {
				    i=pgm_read_byte(keyVAL+key_tmp1-1);
   	      	  	   	if(key_tmp==i) break;
   	      	  	   }
   	      	  	if(key_tmp1==17) key_tmp1=0;
   	      	  }
   	    }
	 DDRD=0xf0;
	 PORTD=0x00;
   	 return key_tmp1;
   }

⌨️ 快捷键说明

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