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

📄 测试键盘.c

📁 AVR单片机
💻 C
字号:
 #include<iom16v.h>
 #include<macros.h>
 
 volatile unsigned char flag;
void delay(unsigned int ms)
{  unsigned int i,j;
   for(i=0;i<ms;i++)
   {  for(j=0;j<40;j++);
   }
}
unsigned char key_press()
{
     unsigned char i;
     DDRB=0XFF;
	 PORTB=0XF0;
	 
	 DDRB=0X0F;
	 
	 i=PINB;
	 if(i==0XF0)
	 {
	   DDRB=0XFF;
	   return 0;
	 }
	 else
	 {
	   DDRB=0XFF;
	   return 1;
	 }
}
unsigned char key_scan()
{
     unsigned char key,i=0X7F,j;
     delay(40);
	 if(key_press())
	 {
	    do
		{
		 i=(i<<1|i>>7);
		 PORTB=i;
		 DDRB=0X0F;
		 
		 key=PINB;
		 j=key&0XF0;
		 
	    }while(j==0XF0);
		
		while(key_press());
		switch(key)
		{
       case 0xEE:
	   		key=0x0;
			break;
	   case 0xDE:
	   		key=0x1;
			break; 
	   case 0xBE:
	   		key=0x2;
			break;
	   case 0x7E:
	   		key=0x3;
			break;
	   case 0xED:
	   		key=0x4;
			break;
	   case 0xDD:
	   		key=0x5;
			break;
	   case 0xBD:
	   		key=0x6;
			break;
	   case 0x7D:
	   		key=0x7;
			break;
	   case 0xEB:
	   		key=0x8;
			break;
	   case 0xDB:
	   		key=0x9;
			break;
	   case 0xBB:
	   		key=0xA;
			break;
	   case 0x7B:
	   		key=0xB;
			break;
	   case 0xE7:
	   		key=0xC;
			break;
	   case 0xD7:
	   		key=0xD;
			break;
	   case 0xB7:
	   		key=0xE;
			break;
	   case 0x77:
	   		key=0xF;
			break;
	   default:
	        key=16;		
		}
	 }
	 else
	 {
	    key=16;
	 }
	 return key;
}
void init_devices()
 {  DDRD=0xff;
    PORTD=0X00;
  }
void flag_test(void)  
{   unsigned char temp;
  if(key_press)
    { 
    temp =key_scan();
 switch(temp)
  {
  case  0x0:
                flag=0;
                break;
      case  0x1:
                flag=1;
                break;
      case  0x2:
                flag=2;
                break;
      case  0x3:
                flag=3;
               break;
     case  0x4:
                flag=4;
               break;
     case  0x5:
               flag=5;
               break;
     case  0x6:
               flag=6;
               break;
     case  0x7:
              flag=7;
               break;
	  case 0x8:
	  case 0x9:
	  case 0xA:
	  case 0xB:
	  case 0xC:
	  case 0xD:
	  case 0xE:
	  case 0xF:
	         flag=8;
			  break;
      default:
	         
              break;
   }
   
  } 
} 
void  main()
{  init_devices();
   flag_test(); 
   while(1)
   {
    flag_test(); 
       switch(flag)
    {  case  0:
                PORTD=0XFE;
				delay(1000);
				PORTD=0X00;
				delay(1000);
                break;
      case  1:
                PORTD=0XFD;
				delay(1000);
				PORTD=0X00;
				delay(1000);
                break;
      case  2:
                PORTD=0XFB;
				delay(1000);
				PORTD=0X00;
				delay(1000);
                break;
      case  3:
                PORTD=0XF7;
				delay(1000);
				PORTD=0X00;
				delay(1000);
               break;
     case  4:
                PORTD=0XEF;
				delay(1000);
				PORTD=0X00;
				delay(1000);
               break;
     case  5:
                PORTD=0XBF;
				delay(1000);
				PORTD=0X00;
				delay(1000);
               break;
     case  6:
                PORTD=0XBF;
				delay(1000);
				PORTD=0X00;
				delay(1000);
               break;
     case  7:
                PORTD=0X7F;
				delay(1000);
				PORTD=0X00;
				delay(1000);
               break;
	  case 8:
	          PORTD=0XFF;
			  delay(1000);
				PORTD=0X00;
				delay(1000);
			  break;
      default:
	          //PORTD=0x00;
              break;
			  }
     
	 }
	 
}

⌨️ 快捷键说明

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