1 什么是矩阵键盘?
这里补一个键盘的定义
大家看原理图,这就是矩阵键盘(4*4)
四行 分别连到P3.0 P3.1 P3.2(INT0) P3.3(INT1) (从上到下)
四列 分别连到P3.4(LCDEN) P3.5(RS) P3.6(WR) P3.7(RD)(左到右)
2
独立键盘一端固定位低电平! 检验较为方便
但矩阵键盘不一样,他两边都与单片机的I/O相连接。所以检测方法有些不同
要人为送出低电平,我们采取以下的检测方法:
1. 先送一列为低电平,其余几列都为高电平(用此来确定列数)
2. 然后立即轮流检测每一行是否有低电平(确定行数)
我们写一个函数,用两个变量接受列和行的数据 cord_l cord_h
P3 = 0xf0; // 1111 0000
判断是否有按键按下: 例如 S6按下
1.
2. 假设S6按下
此刻S6按下导通P3.4接口LCDEN为低电平(可以这样理解是P3.0与P3.4 0&1=0)
此时的P3口为 1110 0000 (0xe0)
P3 & 0xf0 (P3和0xf0按位与)
P3 = 1110 0000
0xf0 = 1111 0000
= 1110 0000 = 0xe0
这时成立
表示有按键按下
3 延时消抖
4 储存值
P3 = 1110 0000
0xf0 = 1111 0000
cord_l = 1110 0000
cord_l = 1110 0000
0x0f = 0000 1111
P3 = 1110 1111 = 1110 1110(按下的是s6 P3.0 与 P3.1 与)
P3 = 1110 1110
0x0f = 0000 1111
cord_h = 0000 1110
cord_l = 1110 0000
cord_h = 0000 1110
返回值 = 1110 1110 = 0xee
这样我们就确定了一个值0xee 意味着是s6按下
2 程序编写 要求:按顺序按下s6~s21 依次显示0~f 6个数码管静态显示即可
矩阵键盘
这里让数码管一开始显示一个-
用了一个循环让其一直执行
注意switch中的表达式就是我们通过扫描键盘扫描出的键值码。
3 补充:
c语言中的一些运算符
运算符 | 范例 | 说明 |
+ | a+b | a变量值和b变量值相加 |
- | a-b | a变量值和b变量值相减 |
* | a*b | a变量值乘以b变量值 |
/ | a/b | a变量值除以b变量值 |
% | a%b | 取a变量值除以b变量值的余数 |
= | a=6 | 将6设定给a变量,即a变量值等于6 |
+= | a+=b | 等同于a=a+b,将a和b相加的结果又存回a |
-= | a-=b | 等同于a=a-b,将a和b相减的结果又存回a |
*= | a*=b | 等同于a=a*b,将a和b相乘的结果又存回a |
/= | a/=b | 等同于a=a/b,将a和b相除的结果又存回a |
%= | a%=b | 等同于a=a%b,将a变量值除以b变量值余数又存回a |
++ | a++ | a的值加1,即a=a+1 |
-- | a-- | a的值减1,即a=a-1 |
> | a>b | 测试a的值是否大于b |
a | 测试a的值是否小于b | |
= | a=b | 测试a的值是否等于于b |
>= | a>=b | 测试a的值是否大于或等于b |
<= | a<=b | 测试a的值是否小于或等于b |
!= | a!=b | 测试a的值是否不等于b |
&& | a&&b | a和b做逻辑做AND,两个变量都是“真”,结果才为“真”否则结果为“0” |
|| | a||b | a和b做逻辑做OR,只要任何一个变量为“真”,结果就为“真” |
! | !a | 将a变量的值取反,即原来为“真”则变“假”,为“假”则变为“真” |
>> | a>>b | 将a按位右移b个位 |
< | a< | 将a按位左移b个位,右侧补“0” |
| | a|b | a和b的按位做OR运算 |
& | a&b | a和b的按位做AND运算 |
^ | a^b | a和b的按位做XOR运算 |
~ | ~a | 将a的每一位取反 |
& | a=&b | 将b变量的地址存入a寄存器 |
* | *a | 用来取寄存器所指地址内的值 |
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』