KBD

BTN就不写了,直接KBD吧

在这里插入图片描述

//KBD.h//

#ifndef _KBD_H_
#define _KBD_H_

#include"config.h"

extern u8 key_Sta[4][4];
extern u8 KBD_Map[4][4];

sbit KEY_OUT_1 = P3^0;
sbit KEY_OUT_2 = P3^1;
sbit KEY_OUT_3 = P3^2;
sbit KEY_OUT_4 = P3^3;
sbit KEY_IN_1 = P4^4;
sbit KEY_IN_2 = P4^2;
sbit KEY_IN_3 = P3^5;
sbit KEY_IN_4 = P3^4;

void KBD_Scan();
void KBD_Driver();

#endif
//KBD.c//

u8 key_Sta[4][4] = { {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1} };
u8 KBD_Map[4][4] = { {'1','2','3',0x19},
         	     {'4','5','6',0x18},
          	     {'7','8','9',0x17},
          	     {'0',0x1B,0x0D,0x16} 
         	   };
void KBD_Scan()
{
 u8 i;
 static u8 index = 0;
 static u8 keybuff[4][4] = {
             {0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF},
             {0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF}
            };
 
 switch(index)
 {
  case 0 : KEY_OUT_4 = 1; KEY_OUT_1 = 0; break;
  case 1 : KEY_OUT_1 = 1; KEY_OUT_2 = 0; break;
  case 2 : KEY_OUT_2 = 1; KEY_OUT_3 = 0; break;
  case 3 : KEY_OUT_3 = 1; KEY_OUT_4 = 0; break;
  default: break;
 }
 
 keybuff[index][0] = (keybuff[index][0] << 1) | KEY_IN_1;
 keybuff[index][1] = (keybuff[index][1] << 1) | KEY_IN_2;
 keybuff[index][2] = (keybuff[index][2] << 1) | KEY_IN_3;
 keybuff[index][3] = (keybuff[index][3] << 1) | KEY_IN_4;
 
 for(i=0;i<4;i++)
 {
  if((keybuff[index][i] & 0x0F) == 0x0F)
   key_Sta[index][i] = 1;
   
  if((keybuff[index][i] & 0x0F) == 0x00)
   key_Sta[index][i] = 0;
 }

 index++;
 index &= 0x03;
}
void KBD_Driver()
{
 u8 i=0,j=0;
 static u8 key_before[4][4] = { {1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1} };
 
 for(i=0;i<4;i++)
 {
  for(j=0;j<4;j++)
  {
   if(key_Sta[i][j] != key_before[i][j])
   {
    if(key_before[i][j] != 0)
    {
     KBD_Action(KBD_Map[i][j]);
    }
    key_before[i][j] = key_Sta[i][j];
   }
  }
 } 
}
void KBD_Action(u8 dat)
{
 
 if(dat == '1')
 {
  
 }
 if(dat == 0x18)
 {
 
 }
 
}

  • 切记没有P36、P37
  • P36 = P42
    P37 = P44
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值