51 矩阵按键

1 篇文章 0 订阅

电路图
在这里插入图片描述

简单
1.

void scanButton(void) {
	unsigned char temp0=0,temp1=0,temp2=0;
	P1 = 0xf0;  //1111 0000
	if(P1!=0xf0) { //当按下时电平发生改变 如1110 0000
		 delay(20);
		 temp0 = P1;   //保存行结果
		 P1 = 0x0f;    // 电平反转 0x0f  0000 1111
		 if(P1!=0x0f) {   //当按下时电平发生改变 如0000 1110
		 temp1 = P1;   //保存列结果
	 }
	}
	 temp2=temp0+temp1;  
	 if(temp2==0xee) {
		 num=1;
	 }
}


  1. 稳定
char key=0;
char ledArray[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,            
                0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};
char key_buf[] = {0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,             //按键的编码
                0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
                
char scanKey(void) {
     unsigned char key_scan[]={0xef,0xdf,0xbf,0x7f};     
     unsigned char i=0,j=0;
     for(i=0;i<4;i++) {  //扫描
     P2 =key_scan[i];                              
     if((P2&0x0f)!=0x0f) {                         
     for(i=0;j<16;j++) {
         if(key_buf[j]==P2) 
				 return j;     //返回键值
       }
      }
     }
     return-1;
}

int main(void) {
   char key=0;
   P0=0x00;              
   while(1) {
   key=scanKey();            
   if (key!=-1) 
	 P0=ledArray[key];    
   }
}



}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值