教学科研

教学科研

当前位置: 学院首页 >> 教学科研 >> 正文

单片机实验指导——查询式键盘实验..

发布日期:2012-09-05    作者:     来源:     点击:

查询式键盘实验

一、实验目的

1、掌握键盘和显示器的接口方法和编程方法

2、掌握键盘和八段码显示器的工作原理

3、静态显示的原理和相关程序的编写

二、实验说明

本实验提供了8个按钮的小键盘,可接到单片机的并行口,如果有键按下,则相应输出为低,否则输出为高。单片机通过识别,判断按下什么键。有键按下后,要有一定的延时,防止由于键盘抖动而引起误操作。

三、实验步骤及内容

1、用一根扁平数据插头线连接查询式键盘实验模块与八位逻辑电平显示模块,无键按下时,键盘输出全为“1”发光二极管全部熄灭,有键按下,对应发光二极管点亮。此种电路的程序要判断是否有2个或2个以上的键盘同时按下,以免键盘分析错误。阵列式键盘的编程同样也有这样的问题要注意。

2、一根扁平8线插头连接查询式键盘实验模块与扫描显示实验模块。无键按下时,LED数码显示八段全部熄灭,有键按下时,则对应LED段点亮。

3、使用静态串行显示模块显示键值。单片机最小应用系统1的 P1口接查询式键盘输出口。P3.6接静态数码显示DIN,P3.7接CLK。

4、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。

5、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加 查询KEY.ASM源程序,进行编译,直到编译无误。

6、进行软件设置,选择硬件仿真,选择串行口,设置波特率为38400。

7、打开模块电源和总电源,点击开始调试按钮,点击RUN按钮运行程序。在键盘上按下某个键,观察数显是否与按键值一致,键值从左至右为0~7。

五、流程图及源程序

2、源程序

        DBUF   EQU   30H

TEMP   EQU   40H

DIN    BIT   P3.6

CLK    BIT   P3.7

ORG    0000H

LJMP   START

ORG    0030H

START:MOV    30H,#16

MAIN:   ACALL  DISP

ACALL  KEY0

        AJMP   MAIN

KEY:   MOV    P1,#0FFH                 ;输入前,锁存器置“1”

        MOV    A,P1                     ;读取键盘状况

        CJNE   A, #0FFH,K00            ;有键按下

        AJMP   KEY                       ;无键按下

K00:  ACALL  DELAY                     ;延时去抖动

       MOV    A,P1

       CJNE   A,#0FFH,K01             ;确有键按下

       AJMP   KEY

K01:  MOV    R3,  #8                  ;8个键

       MOV    R2,#0                    ;键码

       MOV    B,A                      ;暂存键值

       MOV    DPTR,#K0TAB

K02:  MOV    A,R2

       MOVC   A,@A+DPTR                ;从键值表中取键值

       CJNE   A,B,K04                 ;键值比较

K03:  MOV    A,P1                     ;相等

       CJNE   A #0FFH,K03              ;等键释放

       ACALL  DELAY                     ;延时去抖动

       MOV    A,R2                     ;得键码

       RET

K04:  INC    R2                ;不相等,到继续访问键值表

       DJNZ   R3,K02

       MOV    A,#0FFH          ;键值不在键值中,即多键同时按下

       AJMP   KEY

K0TAB:DB 0FEH,0FDH,0FBH, 0F7H        ;键值表

       DB 0EFH,0DFH,0BFH, 07FH

DISP:  MOV   DBUF,A

       MOV   DBUF+1,#16

        MOV   DBUF+2,#16

        MOV   DBUF+3,#16

        MOV   DBUF+4,#16

        MOV   R0,  #DBUF

        MOV   R1,  #TEMP

        MOV   R2,  #5

 DP10:  MOV   DPTR,#SEGTAB

        MOV   A,   @R0

        MOVC  A,   @A+DPTR

        MOV   @R1, A

        INC   R0

        INC   R1

        DJNZ  R2,  DP10

        MOV   R0,  #TEMP

        MOV   R1,  #5

 DP12:  MOV   R2,  #8

        MOV   A,   @R0

 DP13:  RLC   A

        MOV   DIN,C

        CLR   CLK 

        SETB  CLK 

        DJNZ  R2,  DP13

        INC   R0

        DJNZ  R1,  DP12

        RET

SEGTAB: DB     3FH,06H,5BH,4FH,66H,6DH    ;0,1,2,3,4,5

        DB     7DH,07H,7FH,6FH,77H,7CH    ;6,7,8,9,A,b

        DB     58H, 5EH,79H,71H,00H,40H   ;C,d,E,F, ,-

DELAY:  MOV    R4, #02H

AA1:    MOV    R5,#0F8H

AA:     DJNZ   R5,AA

        DJNZ   R4,AA1

        RET

END

五、思考题

1、程序如何确保每按一次键,只处理一次。