微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51开发板对4x4键盘控制,但键盘第一行无反应,键盘已确定...

51开发板对4x4键盘控制,但键盘第一行无反应,键盘已确定...

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uint z);
void  keyscan();
void  keydown();
uchar  dis_buf,temp,key;      
unsigned char code table[]={~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};
void main()
{  
    P2=0xFF;
P2=0x00;                     
    delay(10);   
  while(1)
{
  keydown();
   P0=table[dis_buf%16];
}
}
void delay(uint z)
{
  uint x,y;
  for(y=z;y>0;y--)
  for(x=100;x>0;x--);
}
  void  keyscan()
{  temp = 0;
    P3=0xF0;                 //高四位输入   行为高电平  列为低电平
    delay(1);
temp=P3;                 //读P1口
    temp=temp&0xF0;    //屏蔽低四位
    temp=~((temp>>4)|0xF0);   
    if(temp==1)   // p3.4 被拉低
        key=0;
    else if(temp==2)   // p3.5 被拉低
        key=1;
    else if(temp==4)   // p3.6 被拉低
        key=2;
    else if(temp==8)   // p3.7 被拉低
         key=3;
    P3=0x0F;                //低四位输入  列为高电平 行为低电平
    delay(1);
temp=P3;                //读P3口      
    temp=temp&0x0F;
    temp=~(temp|0xF0);
if(temp==1)        // p3.0 被拉低
        key=key+0;
    else if(temp==2)   // p3.1  被拉低
        key=key+4;
    else if(temp==4)   // p3.2  被拉低
        key=key+8;
    else if(temp==8) // p3.3  被拉低
        key=key+12;
     dis_buf = key;               
     dis_buf = dis_buf & 0x0f;
}
   void  keydown()
{  
   P3=0xF0;
if(P3!=0xF0)  
{
   keyscan();
    }
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top