矩阵键盘的键值计算及编程
P1口高四位是指:P1.7 P1.6 P1.5 P1.4 P1口低四位是指:P1.3 P1.2 P1.1 P1.0
景德镇学院机电系
.j
2 读取I/O口值的练习
• 用程序控制单片机P2口工作,让高四位全高电平,低四位 全低电平。 即:P2=0xf0;
具体实现见操作,结果如图。
景德镇学院机电系
.j
2 读取I/O口值的练习
景德镇学院机电系
.j
3 键盘的键值
找列线值时,程序使P2=0xf0;
P2.7列线上开关按下会使P2口值变为 0x70, 其余同理。
景德镇学院机电系
.j
键盘的键值
位置
(1行,1列) (1行,2列) (1行,3列) (1行,4列) (2行,1列) (2行,2列) (2行,3列) (2行,4列)
键值
e0+0e=ee d0+0e=de b0+0e=be 70+0e=7e
输出高电平,P0口要接上拉电阻才能输出高电平。
a 各脚状态标记都是红色方块。
b 用电压测量都是5V。
景德镇学院机电系
.j
1 键值计算基本原理__“好人被带坏”
• 要使一个引脚变为低电平有如下方法:
a 接地。 b 用逻辑状态信号人为改变。 c 编写程序使其输出低电平。
景德镇学院机电系
.j
1 键值计算基本原理__“好人被带坏”
3 键盘的键值
注:行列线的排列不同,键值
分景布德镇也学不院机同电系
பைடு நூலகம்
.j
计算键值一般 方法
找出行线值
置行线所处端口位置高电平
找出列线值
置列线所处端口位置高电平
行线值+列线值=键值
3 键盘的键值
景德镇学院机电系
键盘的键值
位置
键值
(1行,1列) e7 (1行,2列) eb (1行,3列) ed (1行,4列) ee
(2行,1列) d7 (2行,2列) db (2行,3列) dd (2行,4列) de
(3行,1列) b7 (3行,2列) bb (3行,3列) bd (3行,4列) be
(4行,1列) 77 (4行,2列) 7b (4行,3列) 7d (4行,4列) 7e
.j
3 键盘的键值
总结
4×4矩阵键盘的键值 共有16个,计算键值时总是: 先找出行线值,再找出列线值,最后绘出矩阵键盘的键值
delay(10); //延时防抖 if((P2&0xf0)!=0xf0) //仍有键按下
{ value_h=P2&0xf0; //读出P2口值给变量value_h
NO 行线高电平有 变化吗?
YES 延时,防抖
P2=0x0f; //将列线所处位置置高电平 value_l=P2&0x0f; //读出P2口值给变量value_l
P2=0xf0; //将行线所处位置置高电平
if((P2&0xf0)!=0xf0) //判断是否有键按下
{
delay(10); //延时防抖
if((P2&0xf0)!=0xf0) //仍有键按下
{
value_h=P2&0xf0; //读出P2口值给变量value_h
P2=0x0f; //将列线所处位置置高电平
NO 行线高电平有 变化吗?
return(value_l+value_h); //找到的键值返回给调用函数
YES
}
} }
景德镇学院机电系
读出行线值给 Value_h变量
特意置: 列线高电平,行线 低电平,去找列值
读出列线值给 Value_l变量 算出 Value_h+Value_l 键值返回给调用者
value_l=P2&0x0f; //读出P2口值给变量value_l
return(value_l+value_h); //找到的键值返回给调用函数
}
}
景德镇学院机电系
.j
}
4 键盘扫描编程__线反转法流程分析 /************键盘扫子描函数*******************/
char keyscan(void) //键盘扫描函数,键盘使用P2口
结束
.j
5 一个数码管显示矩阵键盘值的实验
实验电路如图,显示数码管接在P1口,键盘接在P2口,第一行第一列的开关按下 数码管显示“0”,“1~F”的显示分布见图。 注:键盘上标注的“0~F”叫做执行景德值镇,学前院面机分电析系的16个值(ee~77)叫键盘的键值。.j
。
景德镇学院机电系
.j
4 键盘扫描编程__线反转法 /************键盘扫子描函数*******************/ char keyscan(void) //键盘扫描函数,键盘使用P2口
{
char value_h,value_l; //value_h行值变量,value_l列值变量
4×4矩阵键盘的键值计算及编程
51单片机C语言编程及Proteus 仿真
本讲主要内容
1
键值计算基本原理
2
读取I/O口值的练习
3
键盘的键值计算
4
键盘扫描编程__线反转法
5
一个数码管显示矩阵键盘值的实验
景德镇学院机电系
.j
1 键值计算基本原理__“好人被带坏”
•
默认状态:单片机通电复位后P1 P2 P3口每个脚都
• 一个低电平引脚与高电平引脚相接,结果如何? 实验结果:“好人被带坏”,即高电平引脚电压被变 低。
景德镇学院机电系
.j
2 读取I/O口值的练习
• 一般都是自高到低读出一个端口各脚电平 ,得到8位二进制 数,再将8位二进制转换成2位十六进数。
P1口值=P1.7 P1.6 P1.5 P1.4P1.3 P1.2 P1.1 P1.0 =1101 1111=0x df P3口值= P3.7 P3.6 P3.5 P3.4P3.3 P3.2 P3.1 P3.0 =1111 1010=0xfa
e0+0d=ed d0+0d=dd b0+0d=bd 70+0d=7d
(3行,1列) (3行,2列) (3行,3列) (3行,4列)
e0+0b=eb
d0+0b=db b0+0b=bb 70+0b=7b
(4行,1列) (4行,2列) (4行,3列) (4行,4列)
e0+07=e7
d0+07=d7 b0+07=b7 70+07=77
• 当 P2=0xf0; 外接一个两脚开关到P2口只能让P2产生如下
四个新的值: 0xe0, 0xd0,0xb0,0x70
0xe0
0x70
景德镇学院机电系
.j
2 读取I/O口值的练习
• 当 程序使P2=0x0f; 外接一个两脚开关到P2口只能让P2产
生如下四个新的值: 0x0e, 0x0d,0x0b,0x07
0x0d
0x0b
景德镇学院机电系
.j
2 读取I/O口值的练习
总结
开关接通后,如果两引脚上电平不同时,会将高电平引脚电压变 低。
景德镇学院机电系
.j
3 键盘的键值
P2口接有4×4 键盘,低四位做行线,高四位做列线。
景德镇学院机电系
.j
3 键盘的键值
找行线值时,程序使P2=0x0f;
P2.0行线上开关按下会使P2口值变为 0x0e, 其余同理。
开始
{ char value_h,value_l; //value_h行值变量,value_l列值变量 P2=0xf0; //将行线所处位置置高电平 if((P2&0xf0)!=0xf0) //判断是否有键按下 {
定义 Value_h 行值变量 Value_l 列值变量
特意置: 行线高电平,列线 低电平,去找行值