河南键盘价格联盟

矩阵按键控制

凡心6782018-06-23 08:10:35

1、矩阵按钮控制显示0~F

  最终仿真效果如下:



2、程序如下:

c程序源代码:

//**项目:矩阵按键控制单个数码管显示0~F**//

//**数码管类型:共阳极型**//

//**按键扫描方式:列扫描**//

#include<reg51.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

#define sm_data P1

sbit c0=P2^0;

sbit c1=P2^1;

sbit c2=P2^2;

sbit c3=P2^3;

sbit c4=P2^4;

sbit c5=P2^5;

sbit c6=P2^6;

sbit c7=P2^7;


void delay1(uchar time);

uchar jianpanzhi(); //**定义按键编号**//

void display(uchar b);

void main()

{

uchar x;

//P1=0xff;

//**排除按键抖动**//

 while(1)

 {

 x=jianpanzhi();

 delay1(50);

 display(x);

 }

 }


//**初始化P2口**//

 uchar jianpanzhi()

 {

 uint i,a;

 c4=0;

 c5=0;

 c6=0;

 c7=0;


 //**判断按键是否按下**//

 if(P2!=0x0f)

 {

 delay1(50);

 if(P2!=0x0f)


 for(i=0;i<4;i++)


 //**列选择**//

 {

 switch(i) 

 {

 case 0:

 c4=0; c5=1; c6=1; c7=1;

 break;


 case 1:

 c4=1; c5=0; c6=1; c7=1;

 break;


 case 2:

 c4=1; c5=1; c6=0; c7=1;

 break;


 case 3: 

 c4=1; c5=1; c6=1; c7=0;

 break;

   default:

   break;

 }


 //**行选择**//

 if(!c0)

 {

 a=i+1;

 break;

 }


 if(!c1)

 {

 a=i+5;

 break;

 }


 if(!c2)

 {

 a=i+9;

 break;

 }


 if(!c3)

 {

 a=i+13;

 break;

 }

 } //**列选择结束**//

 }     //**循环结束**//

 return a;

 }

 void display(uchar b)

 {

  switch(b)

  {

  case 1:

  sm_data=0xc0;

  break;


  case 2:

  sm_data=0xf9;

  break;


  case 3:

  sm_data=0xa4;

  break;


  case 4:

  sm_data=0xb0;

  break;


  case 5:

  sm_data=0x99;

  break;


  case 6:

  sm_data=0x92;

  break;


  case 7:

  sm_data=0x82;

  break;


  case 8:

  sm_data=0xf8;

  break;


  case 9:

  sm_data=0x80;

  break;


  case 10:

  sm_data=0x98;

  break;


  case 11:

  sm_data=0x88;

  break;


  case 12:

  sm_data=0x83;

  break;


  case 13:

  sm_data=0xc6;

  break;


  case 14:

  sm_data=0xa1;

  break;


  case 15:

  sm_data=0x86;

  break;


  case 16:

  sm_data=0x8e;

  break;


  default:

  sm_data=0xff;

  break;

  }

  }

void delay1(uchar time)

 {

 while(time--)

 _nop_();

 }

//**此程序过长,不做详细注释**//

//**请参考课本P138~143**//


附:SWK-51A  矩阵按键电路图



本节源代码及proteus仿真接线图下载方法:

1

《凡心》QQ群资料下载

若有其他问题,请自行查阅群文件,祝你学习愉快!