zoukankan      html  css  js  c++  java
  • 蓝桥杯完美按键(无延时)

    通过改变KEY的值改变模式
    .h
    #ifndef _key_h
    #define _key_h
    #include<STC15F2K60S2.h>
    #define u8 unsigned char
    #define u16 unsigned int
    #define KEY 1
    sbit key1=P4^4;
    sbit key2=P4^2;
    sbit key3=P3^5;
    sbit key4=P3^4;
    sbit key_row1=P3^0;
    sbit key_row2=P3^1;
    sbit key_row3=P3^2;
    sbit key_row4=P3^3;
    extern u8 key_value;
    extern bit key_flag;
    void Key_Scan();
    void Key_Judge();
    #endif

    .c

    #include<key.h>
    u8 key_value=0;
    bit key_flag=0;
    #if KEY
    u8 pdata key_catch[4]={0xff,0xff,0xff,0xff};
    u8 pdata key_backup[4]={1,1,1,1};
    u8 pdata key_state[4]={1,1,1,1};
    u8 code key_button[4]={1,2,3,4};
    void Key_Scan()
    {
     u8 i=0;
     key_catch[0]=key_catch[0]<<1|keyrow1;
     key_catch[1]=key_catch[1]<<1|keyrow2;
     key_catch[2]=key_catch[2]<<1|keyrow3;
     key_catch[3]=key_catch[3]<<1|keyrow4;
     for(;i<4;i++)
     {
      if((key_catch[i]&0xff)==0xff)
      {
       key_state[i]=1;
      }
      else if((key_catch[i]&0xff)==0x00)
      {
       key_state[i]=0;
      }
     }
    }
    void Key_Judge()
    {
     u8 i=0;
     for(;i<4;i++)
     {
      if(key_state[i]!=key_backup[i])
      {
       if(key_backup[i]==0)
       {
        key_value=key_button[i];
        key_flag=1;
       }
       key_backup[i]=key_state[i];
      }
     }
    }
     
    #else
    u8 pdata key_catch[4][4]={0xff,0xff,0xff,0xff,
    0xff,0xff,0xff,0xff,
    0xff,0xff,0xff,0xff,
    0xff,0xff,0xff,0xff};
    u8 pdata key_backup[4][4]={1,1,1,1,
    1,1,1,1,
    1,1,1,1,
    1,1,1,1};
    u8 pdata key_state[4][4]={1,1,1,1,
    1,1,1,1,
    1,1,1,1,
    1,1,1,1};
    u8 code key_button[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
    void Key_Scan()
    {
     u8 i=0;
     static u8 row=0;
     key_catch[row][0]=key_catch[row][0]<<1|keyrow1;
     key_catch[row][1]=key_catch[row][1]<<1|keyrow2;
     key_catch[row][2]=key_catch[row][2]<<1|keyrow3;
     key_catch[row][3]=key_catch[row][3]<<1|keyrow4;
     for(;i<4;i++)
     {
      if((key_catch[row][i]&0x0f)==0x0f)
      {
       key_state[row][i]=1;
      }
      else if((key_catch[row][i]&0x0f)==0x00)
      {
       key_state[row][i]=0;
      }
     }
     row++;
     row&=0x03;
      switch(row)
     {
      case 0:key1=0;key4=1;break;
      case 1:key2=0;key1=1;break;
      case 2:key3=0;key2=1;break;
      case 3:key4=0;key3=1;break;
      default:break;
      
     }
    }
    void Key_Judge()
    {
     u8 i=0,j=0;
     for(i=0;i<4;i++)
     {
      for(j=0;j<4;j++)
      {
      if(key_state[i][j]!=key_backup[i][j])
      {
       if(key_backup[i][j]==0)
       {
        key_value=key_button[i][j];
        key_flag=1;
       }
       key_backup[i][j]=key_state[i][j];
      }
      }
     }
    }

    #endif
  • 相关阅读:
    Nginx log日志参数详解
    sea.js模块加载工具
    sea.js模块加载工具
    Airbnb React/JSX 编码规范
    4.2 react patterns(转)
    4.1 react 代码规范
    3.5 compose redux sages
    3.3 理解 Redux 中间件(转)
    3.4 redux 异步
    3.1 开始使用 redux
  • 原文地址:https://www.cnblogs.com/a1113775906/p/13808897.html
Copyright © 2011-2022 走看看