河南键盘价格联盟

矩阵按键控制

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

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

? 最终仿真效果如下:



2、程序如下:

c程序源代码:

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

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

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

#include

#include

#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群资料下载

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