设计一个3 行×4列的矩阵键盘,采用行扫描法编写程序,当有按键动作时,能够获得按键

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计一个3 行×4列的矩阵键盘,采用行扫描法编写程序,当有按键动作时,能够获得按键相关的知识,希望对你有一定的参考价值。

设计一个3 行×4列的矩阵键盘,采用行扫描法编写程序,当有按键动作时,能够获得按键的位置,即该键的行号和列号。

#define uint unsigned int
#define uchar unsigned char
#define Key_Scanf P1 //4X4按键显示;
#define Print_Out P0 //显示数字P0;
#define PORT P2 //数码选择;
#define SYSLED P0^7; //系统指示灯;
uchar code table[]=0xff,0x4f,0x12,0x06,0x4c,0x24,0x20,0x0f,0x00,0x0c,0x01; //0~9数字
void display(uchar); //显示
void delay_50us(uint t); //延时50微秒,防抖动
uchar keyscan(void); //键盘
void SYS_LED(void); //指示灯
uchar a=0;
uchar keynum;

void delay_50us(uint t)

uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);


void SYS_LED()

SYSLED = 0;
delay_50us(100);
SYSLED = 1;


void display( uchar keynum) //根据keynum返回值显示数字

PORT=0xfe;
Print_Out=table[keynum];

uchar keyscan()

Key_Scanf=0xbf; // 扫描第一横行,后四位为1,前四位线与,然后跟原来数值比较,如果不等,则把对应的数字赋给keynum
if((Key_Scanf&0xbf)!=0xbf)

delay_50us(100);
if((Key_Scanf&0xbf)!=0xbf)//消抖

SYS_LED();
a=Key_Scanf&0xbf;
switch(a)

case 0x77:keynum=1;break;
case 0x7b:keynum=2;break;
case 0x7d:keynum=3;break;
default:break;



Key_Scanf=0xdf; //扫描第二横行,后四位为1,前四位线与;
if((Key_Scanf&0xdf)!=0xdf)

delay_50us(100);
if((Key_Scanf&0xdf)!=0xdf)

a=Key_Scanf&0xdf;
switch(a)

case 0x7e:keynum=4;break;
case 0xb7:keynum=5;break;
case 0xbb:keynum=6;break;
default: break;



Key_Scanf=0xef; //扫描第三横行,后四位为1,前四位线与;
if((Key_Scanf&0xef)!=0xef)

delay_50us(100);
if((Key_Scanf&0xef)!=0xef)

a=Key_Scanf&0xef;
switch(a)

case 0xbd:keynum=7;break;
case 0xbe:keynum=8;break;
case 0xe7:keynum=9;break;
default: break;




Key_Scanf=0xf7; //扫描第四横行,后四位为1,前四位线与;
if((Key_Scanf&0xf7)!=0xf7)

delay_50us(100);
if((Key_Scanf&0xf7)!=0xf7)

a=Key_Scanf&0xf7;
switch(a)

case 0xeb:keynum=10;break;
default: break;



return keynum;


void main(void)

while(1)

keyscan();
display(keynum);

参考技术A 坚决拿下这200分!
这是个完整的程序,包括输入和输出部分。

#include<iostream>
using namespace std;

int main()

int a[4][5]=;
int i,j,temp,*p;

//输入
cout<<"请输入一个4行5列的矩阵:"<<endl;
for(i=0;i<4;i++)
for(j=0;j<5;j++)
cin>>a[i][j];

//冒泡排序
p=&a[0][0];
for(i=0;i<4*5;i++)
for(j=4*5-1;j>i;j--)
if(p[j]>p[j-1])
//交换
temp=p[j];
p[j]=p[j-1];
p[j-1]=temp;


//输出
cout<<"排序后的矩阵是:"<<endl;
for(i=0;i<4;i++)

for(j=0;j<5;j++)

cout<<a[i][j]<<" ";

cout<<endl;

return 0;
本回答被提问者和网友采纳

以上是关于设计一个3 行×4列的矩阵键盘,采用行扫描法编写程序,当有按键动作时,能够获得按键的主要内容,如果未能解决你的问题,请参考以下文章

4x4矩阵键盘

MSP430G2553 4x4矩阵键盘

疑问----单片机矩阵键盘行列反转扫描法

键盘矩阵行反转法的讲解 有程序有注释 但是就是不明白它怎么实现的 我是单片机菜鸟 这是我看的第一个程序

51单片机4x4矩阵键盘扫描+数码管显示

51单片机,用c语言,如何用矩阵键盘为一个变量char a赋值?已设计出一个函数,使得每按一个矩阵