栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

学蓝桥Chapter6:矩阵键盘KBD练习

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学蓝桥Chapter6:矩阵键盘KBD练习

学蓝桥Chapter6:矩阵键盘KBD练习

前提条件矩阵键盘接线图及简要介绍练习

前提条件

先将CT107D的J5键帽跳到KBD那边(或者拿一根导线短路kbd一端管脚和中间那跟管脚)

矩阵键盘接线图及简要介绍


r1——r4为行,矩阵键盘扫描第n行的时候,默认会将第n行置低电平(0),其它行置为高电平(1)

c1——c4为列,矩阵键盘扫描每一行的时候,我们通过默认将列置为高电平(1),这样当列变化出现低电平(0)的时候,就能锁定到行为低电平,列为低电平的具体位置。

例:我按下了第2行第2列的键盘,怎么判断这个键是否按下了呢?

sbit p30=P3^0;
sbit p31=P3^1;
sbit p32=P3^2;
sbit p33=P3^3;
//以上为行的位定义

sbit p34=P3^4;
sbit p35=P3^5;
sbit p42=P4^2;
sbit p44=P4^4
//以上为列的位定义
//只有进行了位定义才能使用Pn^m这样的指定引脚,不然会报错。
p30=0;//让行置为低电平
p31=p32=p33=1;
p34=p35=p42=p44=1
if(p42==0){
	//通过这条判断语句就能判断第2行第2列的键盘是否被按下了
}
练习

矩阵键盘4x4,按从上到下从左到右的优先顺序,当按下任一位置的键盘时候,显示对应这个键盘的数字

#include 

sfr P4=0xc0;//由于reg52头文件没有P4地址,所以需要自己加上P4的I/O口地址,I/O口地址可以查具体MCU型号得到。当然了,也是可以直接使用STC15的头文件,这样就不用这条语句了。

sbit a=P2^5;
sbit b=P2^6;
sbit c=P2^7;
sbit r1 = P3^0;
sbit r2 = P3^1;
sbit r3 = P3^2;
sbit r4 = P3^3;

sbit c4=P3^4;
sbit c3=P3^5;
sbit c2=P4^2;
sbit c1=P4^4;
unsigned char code dx[]={0xc0,0xf9,0xa4,0xb0,0x99,0x12,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8c,0xc1};


void delay(unsigned int t){
	while(t--);
}
void selecthc573(unsigned char channel){
	switch(channel){
		case 4:
		c=1;b=0;a=0;
		break;
		case 5:
		c=1;b=0;a=1;
		break;
		case 6:
		c=1;b=1;a=0;
		break;
		case 7:
		c=1;b=1;a=1;
		break;
	}
}
void buzzoff(){
	selecthc573(5);
	P0=0x00;
}
void showkey(unsigned char key){
	selecthc573(6);
	P0 = 0x01;
	selecthc573(7);
	P0= key;
} //数码管显示按下键盘后的数值

void scankey(){
		r1=0;
		r2=r3=r4=1; //r1——r4为行,矩阵键盘扫描第一行的时候,默认会将第一行置低电平,其它行为高电平
		c1=c2=c3=c4=1; //c1——c4为列,矩阵键盘扫描每一行的时候,我们通过默认将列置为高电平,这样当列变化出现低电平的时候,就能锁定到行为低电平,列为低电平的具体位置。
		if(c1==0){
			delay(1000);
			while(c1==0);
			key(dx[0]);
			}
		else if(c2==0){
			delay(1000);
			while(c2==0);
			key(dx[1]);
		}
		else if(c3==0){
		delay(1000);
		while(c3==0);
		key(dx[2]);
	}
		else if(c4==0){
		delay(1000);
		while(c4==0);
		key(dx[3]);
	}
		//
			r2=0;
		r1=r3=r4=1;
		c1=c2=c3=c4=1;
		if(c1==0){
			delay(1000);
			while(c1==0);
			key(dx[4]);
			}
		else if(c2==0){
			delay(1000);
			while(c2==0);
			key(dx[5]);
		}
		else if(c3==0){
		delay(1000);
		while(c3==0);
		key(dx[6]);
	}
		else if(c4==0){
		delay(1000);
		while(c4==0);
		key(dx[7]);
	}
		//
			r3=0;
		r2=r1=r4=1;
		c1=c2=c3=c4=1;
		if(c1==0){
			delay(1000);
			while(c1==0);
			key(dx[8]);
			}
		else if(c2==0){
			delay(1000);
			while(c2==0);
			key(dx[9]);
		}
		else if(c3==0){
		delay(1000);
		while(c3==0);
		key(dx[10]);
	}
		else if(c4==0){
		delay(1000);
		while(c4==0);
		key(dx[11]);
	}
		//
			r4=0;
		r2=r3=r1=1;
		c1=c2=c3=c4=1;
		if(c1==0){
			delay(1000);
			while(c1==0);
			key(dx[12]);
			}
		else if(c2==0){
			delay(1000);
			while(c2==0);
			key(dx[13]);
		}
		else if(c3==0){
		delay(1000);
		while(c3==0);
		key(dx[14]);
	}
		else if(c4==0){
		delay(1000);
		while(c4==0);
		key(dx[15]);
	}
	}

void main(){
	while(1){
		scankey();
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/722908.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号