游戏图标-旺旺登陆不上

键盘过滤驱动
2023年4月5日发(作者:ios12描述文件)

《嵌入式系统设计》

实验报告

(2011-2012学年第2学期)

实验三键盘及LED驱动实验—C语言实现方法

一、实验目的

1.学习键盘及LED驱动原理。

2.掌握ZLG7289芯片的使用方法。

二、实验内容

通过ZLG7289芯片驱动17键的键盘和8个共阴极LED,将按键值在LED上

显示出来。

三、预备知识

1.掌握在ARMSDT2.5或ADS1.2集成开发环境中编写和调试程序的基本过程。

2.了解ARM应用程序的框架结构。

3.了解µC/OS-II多任务的原理。

四、实验设备及工具

硬件:ARM嵌入式开发平台、用于ARM7TDMI的JTAG仿真器、PC机

Pentium100以上。

软件:PC机操作系统win98、Win2000或WinXP、ARMSDT2.51或ADS1.2

集成开发环境、仿真器驱动程序、超级终端通讯程序

五、实验原理

ZLG7289A是一片具有串行接口的,可同时驱动8位共阴式数码管(或64只

独立LED)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,

单片即可完成LED显示﹑键盘接口的全部功能。

ZLG7289A内部含有译码器,可直接接受BCD码或16进制码,并同时具有

2种译码方式。此外,还具有多种控制指令,如消隐﹑闪烁﹑左移﹑右移﹑段寻

址等。

ZLG7289A具有片选信号可方便地实现多于8位的显示或多于64键的键盘接

口。其特点如下:

a.串行接口无需外围元件可直接驱动LED。

b.各位独立控制译码/不译码及消隐和闪烁属性。

c.(循环)左移/(循环)右移指令。

d.具有段寻址指令方便控制独立LED。

e.键盘控制器内含去抖动电路。

表2-5引脚说明

引脚名称说明

1,2VDD正电源

3,5NC悬空

4VSS接地

6/CS

片选输入端,此引脚为低电平时,可向芯片发送指令及

读取键盘数据

7CLK

同步时钟输入端,向芯片发送数据及读取键盘数据时,

此引脚电平上升沿表示数据有效

8DATA

串行数据输入/输出端,当芯片接收指令时此引脚为输入

端,当读取键盘数据时此引脚在读指令最后一个时钟的

下降沿变为输出端

9/KEY

按键有效输出端,平时为高电平,当检测到有效按键时,

引脚变为低电平

10-16SG-SA段g—段a驱动输出

17DP小数点驱动输出

18-25DIG0-DIG7数字0—数字7驱动输出

26OSC2振荡器输出端

27OSC1振荡器输入端

28/RESET复位端

ZLG7289A的控制指令分为二大类——纯指令和带有数据的指令:

1.纯指令

(1)复位(清除)指令,如表2-6所示:

表2-6复位指令格式

D7D6D5D4D3D2D1D0

10100100

当ZLG7289A收到该指令后,将所有的显示清除,所有设置的字符消隐、

闪烁等属性也被一起清除。执行该指令后,芯片所处的状态与系统上电后所处的

状态一样。

(2)测试指令,如表2-7所示:

表2-7测试指令格式

D7D6D5D4D3D2D1D0

10111111

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

(3)左移指令,如表2-8所示:

表2-8左移指令格式

D7D6D5D4D3D2D1D0

10100001

使所有的显示自右向左(从第1位向第8位)移动一位(包括处于消隐状态的显

示位),但对各位所设置的消隐及闪烁属性不变。移动后,最右边一位为空(无

显示)。例如,原显示为

12345678

其中第2位„2‟和第4位„4‟为闪烁显示,执行了左移指令后,显示变为

2345678

第2位„3‟和第4位„5‟为闪烁显示。

(4)右移指令,如表2-9所示:

表2-9右移指令格式

D7D6D5D4D3D2D1D0

10100000

与左移指令类似,但所做移动为自左向右(从第8位向第1位)移动,移动

后,最左边一位为空。

(5)循环左移指令,如表2-10所示:

表2-10循环左移指令格式

D7D6D5D4D3D2D1D0

10100011

与左移指令类似,不同之处在于移动后原最左边一位(第8位)的内容显示

于最右位(第1位)。在上例中执行完循环左移指令后的显示为

23456781

第2位„3‟和第4位„5‟为闪烁显示。

(6)循环右移指令,如表2-11所示:

表2-11循环右移指令格式

D7D6D5D4D3D2D1D0

10100010

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

2.带有数据的指令

(1)下载数据且按方式0译码,其指令与数据格式如表2-12所示:

表2-12下载数据具按方式0译码的指令与数据格式

D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0

10000a2a1a0DPXXXd3d2d1d0

其中X表示无影响。

命令由二个字节组成,前半部分为指令,其中a2,a1,a0为位地址,具

体分配如表2-13所示:

表2-13位地址

a2a1a0

显示

0001

0012

0103

0114

1005

1016

1107

1118

d0——d3为数据,收到此指令时,ZLG7289A按以下规则(译码方式0)进行

译码,如表2-14所示:

表2-14译码方式0

d0——d3(十六

进制)

d3d2d1d07段显示

00H00000

01H00011

02H00102

03H00113

04H01004

05H01015

06H01106

07H01117

08H10008

09H10019

0AH1010-

0BH1011E

0CH1100H

0DH1101L

0EH1110P

0FH1111空(无显示)

小数点的显示由DP位控制,DP=1时,小数点显示,DP=0,时小数点不显示。

(2)下载数据且按方式1译码,其指令与数据格式如表2-15所示:

表2-15下载数据且按方式1译码的其指令与数据格式

D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0

11001a2a1a0DPXXXd3d2d1d0

其中X表示无影响

此指令与上一条指令基本相同,所不同的是译码方式,该指令的译码按表2-16

进行:

表2-16译码方式1

d0——d3(十六

进制)

d3d2d1d07段显示

00H00000

01H00011

02H00102

03H00113

04H01004

05H01015

06H01106

07H01117

08H10008

09H10019

0AH1010A

0BH1011B

0CH1100C

0DH1101D

0EH1110E

0FH1111F

(3)下载数据但不译码,其指令与数据格式如表2-17所示:

表2-17下载数据但不译码的指令与数据格式

D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0

10010a2a1a0DPABCDEFG

其中,a2,a1,a0为位地址(参见“下载数据且译码”指令),A-G和DP

为显示数据,分别对应7段LED数码管的各段。数码管各段的定义如表2-18所

示。当相应的数据位为„1‟时,该段点亮,否则不亮。

(4)闪烁控制,如表2-18所示:

表2-18闪烁控制指令格式

D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0

10001000d8d7d6d5d4d3d2d1

此命令控制各个数码管的消隐属性,d1——d8分别对应数码管1——8,0=

闪烁,1=不闪烁。开机后,缺省的状态为各位均不闪烁。

(5)消隐控制,如表2-19所示:

表2-19消稳控制指令格式

D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0

10011000d8d7d6d5d4d3d2d1

此命令控制各个数码管的消隐属性。d1——d8分别对应数码管1——8,1=

显示,0=消隐。当某一位被赋予了消隐属性后,ZLG7289A在扫描时将跳过该

位,因此在这种情况下无论对该位写入何值,均不会被显示,但写入的值将被保

留,在将该位重新设为显示状态后,最后一次写入的数据将被显示出来。当无需

用到全部8个数码管显示的时候。将不用的位设为消隐属性,可以提高显示的亮

度。

注意:

至少应有一位保持显示状态,如果消隐控制指令中d1——d8全部为0,该

指令将不被接受,ZLG7289A保持原来的消隐状态不变。

(6)段点亮指令,如表2-20所示:

表2-20段点亮指令格式

D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0

11100000XXd5d4d3d2d1d0

此为段寻址指令,作用为点亮数码管中某一指定的段,或LED矩阵中某一

指定的LED。指令中,X=无影响;d0——d5段,地址范围从00H——3FH,具

体分配为:

第1个数码管的G段地址为00H,F段为01H….…A段为06H,小数点

DP为07H,第2个数码管的G段为08H,F段为09H,……,依此类推直至第8

个数码管的小数点DP地址为3FH。

(7)段关闭指令,如表2-21所示:

表2-21段关闭指令格式

D7D6D5D4D3D2D1

D

0

D7D6D5D4D3D2

D

1

D0

11000000XXd5d4d3d2d1d0

段寻址命令,作用为关闭(熄灭)数码管中的某一段,指令结构与„段点亮‟

指令相同。

(8)读键盘数据指令,如表2-22所示:

表2-22读键盘数据指令格式

D7D6D5D4D3D2D1D0D7D6D5D4D3D2D1D0

00010101d7d6d5d4d3d2d1d0

该指令从ZLG7289A读出当前的按键代码。与其它指令不同,此命令的前

一个字节0001010B为微控制器传送到ZLG7289A的指令,而后一个字节

d0——d7则为ZLG7289A返回的按键代码,其范围是0——3FH(无键按下时为

0xFF)。

此指令的前半段,ZLG7289A的DATA引脚处于高阻输入状态,以接受来自微处

理器的指令;在指令的后半段,DATA引脚从输入状态转为输出状态,输出键盘

代码的值。故微处理器连接到DATA引脚的I/O口应有一从输出态到输入态的转

换过程。

当ZLG7289A检测到有效的按键时,KEY引脚从高电平变为低电平,并一直

保持到按键结束。在此期间,如果ZLG7289A接收到„读键盘数据指令‟,则输出

当前按键的键盘代码;如果在收到„读键盘指令‟时没有有效按键,ZLG7289A将

输出FFH(11111111B)。

3.串行接口:

ZLG7289A采用串行方式与微处理器通讯,串行数据从DATA引脚送入芯片,

并由CLK端同步。当片选信号变为低电平后,DATA引脚上的数据在CLK引脚

的上升沿被写入ZLG7289A的缓冲寄存器.

ZLG7289与ARM的连接方法如图2-8所示:

图2-8ZLG7289与ARM的连接

ZLG7289的CLK与DIO与ARM的同步串口连接;KEY键与外部中断4相连接;

WriteSDIO(data)//向同步串口发送数据(Uhal.h)

ReadSDIO()//从同步串口读取数据(Uhal.h)

CS由宏ZLG7289_ENABLE()、ZLG7289_DISABLE()控制(ZLG7289.h)

六、实验步骤

1.新建工程,将“Exp3键盘及LED驱动实验”中的文件添加到工程。

图2-9新建工程命名为Exp3

2.定义ZLG7289寄存器(ZLG7289.h)

#defineZLG7289_CS(0x20)//GPB5

#defineZLG7289_KEY(0x10)//GPG4

#defineZLG7289_ENABLE()do{ZLG7289SIOBand=rSBRDR;ZLG7289SIOCtrl=rSIOCON;

rSIOCON=0x31;rSBRDR=0xff;rPDATB&=(~ZLG7289_CS);}while(0)

#defineZLG7289_DISABLE()do{rPDATB|=ZLG7289_CS;rSBRDR=ZLG7289SIOBand;

rSIOCON=ZLG7289SIOCtrl;}while(0)

3.编写ZLG7289驱动函数(ZLG7289.c),ZLG7289复位与读取键值的流程

分别如图2-10、2-11所示。

开启zlg7289

ZLG7289_ENABLE()

发送复位命令

WriteSDIO(ZLG7289_CM

D_RST)

关闭zlg7289

ZLG7289_DISABLE()

延时

开启zlg7289

ZLG7289_ENABLE()

发送读取键值命令

WriteSDIO(ZLG7289_CM

D_RDKEY)

关闭zlg7289

ZLG7289_DISABLE()

读取键值

ReadSDIO()

图2-10ZLG7289复位图2-11从ZLG7289读取键值

4.定义键盘映射表:(Keyboard16.c)

unsignedcharKeyBoard_Map[]=

{4,8,11,0,0,0,0,0,5,9,12,15,1,0,0,0,6,10,13,16,2,3,0,0,7,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0

,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

//64键值映射表,通过查找键盘映射表来确定键盘扫描码对应的按键值。

5.定义键值读取函数,流程图如图2-12所示。(Keyboard16.c)

图2-12键值读取函数

6.编写主函数,将按键值在数码管上显示,流程图如图2-13所示。

开始

是否有键按下?

(rPDATG&ZLG7289_KEY)==

1

从zlg7289读取键值

按键值有效?

<=64?

通过键盘映射表得到按键值

延时

图2-13主函数流程图

8、实验结果:

按照原始对应表得到结果:

图2-14实验结果

实验心得:实验中,我学知道了键盘和LED的驱动原理,知道如何通过键盘把

数值在LED上显示出来以及ZLG7289的工作原理和使用方法,了解了ARM程

开发版初始化

zlg7289复位

键值读取

延时

开启zlg7289

发送个位数

延时

键值〉9?

发送十位数

显示十、个位只显示个位

关闭zlg7289

序的框架结构。

更多推荐

键盘过滤驱动