1、独立键盘和矩阵键盘 非编码键盘按组成结构又可分为独立式键盘与非编码键盘按组成结构又可分为独立式键盘与矩阵式键盘。独立式键盘得工作过程与矩阵式键盘矩阵式键盘。独立式键盘得工作过程与矩阵式键盘类似类似,无论就是硬件结构还就是软件设计都比较简单无论就是硬件结构还就是软件设计都比较简单,。通常通常,键盘有编码与非编码两种。编码键盘通过键盘有编码与非编码两种。编码键盘通过硬件电路产生被按按键得键码与一个选通脉冲。选硬件电路产生被按按键得键码与一个选通脉冲。选通脉冲可作为通脉冲可作为CPU得中断请求信号。这种键盘使用得中断请求信号。这种键盘使用方便方便,所需程序简单所需程序简单,但硬件电路复杂但硬件电路复
2、杂,常不被单片机常不被单片机采用。采用。S1 S1S4S4S3S3S2S2 P1.4 P1.4 P1.5 P1.5 P1.6 P1.6 P1.7 P1.7 89S52 89S52+5V+5V图图8.1 独立式键盘接口独立式键盘接口特点特点:每个按键占用一条每个按键占用一条I/OI/O线线,当按键数量较多时当按键数量较多时,I/OI/O口利用口利用率不高率不高,但程序编制简单。适但程序编制简单。适用于所需按键较少得场合。用于所需按键较少得场合。特点特点:电路连接复杂电路连接复杂,但提高但提高了了I/OI/O口利用率口利用率,软件编程较软件编程较复杂。适用于需使用大量按复杂。适用于需使用大量按键得
3、场合。键得场合。89s5289s52P1.0P1.0P1.1P1.1P1.2P1.2P1.3P1.3P1.4P1.4P1.5P1.5P1.6P1.6P1.7P1.7+5V+5V图图8.2 矩阵式键盘接口矩阵式键盘接口K99K10AK15FP10P11P12P13P14P15P16P17EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P
4、2728PSEN29ALE/P30TXD11RXD10VCC40GND20U189S52P10P11P12P13P14P15P16P17K00K11K22K33K55K66K77K88K44K11BK12CK13DK14En n扫描法 与线反转法 89s5289s52P1.0P1.0P1.1P1.1P1.2P1.2P1.3P1.3P1.4P1.4P1.5P1.5P1.6P1.6P1.7P1.7+5V+5V图图8.2 矩阵式键盘接口矩阵式键盘接口n n 0123n n ee debe7en n 4567n n edddbd7dn n 89ABn n ebdbbb7bn n CDEFn n e7d
5、7b777 键盘接口得消抖键盘接口得消抖 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;)else if(表达式表达式n-1)(语句语句n-1;)else 语句语句n【例例】if语句得用法。语句得用法。(1)if
6、 (x!=y)printf(“x=%d,y=%dn”,x,y);执行上面语句时执行上面语句时,如果如果x不等于不等于y,则输出则输出x得值与得值与y得值。得值。(2)if (xy)max=x;else max=y;执行上面语句时执行上面语句时,如如x大于大于y成立成立,则把则把x送给最大值变量送给最大值变量max,如如x大于大于y不成立不成立,则把则把y送给最大值变量送给最大值变量max。使。使max变量得到变量得到x、y中得大数。中得大数。(3)if (score=90)printf(“Your result is an An”);else if (score=80)printf(“Your
7、 result is an Bn”);else if (score=70)printf(“Your result is an Cn”);else if (score=60)printf(“Your result is an Dn”);else printf(“Your result is an En”);执行上面语句后执行上面语句后,能够根据分数能够根据分数score分别打出分别打出A、B、C、D、E五个等级。五个等级。大家学习辛苦了,还是要坚持继续保持安静继续保持安静switch/case语句语句 if语句通过嵌套可以实现多分支结构语句通过嵌套可以实现多分支结构,但结构复杂。但结构复杂。sw
8、itch就是就是C51中提供得专门处理多分支结构得多分中提供得专门处理多分支结构得多分支选择语句。它得格式如下支选择语句。它得格式如下:switch(表达式表达式)case 常量表达式常量表达式1:语句语句1;break;case 常量表达式常量表达式2:语句语句2;break;case 常量表达式常量表达式n:语句语句n;break;default:语句语句n+1;说明如下说明如下:(1)switch后面括号内得表达式后面括号内得表达式,可以就是整型或字符型表达可以就是整型或字符型表达式。式。(2)当该表达式得值与某一当该表达式得值与某一“case”后面得常量表达式得值后面得常量表达式得值相
9、等时相等时,就执行该就执行该“case”后面得语句后面得语句,然后遇到然后遇到break语句退语句退出出switch语句。若表达式得值与所有语句。若表达式得值与所有case后得常量表达式得后得常量表达式得值都不相同值都不相同,则执行则执行default后面得语句后面得语句,然后退出然后退出switch结构。结构。(3)每一个每一个case常量表达式得值必须不同否则会出现自相矛常量表达式得值必须不同否则会出现自相矛盾得现象。盾得现象。(4)case语句与语句与default语句得出现次序对执行过程没有影响。语句得出现次序对执行过程没有影响。(5)每个每个case语句后面可以有语句后面可以有“br
10、eak”,也可以没有。有也可以没有。有break语句语句,执行到执行到break则退出则退出switch结构结构,若没有若没有,则会顺次则会顺次执行后面得语句执行后面得语句,直到遇到直到遇到break或结束。或结束。【例例】switch/case语句得用法。语句得用法。对学生成绩划分为对学生成绩划分为AD,对应不同得百分制分对应不同得百分制分数数,要求根据不同得等级打印出它得对应百分数。要求根据不同得等级打印出它得对应百分数。可以通过下面得可以通过下面得switch/case语句实现。语句实现。switch(grade)case A;printf(”90100n”);break;case B;
11、printf(”8090n”);break;case C;printf(”7080n”);break;case D;printf(”6070n”);break;case E;printf(”y)max=x;else max=y;执行上面语句时执行上面语句时,如如x大于大于y成立成立,则把则把x送给最大值变量送给最大值变量max,如如x大于大于y不成立不成立,则把则把y送给最大值变量送给最大值变量max。使。使max变量得到变量得到x、y中得大数。中得大数。(3)if (score=90)printf(“Your result is an An”);else if (score=80)print
12、f(“Your result is an Bn”);else if (score=70)printf(“Your result is an Cn”);else if (score=60)printf(“Your result is an Dn”);else printf(“Your result is an En”);执行上面语句后执行上面语句后,能够根据分数能够根据分数score分别打出分别打出A、B、C、D、E五个等级。五个等级。switch/case语句语句 if语句通过嵌套可以实现多分支结构语句通过嵌套可以实现多分支结构,但结构复杂。但结构复杂。switch就是就是C51中提供得专门处
13、理多分支结构得多分中提供得专门处理多分支结构得多分支选择语句。它得格式如下支选择语句。它得格式如下:switch(表达式表达式)case 常量表达式常量表达式1:语句语句1;break;case 常量表达式常量表达式2:语句语句2;break;case 常量表达式常量表达式n:语句语句n;break;default:语句语句n+1;说明如下说明如下:(1)switch后面括号内得表达式后面括号内得表达式,可以就是整型或字符型表达可以就是整型或字符型表达式。式。(2)当该表达式得值与某一当该表达式得值与某一“case”后面得常量表达式得值后面得常量表达式得值相等时相等时,就执行该就执行该“cas
14、e”后面得语句后面得语句,然后遇到然后遇到break语句退语句退出出switch语句。若表达式得值与所有语句。若表达式得值与所有case后得常量表达式得后得常量表达式得值都不相同值都不相同,则执行则执行default后面得语句后面得语句,然后退出然后退出switch结构。结构。(3)每一个每一个case常量表达式得值必须不同否则会出现自相矛常量表达式得值必须不同否则会出现自相矛盾得现象。盾得现象。(4)case语句与语句与default语句得出现次序对执行过程没有影响。语句得出现次序对执行过程没有影响。(5)每个每个case语句后面可以有语句后面可以有“break”,也可以没有。有也可以没有。有break语句语句,执行到执行到break则退出则退出switch结构结构,若没有若没有,则会顺次则会顺次执行后面得语句执行后面得语句,直到遇到直到遇到break或结束。或结束。(6)每一个每一个case语句后面可以带一个语句语句后面可以带一个语句,也可以带多个语句也可以带多个语句,还可以不带。语句可以用花括号括起还可以不带。语句可以用花括号括起,也可以不括。也可以不括。(7)多个多个case可以共用一组执行语句。可以共用一组执行语句。