这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 单片机C语言程序设计:数码管显示4X4矩阵键盘按键号

共1条 1/1 1 跳转至

单片机C语言程序设计:数码管显示4X4矩阵键盘按键号

高工
2013-10-25 15:49:05     打赏

/* 名称:数码管显示4X4矩阵

键盘按键号

说明:按下任意键时,数码

管都会显示其键的序号,扫描程

序首先判断按键发生在哪一列,

然后根据所发生的行附加不同的

值,从而得到按键的序号。

*/

#includereg51.h>

#defineucharunsignedchar

#defineuintunsignedint

//段码

ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,

0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};

sbitBEEP=P3^7;

//上次按键和当前按键的序号,该矩阵中序号范围0~1516表示无按键

ucharPre_KeyNo=16,KeyNo=16;

//延时

voidDelayMS(uintx)

{

uchari;

while(x--)for(i=0;i120;i++);

}

//矩阵键盘扫描

voidKeys_Scan()

{

ucharTmp;

P1=0x0f;//4位置0,放入4

DelayMS(1);

Tmp=P1^0x0f;//按键后0f变成0000XXXXX中一个为03个仍为1,通过异或把31变为0,唯

一的0变为1

switch(Tmp)//判断按键发生于0~3列的哪一列

{

case1: KeyNo=0;break;

case2: KeyNo=1;break;

case4:KeyNo=2;break;

case8: KeyNo=3;break;

default:KeyNo=16;//无键按下

}

P1=0xf0;//4位置0,放入4

DelayMS(1);

Tmp=P1>>4^0x0f;//按键后f0变成XXXX0000X中有1个为0,三个仍为1;高4位转移到低4位并

异或得到改变的值

switch(Tmp)//0~3行分别附加起始值04812

{

case1: KeyNo+=0;break;

case2: KeyNo+=4;break;

case4: KeyNo+=8;break;

case8: KeyNo+=12;

}

}

//蜂鸣器

voidBeep()

{

uchari;

for(i=0;i100;i++)

{

DelayMS(1);

BEEP=~BEEP;

}

BEEP=0;

}

//主程序

voidmain()

{

P0=0x00;

BEEP=0;

while(1)

{

P1=0xf0;

if(P1!=0xf0)Keys_Scan(); //获取键序号

if(Pre_KeyNo!=KeyNo)

{

P0=~DSY_CODE[KeyNo];

Beep();

Pre_KeyNo=KeyNo;

}

DelayMS(100);

}

}

单片机C语言程序设计:数码管显示4X4矩阵键盘按键号

扩展阅读:4X4矩阵键盘控制条形LED 显示程序




关键词: 基础知识    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]