设计一个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列的矩阵键盘,采用行扫描法编写程序,当有按键动作时,能够获得按键的主要内容,如果未能解决你的问题,请参考以下文章