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

📄 key.c

📁 我自己编写的atmega16的4*4键盘程序
💻 C
字号:
#include <iom16v.h> 
#include <macros.h> 

//键盘接口
#define KEYDDR  DDRB  
#define KEYPORT PORTB 
#define KEYPIN PINB
//键盘接口

unsigned char num[]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70};

/**************INT0处理函数 start*******************/
/**************
         捕捉键盘输入中断进行处理
                                *******************/
#pragma interrupt_handler	INT0_TURNLOW_handler:2
void INT0_TURNLOW_handler(void)
 {  
   unsigned char i,j,ScanCode;
   ScanCode=0x01;
   CLI();
   for(i=0;i<4;i++)
    {
        KEYPORT=ScanCode;for(j=0;j<10;j++);
        if ((KEYPIN&0XF0)!=0x00) USART_Transmit(keycode(ScanCode,KEYPIN&0XF0));//串口发送
	    ScanCode<<=1;
     }
   for(j=0;j<200;j++);//消抖
   SEI();
   KEYPORT=0X0F; 
  }
/**************INT0处理函数 end*******************/
/**************解码函数 start*******************/
unsigned keycode(unsigned char row,unsigned char line)
{
  unsigned char temp;
  switch(row) //行值处理
   {
     case 0x01:temp=0x00;break;
  	 case 0x02:temp=0x04;break;
 	 case 0x04:temp=0x08;break;
     case 0x08:temp=0x0c;break;
   }
   switch(line) //列值处理
   {
     case 0x10:temp+=0x00;break;
  	 case 0x20:temp+=0x01;break;
 	 case 0x40:temp+=0x02;break;
     case 0x80:temp+=0x03;break;
   }
   return num[temp];
}
/**************解码函数 end*******************/
/**************键盘初始化 stat*******************/
void KEY_INI(void)//高四位输出并拉高
{
  KEYDDR = 0x0F;
  KEYPORT = 0x0F;
  
  /*************INT0初始化 start******************/
  PORTD &= 0xFB;
  DDRD  &= 0xFB;
  MCUCR=(1<<ISC01)|(1<<ISC00);//上升沿触发
  GICR=(1<<INT0);
/**************INT0初始化 end*******************/

} 
/**************键盘初始化 end*******************/

⌨️ 快捷键说明

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