4x4键盘._c

来自「ISD1720芯片实现录音,定点录音,播放,定点播放等.」· _C 代码 · 共 64 行

_C
64
字号
/*********************************************************************
           注意在调用时要初始化DDRA=0xff;
		   这最好是用中断扫描键盘,在中断里先保存以前DDRA的数值;
		   扫描完后再恢复以前的DDRA的值
***********************************************************************/
#include <iom16v.h>
#include <macros.h>
//#include"延时子程序.c"
#define  uchar unsigned char
#define  uint  unsigned int

uchar key_scan()
{ 
  uchar i=0X7F,key,j=0;
  delay_ms(1);
 do
 { 
   i=(i<<1|i>>7);
   PORTD=i;
   DDRD=0x0F;
   key=PIND;
   j=key&0xF0;
   }while(j==0xF0);
   switch(key)
 { case 0x7E:key=0;break;//0
   case 0x7D:key=10;break;//.
   case 0x7B:key=11;break;//*
   case 0x77:key=15;break;//=
   case 0xBE:key=1;break;//1
   case 0xBD:key=2;break;//2
   case 0xBB:key=3;break;//3
   case 0xB7:key=14;break;//-
   case 0xDE:key=4;break;//4
   case 0xDD:key=5;break;//5
   case 0xDB:key=6;break;//6
   case 0xD7:key=13;break;//+
   case 0xEE:key=7;break;//7
   case 0xED:key=8;break;//8
   case 0xEB:key=9;break;//9
   case 0xE7:key=12;break;//C
   default:key=16;
   }
    return key;}

uchar key_press()
{   uchar i,j;
    DDRD=0XFF;
    PORTD=0XF0;
	DDRD=0X0F;
	delay_ms(1);
	i=PIND;
	if(i==0xF0) j = 0;
	else j = 1;
	return j;
}
/*void main()
{ 
  DDRA=0XFF;
  while(1)
  {    
    if(key_press()) l=key_scan();
	xiansi(l);
  }
 }*/

⌨️ 快捷键说明

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