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

📄 key.txt

📁 凌阳 61 4*4键盘扫描程序 可以消除重键
💻 TXT
字号:
#include "SPCE061A.H"

unsigned int led[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned int key;
unsigned int mm[2];//for display
void disp(void);

////////////////////////////////////////////////////////////////////////
void delay(unsigned int del)
{
	for(;del>0;del--)*P_Watchdog_Clear=0x0001; 
}
///////////////////////////************************/////////////havekey!
unsigned int havekey(void)
{ 
unsigned int xtemp,x_temp,y_temp,readkey;
  *P_IOB_Data=*P_IOB_Buffer&0xf0ff;              //
  x_temp=*P_IOB_Data;
  x_temp=x_temp&0xf000;
  xtemp=x_temp;
    if(x_temp==0xf000) return(0x00ff);              //没有按键
  else{  delay(20);
         disp();    	  
         *P_IOB_Data=(*P_IOB_Buffer&0xf0ff)|0x0700;  //得到列值
          x_temp=*P_IOB_Data;
          x_temp=x_temp&0xf000; 
         if(!(x_temp==0xf000)) y_temp=0x0700;
          *P_IOB_Data=(*P_IOB_Buffer&0xf0ff)|0x0b00;
          x_temp=*P_IOB_Data;
          x_temp=x_temp&0xf000; 
         if(!(x_temp==0xf000)) y_temp=0x0b00;
          *P_IOB_Data=(*P_IOB_Buffer&0xf0ff)|0x0d00;
          x_temp=*P_IOB_Data;
          x_temp=x_temp&0xf000; 
         if(!(x_temp==0xf000)) y_temp=0x0d00;
          *P_IOB_Data=(*P_IOB_Buffer&0xf0ff)|0x0e00;
          x_temp=*P_IOB_Data;
          x_temp=x_temp&0xf000; 
         if(!(x_temp==0xf000)) y_temp=0x0e00;
 /////////////////////////////////////////////////////////////得到列值
            *P_IOB_Data=*P_IOB_Buffer&0xf0ff;        //判断重键
            x_temp=*P_IOB_Data;
            x_temp=x_temp&0xf000;
           	for(;!(x_temp==0xf000);)         
    	    {*P_IOB_Data=*P_IOB_Buffer&0xf0ff;
            x_temp=*P_IOB_Data;
            x_temp=x_temp&0xf000;
            disp();
    	    }                 
      }
      readkey=xtemp|y_temp;                           //得到键值
    	switch(readkey)
        {case 0x7700:key=0;break;
         case 0x7b00:key=1;break;
         case 0x7d00:key=2;break; 
         case 0x7e00:key=3;break;
         case 0xb700:key=4;break;
         case 0xbb00:key=5;break;
         case 0xbd00:key=6;break; 
         case 0xbe00:key=7;break; 
         case 0xd700:key=8;break;
         case 0xdb00:key=9;break;
         case 0xdd00:key=10;break; 
         case 0xde00:key=11;break; 
         case 0xe700:key=12;break;
         case 0xeb00:key=13;break;
         case 0xed00:key=14;break; 
         case 0xee00:key=15;break;   
         default :key=15;break; 
         }
           return(key);   
}
/////////////////////*********************////////////////显示程序/////
void disp(void)
{
  *P_IOA_Buffer=0x0000;
  *P_IOB_Buffer=0x0008;
  *P_IOA_Buffer=led[mm[0]];
  delay(100);
  *P_IOA_Buffer=0x0000;
  *P_IOB_Buffer=0x0004;
   *P_IOA_Buffer=led[mm[1]];
   delay(100);
}
/////////////////////////////////******//////////////////////main
void main(void)
{//unsigned int i;
	*P_IOB_Dir=0x0fff;           //for key and control;
    *P_IOB_Attrib=0x0fff;    
	*P_IOA_Dir=0x00ff;          //out for display
    *P_IOA_Attrib=0x00ff; 

	
 while(1)	
	{*P_Watchdog_Clear=0x0001;
      key=havekey();
      disp();
	  if(!(key==0x00ff))
       {mm[1]=mm[0];
        mm[0]=key;
       }
       else disp();     
	}
}

⌨️ 快捷键说明

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