51单片机 矩阵键盘与独立键盘综合应用

来源:互联网 发布:ppt数据总结模板 编辑:程序博客网 时间:2024/05/16 19:56
#include <reg52.h>
#include <intrins.h>


#define uchar unsigned char
#define uint unsigned int


uchar code leddate[]={


     0X3f,//0
0X06,//1
0X5B,//2
0X4f,//3
0X66,//4
0X6d,//5
0X7d,//6
0X07,//7
0X7f,//8
0X6f, //9


0x77,  //"A"
     0x7C,  //"B"
     0x39,  //"C"
     0x5E,  //"D"
     0x79,  //"E"
     0x71   //"F"
};


sbit wei=P2^7;
sbit duan=P2^6;


sbit s2=P3^0;
sbit s3=P3^1;
sbit s4=P3^2;
sbit s5=P3^3;


uchar jz_hang =0;
uchar jz_lie=0;


void delay(uchar z){


     uchar x,y;
for(x=z;x>0;x--)
    for(y=114;y>0;y--)
    _nop_();
}


//矩阵键盘扫描
void JZ(){


     //列行扫描
P3=0Xf0;


if((P3 & 0Xf0) != 0Xf0){
 
   delay(5);


if((P3 & 0Xf0) != 0Xf0){

   jz_lie = P3 & 0Xf0; //获取列值


P3 = 0X0f; //重新赋值给P3,此时按钮依然为闭合状态的


jz_hang = P3 & 0X0f;  //获取行值


       while((P3 & 0X0f) != 0X0f);

}
}


}


//独立键盘扫描
void duli(){


     P3=0Xff;


if(s2 == 0){
 
   delay(5);
if(s2 == 0){

  jz_lie=0X0e;
  jz_hang=0Xf0;
  while(!s2);
}
}


if(s3 == 0){
 
   delay(5);
if(s3 == 0){

  jz_lie=0X0d;
  jz_hang=0Xf0;
  while(!s3);
}
}


if(s4 == 0){
 
   delay(5);
if(s4 == 0){

  jz_lie=0X0b;
  jz_hang=0Xf0;
  while(!s4);
}
}


if(s5 == 0){
 
   delay(5);
if(s5 == 0){

  jz_lie=0X07;
  jz_hang=0Xf0;
  while(!s5);
}
}


}


void display(){


switch(jz_hang + jz_lie){
   
//第一行
   case 0Xee: P0=leddate[0]; break;
case 0Xde: P0=leddate[1]; break;
case 0Xbe: P0=leddate[2]; break;
case 0X7e: P0=leddate[3]; break;


//第二行
case 0Xed: P0=leddate[4]; break;
case 0Xdd: P0=leddate[5]; break;
case 0Xbd: P0=leddate[6]; break;
case 0X7d: P0=leddate[7]; break;




//第三行
case 0Xeb: P0=leddate[8]; break;
case 0Xdb: P0=leddate[9]; break;
case 0Xbb: P0=leddate[10]; break;
case 0X7b: P0=leddate[11]; break;
   
//第四行
case 0Xe7: P0=leddate[12]; break;
case 0Xd7: P0=leddate[13]; break;
case 0Xb7: P0=leddate[14]; break;
case 0X77: P0=leddate[15]; break;


//独立键盘
case 0Xfe: P0=leddate[1]; break;
case 0Xfd: P0=leddate[2]; break;
case 0Xfb: P0=leddate[3]; break;
case 0Xf7: P0=leddate[4]; break; 

default: P0=0X40; break; 
}
   
}


void main(){


wei=1;
P0=0X00;
wei=0;
duan=1;


while(1){
   
   duli();
JZ();
display();

}
   
}
原创粉丝点击