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

📄 key_scan.h

📁 c8051f020 +wg12864+44key .rar
💻 H
字号:

static const char tab[16]={0x01,0x02,0x03,0x0c,	/*键盘码00,01,02,03,*/
                     0x04,0x05,0x06,0x0d,	/*键盘码04,05,06,07,*/
                     0x07,0x08,0x09,0x0e,	/*键盘码08,09,0a,0b,*/
                     0x0a,0x00,0x0b,0x0f};/*键盘码0c,0d,0e,0f*/

 


 unsigned char scan(void)				/*扫描键盘副程式*/
 {
      unsigned	char data a1,i;			/*A1=0XF7列扫描初值,I行*/
      unsigned	char data m;
      unsigned	char  FLAG0;			/*设按键回应旗号为0,键盘扫描计数指标为0*/
      unsigned    char data ptr;
       a1=0x0f ;
       FLAG0=0;
       ptr=0;
        m=0x0f ;
       while(m==0x0f)
       {
          P5=0xff;
          a1=0x0f;
          P5=a1;			/*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
          m=P1;
       }
       for(i=0;i<4;i++)
          delay1ms();
          a1=0x0f;
          m=0x0f ;
       while(m==0x0f)
       {
           P5=0xff;
          a1=0x0f;
          P5=a1;			/*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
           m=P5;
       }
          a1=0xef;
        for(i=0;i<4;i++)		/*键盘4个扫描列*/
      {
              P5=a1;			/*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
               m=P5;
                switch(m&0x0f)		/*取行的高4位元,侦测那一行被按*/
            {
            	case 0x0e: ptr=i;	/*第一行被按否?是则扫描指标=列X4*/
                          FLAG0=1;	/*是则设FLAG0=1表有按键输入*/
                           break;	/*跳出此循环*/
                case 0x0d: ptr=i+4;	/*第二行被按否?是则扫描指标=列X4+1*/
                           FLAG0=1;	/*是则设FLAG0=1表有按键输入*/
                           break;	/*跳出此循环*/
                case 0x0b: ptr=i+8;	/*第三行被按否?是则扫描指标=列X4+2*/
                           FLAG0=1;	/*是则设FLAG0=1表有按键输入*/
                           break;	/*跳出此循环*/
                case 0x07: ptr=i+12;	/*第四行被按否?是则扫描指标=列X4+3*/
                           FLAG0=1;	/*是则设FLAG0=1表有按键输入*/
                 default:  break;	/*跳出此循环*/
            }
         if(FLAG0==1)break;		/*不为1,则扫描列右移,扫描下一列*/
         a1=a1<<1|0x01;
         		/*高位补1,由于P1.7~P1.4未接+5V,而是由指令加载高电平*/
       }
       a1=0x0f;
    while(m!=0x0f)
       {
         P5 =0xff;
         a1=0x0f;
         P5=a1;			/*列扫描输出,读入P1存入M,以便侦测行与侦测按键是否放开*/
          m=P5;
       }

       if(FLAG0==1)
         return tab[ptr];
       else return 0x40;
 }					/*返回主程式*/

⌨️ 快捷键说明

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