加载中...

实验十 7279阵列式键盘实验

实验十 7279阵列式键盘实验

实验目的

1、掌握八段数码管硬件线路原理,掌握用HD7279A芯片实现显示的编程方法。
2、熟悉键盘的工作原理,掌握用HD7279A芯片实现键盘扫描程序设计方法。

实验内容

HD7279A是一片具有串行接口的,可同时驱动8位共阴极数码管(或64只独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,HD7279A 内部含有译码器,可直接接受16进制码,HD7279A还同时具有2种译码方式,HD7279A还具有多种控制指令,如消隐、闪烁、左移、右移、段寻址等。
HD7279A的指令结构有三种类型:
1)不带数据的纯指令,指令的宽度为8个BIT,即微处理器需发送8个CLK脉冲;
2)带有数据的指令,宽度为16个BIT,即微处理器需发送16个CLK脉冲;
3)读取键盘数据指令,宽度为16个BIT,前8个为微处理器发送到HD7279的指令,后8个BIT为HD7279A返回的键盘代码。
本实验采用8位共阴极数码管,用查询方式判断。

引脚说明:

引脚 名称 说明
1,2 VDD 正电源
3,5 NC 无连接,必须悬空
4 VSS 接地
6 CS 片选输入端,此引脚为低电平时,可向芯片发送指令及读取键盘数据
7 CLK 同步时钟输入端,向芯片发送数据及读取键盘数据时,此引脚电平上升沿表示数据有效
8 DATA 串行数据输入/输出端,当芯片接收指令时,此引脚为输入端:当读取键盘数据时,此引脚在‘读’指令最后一个时钟的下降沿变为输出端
9 KEY 按键有效输出端,平时为高电平,当检测到有效按键时,此引脚变为低电平
10-16 SG-SA 段g——段a驱动输出
17 DP 小数点驱动输出
18-25 DIG0-DIG7 数字0——数字7驱动输出
26 CLKO 振荡输出端
27 RS RC振荡器连接端
28 RESET 复位端

控制指令:
HD7279A的控制指令分为二大类——纯指令和带有数据的指令。
纯指令
1.复位(清除)指令A4H

D7 D6 D5 D4 D3 D2 D1 D0
1 0 1 0 0 1 0 0

当HD7279A收到该指令后,将所有的显示清除,所有设置的字符消隐、闪烁等属性也被一起清除。执行该指令后,芯片所处的状态与系统上电后所处的状态一样。

2.测试指令BFH

D7 D6 D5 D4 D3 D2 D1 D0
1 0 1 1 1 1 1 1

该指令使所有的LED全部点亮,并处于闪烁状态,主要用于测试。

3.左移指令A1H

D7 D6 D5 D4 D3 D2 D1 D0
1 0 1 0 0 0 0 1

使所有的显示自右向左(从第1位向第8位)移动一位(包括处于消隐状态的显示位),但对各位所设置的消隐及闪烁属性不变。移位后,最右边一位为空(无显示)。例如,原显示为

4 2 5 2 L P 3 9

其中第2位‘3’和第4位‘L’为闪烁显示,执行了左移指令后,显示变为
2 5 2 L P 3 9

第二位‘9’和第四位‘P’为闪烁显示。

4.右移指令A0H

D7 D6 D5 D4 D3 D2 D1 D0
1 0 1 0 0 0 0 0

与左移指令类似,但所做移动为自左向右(从第8位向第1位)移动,移动后,最左边一位为空。

5.循环左移指令A3H

D7 D6 D5 D4 D3 D2 D1 D0
1 0 1 0 0 0 1 1

与左移指令类似,不同之处在于移动后原最左边一位(第8位)的内容显示于最右位(第1位)。在上例中,执行完循环左移指令后的显示为

2 5 2 L P 3 9 4

第二位‘9’和第四位‘P’为闪烁显示。

6.循环右移指令A2H

D7 D6 D5 D4 D3 D2 D1 D0
1 0 1 0 0 0 1 0

在循环左移指令类似,但移动方向相反。

实验步骤

1、把7279阵列式键盘的J9四只短路帽打在上方,J10打在VCC处,用8P排线将JD7和八位动态数码显示的JD11相连,JD8和JD12相连。
2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。
3、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加“7279 KEY.asm”源程序,进行编译,直到编译无误。
4、全速运行程序,然后等待按键输入,并在有按键按下后显示相应的键号,前一个键号左移。
5、也可以把源程序编译成可执行文件,把可执行文件用ISP烧录器烧录到89S52/89S51芯片中运行。(ISP烧录器的使用查看附录二)

源程序

/****************************************************
实验步骤
1、把7279阵列式键盘的J9四只短路帽打在上方,J10打在VCC处,
用8P排线将JD7和八位动态数码显示的JD11相连,JD8和JD12相连。 
2、用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,
请注意仿真器的方向:缺口朝上。
3、打开Keil uVision2仿真软件,首先打开本实验的项目文件"7279KEY.uv2",进行编译,直到编译无误。
4、全速运行程序,然后等待按键输入,并在有按键按下后显示相应的键号,前一个键号左移。
5、也可以把源程序编译成可执行文件,用ISP烧录器烧录到89S52/89S51芯片中运行。
(ISP烧录器的使用查看附录二)

//****************************************************/

  BIT_COUNT   DATA 07FH
  TIMER       DATA 07EH
  TIMER1      DATA 07DH
  TEN         DATA 07CH
  DATA_IN     DATA 020H
  DATA_OUT    DATA 021H

        
  KEY   BIT P1.3             ;7279的KEY连接于P1.3
  CLK   BIT P1.6             ;7279的CLK连接于P1.6
  DAT   BIT P1.7             ;7279的DATA连接于P1.7
  CS    BIT P2.7             ;7279的CS连接于P2.7

  ORG    000H
  JMP    START
  ORG    100H

START:       MOV  SP,#2FH             ;定义堆栈
             MOV  P1,#11011011B       ;I/O口初始化
             MOV  TIMER,#50

START_DELAY: MOV  TIMER1,#255
START_DELAY1:DJNZ TIMER1,START_DELAY1
             DJNZ TIMER,START_DELAY
             MOV  DATA_OUT,#10100100B ;发复位指令
             CALL SEND
             SETB CS                  ;复位CS为高电平
 
MAIN:        JB   KEY,MAIN            ;检测是否有键按下
             MOV  DATA_OUT,#00010101B ;有键按下,发送读键盘指令
             CALL SEND                ;调用发送子程序
             CALL RECEIVE             ;调用接受子程序
             SETB CS
             MOV  B,#10
             MOV  A,DATA_IN
             DIV  AB
             MOV  TEN,A
             MOV  DATA_OUT,#10100001B 
             CALL SEND
             MOV  DATA_OUT,#10100001B
             CALL SEND
             MOV  DATA_OUT,#10000001B
             CALL SEND
             MOV  DATA_OUT,TEN
             CALL SEND
             MOV  DATA_OUT,#10000000B
             CALL SEND
             MOV  DATA_OUT,B
             CALL SEND
             SETB CS
WAIT:        JNB  KEY,WAIT
             JMP  MAIN
;*******************************************
;             发送子程序
;*******************************************
SEND:       MOV   BIT_COUNT,#8
            CLR   CS
            CALL  LONG_DELAY

SEND_LOOP:  MOV   C,DATA_OUT.7
            MOV   DAT,C
            SETB  CLK
            MOV   A,DATA_OUT
            RL    A
            MOV   DATA_OUT,A
            CALL  SHORT_DELAY
            CLR   CLK
            CALL  SHORT_DELAY
            DJNZ  BIT_COUNT,SEND_LOOP
            CLR   DAT
            RET
;*******************************************
;             接收子程序
;*******************************************
RECEIVE:   MOV    BIT_COUNT,#8
           SETB   DAT
           CALL   LONG_DELAY
RECEIVE_LOOP: SETB CLK
           CALL   SHORT_DELAY
           MOV    A,DATA_IN
           RL     A
           MOV    DATA_IN,A
           MOV    C,DAT
           MOV    DATA_IN.0,C
           CLR    CLK
           CALL   SHORT_DELAY
           DJNZ   BIT_COUNT,RECEIVE_LOOP
           CLR    DAT
           RET
;*******************************************
;            延时子程序
;*******************************************
LONG_DELAY: MOV   TIMER,#80
DELAY_LOOP: DJNZ  TIMER,DELAY_LOOP
            RET
SHORT_DELAY:MOV   TIMER,#6
SHORT_LP:   DJNZ  TIMER,SHORT_LP
            RET
            END

电路图

posted @ 2023-05-16 22:02  bujidao1128  阅读(616)  评论(0)    收藏  举报