• 蓝桥杯完美按键(无延时)


    通过改变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
  • 相关阅读:
    37 反转一个3位整数
    372 在O(1)时间复杂度删除链表节点
    174 删除链表中倒数第n个节点
    13 字符串查找
    4.Single Number(出现一次的数)
    7.斐波那契数列
    6.旋转数组的最小数字
    5.用两个栈实现队列
    垃圾收集器与内存分配策略---确定对象的存亡状态
    Java内存区域与内存溢出异常---对象的内存布局和对象的访问定位
  • 原文地址:https://www.cnblogs.com/a1113775906/p/13808897.html
Copyright © 2020-2023  润新知