单片机矩阵键盘编程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
switch (表达式) {case 常量表达式1:{语句1;}break; case 常量表达式2:{语句2;}break; …… case 常量表达式n:{语句n;}break; default:{语句n+1;}
说明如下:
(1)switch后面括号内的表达式,可以是整型或字符型表 达式。
(2)当该表达式的值与某一“case”后面的常量表达式的 值相等时,就执行该“case”后面的语句,然后遇到break语 句退出switch语句。若表达式的值与所有case后的常量表达 式的值都不相同,则执行default后面的语句,然后退出 switch结构。
39 38 37 36 35
34 33 32
K0
P10
K4
P11
0 K1 4 K5
1 K2 5 K6
2 K3 6 K7
3 7
13 12
15 14
31
19 18
9
17 16
INT1 INT0
TT0189S52
EA/VP
P20 P21 P22 P23 P24 P25 P26 P27
21 22 23 24 25 26 27 28
量max,如x大于y不成立,则把y送给最大值变量max。使 max变量得到x、y中的大数。
(3)if (score>=90) printf(“Your result is an A\n”);
else if (score>=80) printf(“Your result is an B\n”);
else if (score>=70) printf(“Your result is an C\n”);
图8.2 矩阵式键盘接口
0
1
2
3
ee
de
be
7e
4
5
6
7
ed dd bd 7d
8
Biblioteka Baidu
9
A
B
eb db bb 7b
C
D
E
F
e7 d7 b7 77
键盘接口的消抖
1.消除键抖动
键按下
键稳定
前沿抖动
前沿抖动
图5.2 键合断时的电压抖动
if语句 if语句是C51中的一个基本条件选择语句,它通常 有三种格式: (1)if (表达式) {语句;} (2)if (表达式) {语句1;} else {语句2;} (3)if (表达式1) {语句1;} else if (表达式2) (语句2;) else if (表达式3) (语句3;)
}
键盘控制流程
单片机对矩阵式 键盘接口处理的一 般过程如图8.3所示。
N
等待键释放
开始 键扫描
有键按下? Y
消除抖动
键扫描
确有键按下? Y
求键值
键释放? Y
按键处理
通常,键盘有编码和非编码两种。编码键盘通 过硬件电路产生被按按键的键码和一个选通脉冲。 选通脉冲可作为CPU的中断请求信号。这种键盘使 用方便,所需程序简单,但硬件电路复杂,常不被 单片机采用。
非编码键盘按组成结构又可分为独立式键盘和 矩阵式键盘。独立式键盘的工作过程与矩阵式键盘 类似,无论是硬件结构还是软件设计都比较简单,。
【例】 switch/case语句的用法。 对学生成绩划分为A~D,对应不同的百分制
分数,要求根据不同的等级打印出它的对应百分数。 可以通过下面的switch/case语句实现。
…… switch(grade)
{ case ‘A’;printf(”90~100\n”);break; case ‘B’;printf(”80~90\n”);break; case ‘C’;printf(”70~80\n”);break; case ‘D’;printf(”60~70\n”);break; case ‘E’;printf(”<60\n”);break; default;printf(”error”\n)
else if (score>=60) printf(“Your result is an D\n”);
else printf(“Your result is an E\n”); 执行上面语句后,能够根据分数score分别打出A、B、
C、D、E五个等级。
switch/case语句
if语句通过嵌套可以实现多分支结构,但结构复杂。 switch是C51中提供的专门处理多分支结构的多分支 选择语句。它的格式如下:
…… else if (表达式n-1) (语句n-1;) else {语句n}
【例】 if语句的用法。 (1)if (x!=y) printf(“x=%d,y=%d\n”,x,y); 执行上面语句时,如果x不等于y,则输出x的值和y的值。 (2)if (x>y) max=x;
else max=y; 执行上面语句时,如x大于y成立,则把x送给最大值变
(3)每一个case常量表达式的值必须不同否则会出现自相 矛盾的现象。
(4)case语句和default语句的出现次序对执行过程没有影 响。
(5)每个case语句后面可以有“break”,也可以没有。有 break语句,执行到break则退出switch结构,若没有,则会 顺次执行后面的语句,直到遇到break或结束。
P1.4 P1.5 P1.6 P1.7
89S52
+5V
S1 S2 S3 S4
89s52
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
+5V
图8.1 独立式键盘接口
特点:每个按键占用一条I/O 线,当按键数量较多时,I/O 口利用率不高,但程序编制简 单。适用于所需按键较少的场 合。
X1 X2
RESET
RD WR
VCC GND RXD TXD ALE/P PSEN
40 20 10 11 30 29
P12K8 P13K12
8 K9 C K13
9 K10 D K14
A K11 E K15
B F
P17 P16 P15 P14
扫描法 和线反转法
+5V
89s52
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
图8.2 矩阵式键盘接口
特点:电路连接复杂,但提 高了I/O口利用率,软件编程 较复杂。适用于需使用大量 按键的场合。
U1
P10 1 P11 2 P12 3 P13 4 P14 5 P15 6 P16 7 P17 8
P10 P11 P12 P13 P14 P15 P16 P17
P00 P01 P02 P03 P04 P05 P06 P07
说明如下:
(1)switch后面括号内的表达式,可以是整型或字符型表 达式。
(2)当该表达式的值与某一“case”后面的常量表达式的 值相等时,就执行该“case”后面的语句,然后遇到break语 句退出switch语句。若表达式的值与所有case后的常量表达 式的值都不相同,则执行default后面的语句,然后退出 switch结构。
39 38 37 36 35
34 33 32
K0
P10
K4
P11
0 K1 4 K5
1 K2 5 K6
2 K3 6 K7
3 7
13 12
15 14
31
19 18
9
17 16
INT1 INT0
TT0189S52
EA/VP
P20 P21 P22 P23 P24 P25 P26 P27
21 22 23 24 25 26 27 28
量max,如x大于y不成立,则把y送给最大值变量max。使 max变量得到x、y中的大数。
(3)if (score>=90) printf(“Your result is an A\n”);
else if (score>=80) printf(“Your result is an B\n”);
else if (score>=70) printf(“Your result is an C\n”);
图8.2 矩阵式键盘接口
0
1
2
3
ee
de
be
7e
4
5
6
7
ed dd bd 7d
8
Biblioteka Baidu
9
A
B
eb db bb 7b
C
D
E
F
e7 d7 b7 77
键盘接口的消抖
1.消除键抖动
键按下
键稳定
前沿抖动
前沿抖动
图5.2 键合断时的电压抖动
if语句 if语句是C51中的一个基本条件选择语句,它通常 有三种格式: (1)if (表达式) {语句;} (2)if (表达式) {语句1;} else {语句2;} (3)if (表达式1) {语句1;} else if (表达式2) (语句2;) else if (表达式3) (语句3;)
}
键盘控制流程
单片机对矩阵式 键盘接口处理的一 般过程如图8.3所示。
N
等待键释放
开始 键扫描
有键按下? Y
消除抖动
键扫描
确有键按下? Y
求键值
键释放? Y
按键处理
通常,键盘有编码和非编码两种。编码键盘通 过硬件电路产生被按按键的键码和一个选通脉冲。 选通脉冲可作为CPU的中断请求信号。这种键盘使 用方便,所需程序简单,但硬件电路复杂,常不被 单片机采用。
非编码键盘按组成结构又可分为独立式键盘和 矩阵式键盘。独立式键盘的工作过程与矩阵式键盘 类似,无论是硬件结构还是软件设计都比较简单,。
【例】 switch/case语句的用法。 对学生成绩划分为A~D,对应不同的百分制
分数,要求根据不同的等级打印出它的对应百分数。 可以通过下面的switch/case语句实现。
…… switch(grade)
{ case ‘A’;printf(”90~100\n”);break; case ‘B’;printf(”80~90\n”);break; case ‘C’;printf(”70~80\n”);break; case ‘D’;printf(”60~70\n”);break; case ‘E’;printf(”<60\n”);break; default;printf(”error”\n)
else if (score>=60) printf(“Your result is an D\n”);
else printf(“Your result is an E\n”); 执行上面语句后,能够根据分数score分别打出A、B、
C、D、E五个等级。
switch/case语句
if语句通过嵌套可以实现多分支结构,但结构复杂。 switch是C51中提供的专门处理多分支结构的多分支 选择语句。它的格式如下:
…… else if (表达式n-1) (语句n-1;) else {语句n}
【例】 if语句的用法。 (1)if (x!=y) printf(“x=%d,y=%d\n”,x,y); 执行上面语句时,如果x不等于y,则输出x的值和y的值。 (2)if (x>y) max=x;
else max=y; 执行上面语句时,如x大于y成立,则把x送给最大值变
(3)每一个case常量表达式的值必须不同否则会出现自相 矛盾的现象。
(4)case语句和default语句的出现次序对执行过程没有影 响。
(5)每个case语句后面可以有“break”,也可以没有。有 break语句,执行到break则退出switch结构,若没有,则会 顺次执行后面的语句,直到遇到break或结束。
P1.4 P1.5 P1.6 P1.7
89S52
+5V
S1 S2 S3 S4
89s52
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
+5V
图8.1 独立式键盘接口
特点:每个按键占用一条I/O 线,当按键数量较多时,I/O 口利用率不高,但程序编制简 单。适用于所需按键较少的场 合。
X1 X2
RESET
RD WR
VCC GND RXD TXD ALE/P PSEN
40 20 10 11 30 29
P12K8 P13K12
8 K9 C K13
9 K10 D K14
A K11 E K15
B F
P17 P16 P15 P14
扫描法 和线反转法
+5V
89s52
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
图8.2 矩阵式键盘接口
特点:电路连接复杂,但提 高了I/O口利用率,软件编程 较复杂。适用于需使用大量 按键的场合。
U1
P10 1 P11 2 P12 3 P13 4 P14 5 P15 6 P16 7 P17 8
P10 P11 P12 P13 P14 P15 P16 P17
P00 P01 P02 P03 P04 P05 P06 P07