游戏图标-旺旺登陆不上
![键盘过滤驱动](/uploads/image/0493.jpg)
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
是
否
序的框架结构。
更多推荐
键盘过滤驱动
发布评论