键盘接口实验实验报告总结及程序

实验六 键盘接口实验

姓名 专业 通信工程 学号 成绩

一、 实验目的

掌握 Keil C51 软件与 Protues 软件联合仿真调试的方法;

掌握单片机的键盘接口电路;

掌握单片机键盘扫描原理;

掌握键盘的去抖原理及处理方法。

二、 实验仪器与设备

微机 1 台 C51 集成开发环境 3 。Proteus 仿真软件三、 实验内容

用 Proteus 设计一矩阵键盘接口电路。

 要求利用 P1口接一 4*4 矩阵键盘。串行口通过一 74LS164接一共阴极数码管。参考电路见后面。

2. 用线反转法编写矩阵键盘识别程序,要求采用中断方式(列线通过

4 输

入与门 74LS20接 /INT0 ),无按键按下时,数码管循环画“ 8”;有按键按下时产生中断并将按键的键值 0~F 通过串行口输出,在数码管上显示 3 秒钟后返回;返回后,数码管继续循环画“ 8”。

将 P1 口矩阵键盘改为 8 个独立按键(用中断方式设计),键盘通过 74LS30 (8 输入与非门)和 74LS04(六反相器)与 /INT0 相连,重新编写识别和显示程序。

四、 实验原理

矩阵键盘识别一般应包括以下内容:

判别有无键按下。

键盘扫描取得闭合键的行、列号。

用计算法火或查表法得到键值。

判断闭合键是否释放,如果没释放则继续等待。

将闭合键的键值保存,同时转去执行该闭合键的功能。五、 实验步骤

用 Proteus 设计键盘接口电路;

2. 在 Keil C51 中编写键盘识别程序,编译通过后,与 Proteus 联合调试;

按动任意键,观察键值是否能正确显示。六、 电路设计及调试、程序

程序设计: 矩阵键盘

#include<>

#define uchar unsigned char

#define uint unsigned int

uchar code

table1[]={0x00,0x01,0x21,0x61,0x65,0x6d,0x7d,0x7f}; uchar code

key_table[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0x bb,0x7b,0xe7,0xd7,0xb7,0x77};

R4

S6

S5

S4

S3

1nF

19

XTAL1

P0.0/AD0

39

S2

X1

38

S1

P0.1/AD1

U1

S0

CRYSTAL

P0.2/AD2

37

36

9

SRG8

R3

18

XTAL2

P0.3/AD3

R

35

P0.4/AD4

C1

34

8

P0.5/AD5

C1/->

22pF

9

P0.6/AD6

32

RST

P0.7/AD7

1

3

1uF

P2.0/A8

21

2

&

1D

R17

22

P2.1/A9

23

4

S0

P2.2/A10

29

24

10k

PSEN

P2.3/A11

S1

30

25

5

ALE

P2.4/A12

31

26

EA

P2.5/A13

S2

27

6

P2.6/A14

28

P2.7/A15

10

S3

P1.0 1

P1.0

P3.0/RXD

10

P1.1 2

11

11

S4

P1.1

P3.1/TXD

P1.2 3

12

P1.2

P3.2/INT0

P1.3

4

13

12

S5

P1.3

P3.3/INT1

P1.4 5

14

P1.4

P3.4/T0

P1.5 6

15

13

S6

P1.5

P3.5/T1

P1.6

7

16

P1.6

P3.6/WR

P1.7 8

17

74LS164

P1.7

P3.7/RD

P1.0

P1.1

P1.2

P1.3

P1.4

P1.5

P1.6

P1.7

1 U3:A

2

6

4

5

74LS21

R4

1nF

19

XTAL1

P0.0/AD0

39

X1

38

P0.1/AD1

U1

CRYSTAL

P0.2/AD2

37

36

9

SRG8

R3

18

XTAL2

P0.3/AD3

R

35

P0.4/AD4

34

8

C1

P0.5/AD5

C1/->

33

P0.6/AD6

22pF

9

32

RST

P0.7/AD7

1

3

&

1uF

P2.0/A8

21

2

1D

R17

22

P2.1/A9

23

4

S0

P2.2/A10

R1

R2

R5

R6

R7

R8

R9

R10

29 PSEN

24

10k

P2.3/A11

5

S1

10k

10k

10k

10k

10k

10k

10k

10k

30

ALE

P2.4/A12

25

31

26

EA

P2.5/A13

27

6

S2

P2.6/A14

28

P2.7/A15

S3

10

P1.0

1

P1.0

P3.0/RXD

10

P1.1

2

11

11

S4

P1.1

P3.1/TXD

P1.2

3

12

P1.2

P3.2/INT0

P1.3

4

13

12

S5

P1.3

P3.3/INT1

P1.4

5

14

P1.4

P3.4/T0

P1.5

6

15

13

S6

P1.5

P3.5/T1

P1.6

7

16

P1.6

P3.6/WR

P1.7

8

17

74LS164

P1.7

P3.7/RD

U2:A

74LS04

1

U3

2

3

4

8

5

6

11

12

74LS30

验中在做矩阵键盘实验时, 会出现进入中断一次后跳出来再按键不会再进入中断显示的情况原因是:

没有在中断函数最后令 P1=0xf0,在边沿触发方式下退出中断程序时P1=0xf,外部中断 0 为低电平,不会有下降产生, 仅执行一次中断后再不会有中断产生,即使有按键按下。

实验中出现了进入中断跳不出来的情况,原因是:

给窗口送键值显示后没加 while(!TI); TI=0; 语句



S6

S5

S4

S3

S2

S1

S0

总结:实验前应画出程序流程图认真分析,有助于程序的编写。在矩阵键盘的实验中,若选择电平触发,不在中断后令 P1=0xf0,则跳出中断后检测到列线全为零,又产生中断,进入中断后扫描按键发现无按键按下又退出,列还是全为零又进入中断,如此反复,效率很低。