Download presentation
Presentation is loading. Please wait.
Published byYulia Budiono Modified 6年之前
1
第十章 人机交互接口 本章学习目标 掌握键盘接口技术 掌握数码、液晶显示技术 了解数码管显示驱动和键盘扫描控制专用芯片
2
人机交互接口是指人与计算机之间建立联系、交换信息的输入/输出设备的接口,这些设备包括键盘、显示器、打印机、鼠标器等。
本章主要介绍键盘输入接口设计、显示原理及接口技术。
3
§10.1 键盘接口技术 非编码键盘和编码键盘 非编码键盘:直接利用口线连接按键开关或开关型传感器来实现,通过程序判断口线的电平就能够确定输入的键值。 优缺点:设计简单,使用方便,且因为具有共用端,容易直接同开关电路或开关型传感器连接。但是这种方式的口线利用率较低,受单片机口线数量的限制,其键盘规模无法做大。
4
编码键盘:将口线与按键开关连接成矩阵电路,通过软件扫描、识别I/O口上的编码,按编码规则识别输入键值。
优点:口线利用率高,键盘规模可以做得较大。 具体采用哪一种形式的键盘可以根据控制系统的 规模及用途决定。
5
简易键盘接口采用非编码形式,典型应用电路如图所示。
一、简易键盘接口的实现 简易键盘接口采用非编码形式,典型应用电路如图所示。 图10-1 简易键盘接口电路
6
键盘在使用中考虑到人员操作或机械特性在接触时产生的抖动问题,即按键开关在接通或断开瞬间并非完全可靠接触,而是存在一个抖动期,在此期间的电平变化波形如图所示。
图10-2 按键闭合时的电平变化波形
7
抖动期一般不超过10 ms。在口线电平抖动期间,单片机无法准确检测出口线电平的正确值,必须采取一定的措施进行鉴别。
8
示例代码如下: ORG 0000H LJMP MAIN ORG 0003H LJMP KRD ORG 0100H MAIN: MOV SP,#70H … ;其他初始化代码 MAINLOOP: ;主循环 … LJMP MAINLOOP
9
KRD:LCALL DEL20 ;调20 ms延时子程序
MOV A,P ;读P2口键值 JNB ACC.0,KPR0 ;判断P2.0~P2.7是否有键按下 JNB ACC.1,KPR1 JNB ACC.2,KPR2 JNB ACC.3,KPR3 JNB ACC.4,KPR4 JNB ACC.5,KPR5 JNB ACC.6,KPR6 JNB ACC.7,KPR7 RETI
10
KP01:CALL DELAY20 ;调20 ms延时子程序
KPR0: ;P2.0口线按键处理程序 MOV A,P ;读P2口键值 JNB ACC.0,KPR0 ;判断P2.0口线电平是否变高 KP01:CALL DELAY ;调20 ms延时子程序 JNB ACC.0,KP01 ;证实P2.0口线一直保持低电平 … ;按键处理程序。由低电平变为高电平认为按键按下 RETI KPR1: … ;P2.1口线按键处理程序 KPR7: … ;P2.7口线按键处理程序 DEL20:… ;20 ms延时子程序 RET END
11
二、矩阵键盘接口的实现 简易键盘电路中每一个按键占用一根I/O口线,口线利用率较低。 如果将口线按照行、列排成矩阵形式,则可在相同口线数量的条件下增大键盘的规模。
12
例如,可以将P2口的8根I/O线排列成4 × 4矩阵形式,连接16只按键。如图所示。
图 × 4矩阵式键盘电路
13
1、电路结构及设计思路 矩阵式键盘将P2口的8根I/O口线分成行、列线连接,图中P2.0~P2.3为行线,P2.4~P2.7为列线。16只按键分别跨接在对应的行、列线节点上。 如果单片机在行线对应的I/O口线上有数据输出,当有键按下时,行、列线短路,单片机在列线对应的I/O口线上的输入数据将由行线上的电平决定。
14
行线特定的4位数据输出和列线对应的4位数据输入可以组成一个8位的特征字,该特征字即为键值,代表了按下的键所在的位置。
15
2、键值产生的原理 1)扫描法产生键值 以行线作为扫描输出,以列线作为接收输入,依次将各个行线置为低电平,并在列线上逐次接收数据。
扫描完成后,如果发现接收到的某一列线有低电平,则表示该列线与行线连接的按键已经闭合。 在接收到低电平的那次扫描中,行线数据与列线数据的组合便是所期望的键值,由该键值可确定闭合键在矩阵连接中的连接位置。
16
2)线反转识别法产生键值 先将行线全部置为低电平,列线全部置为高电平,从列线对应的I/O口线接收数据,如果发现有口线变低,则证明该列线与闭合的按键连接。 将列线全部置为低电平,行线全部置为高电平,从行线对应的I/O口线接收数据,如果发现有口线变低,则证明该行线与闭合的按键连接。 对上述两次操作的结果所获得的两个8位数据进行综合分析,便可确定闭合的按键所在位置。
17
3、键盘识别原理 在进行键盘扫描产生键值之前,为避免无键按下的空扫描,浪费CPU执行时间,应该首先进行一次键盘识别,具体方法有两种。
18
1)硬件中断识别法 将矩阵式键盘电路的所有列线连接至“与”门电路的输入端,“与”门电路的输出端与单片机外部中断连接。 把全部行线置为低电平,全部列线置为高电平,当有键按下时列线上出现低电平,对应“与”门的输出电平出现由高向低的跳变,经引脚进入单片机产生中断,在中断服务程序中开始扫描键盘。
19
2)软件查询识别法 将全部行线置为低电平,全部列线置为高电平,定时从列线对应的I/O口线输入数据,如果判定接收的数据中有低电平存在,则说明有按键按下,开始执行键盘扫描程序。这种方法无需在矩阵键盘中连接“与”门电路,硬件电路简洁。 上述两种识别方法中,采用硬件中断识别方式 可以随时响应键盘动作,具有较强的实时性,而 采用软件查询方式则可以简化电路。具体实施应 根据实际要求设计。
20
4、按键操作的抖动处理 与简易键盘电路相同,矩阵键盘同样要考虑按键触点闭合或断开时存在的抖动期,一般在取回键值后进行5~10 ms的延时,判断原键值是否存在,以决定是否存在按键的误动作。
21
5、矩阵键盘处理程序 下面设计可供调用的键盘扫描子程序。程序可以读入4 × 4键盘状态,然后将键值送往内部数据存储器的RAM 30H~33H单元。 具体方法是,利用单片机P2口的P2.0~P2.3口线轮流向行扫描线送低电平,将每次扫描中由P2.4~P2.7返回的数据与当时行扫描送出的数据组合后作为键值送内部RAM的30H~33H单元,键值内容为8位,低4位中的“0”对应于行扫描输出线,高4位中的“0”对应于闭合按键连接的列线。
22
键盘扫描程序清单如下: KEY-SCAN: MOVR0,#30H;设置键值存储单元地址指针 MOV A,#0FEH ;设置行扫描初始状态
MOV P2,A;输出至行扫描线 MOV R1,A ;保存行扫描线状态 MOV A,P2 ;读回列线数据 AND A,#0F0H ;保留读回数据的高4位 ORL A,R1 ;组合键值 MOV @R0,A ;键值送存储单元 RET
23
§10.2 显示技术 一、数码LED显示技术 1、显示元件概述 主要显示元件:LED(发光二极管显示器)或LCD(液晶显示器)。
显示形式:笔画式和点阵式。 笔画式显示元件大多为LED数码管,用于显示数字或简单字母信息,适合于规模较小的单片机系统。 如果考虑到单片机系统功耗因素,也有笔画式LCD数码管可供选用,但在控制和连接上要稍微复杂一些。
24
本节内容主要介绍笔画式LED和点阵式LCD的应用。
显示大信息量或图形时,一般使用点阵式LCD显示器。这种显示器结构比较复杂,需要考虑灰度调节、高压背光的配合,电路连接及程序操作都比较繁琐。使用点阵式LCD显示器最好采用内置控制器的模块形式,在这种情况下,单片机与点阵式LCD的接口实际上变成了单片机与单片机之间的数据通信。 本节内容主要介绍笔画式LED和点阵式LCD的应用。
25
2、七段码LED显示器 LED数码管由8只LED发光二极管构成,8只LED发光二极管分别代表组成数码的笔画(称为段)和该位数码的小数点。由于显示的数字由7个显示段组合而成,所以也称为七段码。
26
LED七段数码管显示器的结构如图所示。 在七段数码管显示器中为简化电路引出线,通常将8只发光二极管的阴极或阳极连接在一起作为电路的公共端,由此便出现了共阴极或共阳极显示器的名称,实际使用时采用高电平或低电平驱动。 图10-4 LED七段数码管显示器的结构
27
注意 如图电路结构所示,对于七段数码管的驱动电流应加以限制,在保证不超过单片机或其他驱动芯片功耗的前提下维持正常的发光亮度。
28
七段码LED显示器可以采用静态显示和动态显示两种形式。
静态显示是指在显示时段内对组成字型的发光二极管保持恒定的导通或截止; 动态显示是指在显示时段内对组成字形的发光二极管实行间断或轮流(多字符显示)点亮。 其中前一种形式程序操作简单,CPU送出字形码 后可以不再管理。而后一种显示形式则可最大限度 地降低显示功耗,但是占用了CPU的执行程序时 间。
29
由单片机串行口与移位寄存器芯片CD4094组成的共阴极七段码LED静态显示接口电路如图所示。
1)静态显示接口 由单片机串行口与移位寄存器芯片CD4094组成的共阴极七段码LED静态显示接口电路如图所示。 图10-5 LED静态显示接口电路
30
电路说明 单片机工作在串口方式“0”状态,要显示的字形以七段码形式由单片机的RXD输出至CD4094的数据输入端D,每次输出1个字节,对应1位显示数字。 多位显示时需要输出多个字节的显示数据,同时也需要多个CD4094级联,即前级CD4094的数据输出端QS与后级CD4094的数据输入端D连接。
31
单片机的TXD与每个CD4094的时钟输入端CP连接,在串行数据输出过程中TXD发出移位脉冲,驱动数据依次逐位在CD4094芯片中移动。
当所有要显示的数据全部送出后,单片机可以将P1.0控制口线由低置高,通过CD4094的ST引脚控制,使所有送入CD4094的数据由串行转为并行输出,在LED数码管上显示出对应位的数字内容。
32
静态显示的主要特点:是占用CPU处理时间少,显示稳定、亮度高,使用口线少。但在使用中应注意串口数据传送的格式及字符排位顺序。
串行静态显示的位数主要由TXD、P1.0口线的带负载能力决定。
33
实际使用中也可不用P1.0,将CD4094的ST端引脚始终接高电平,进入CD4094的串行数据会自动转为并行输出。
这样做的缺点是在单片机送出显示数据的过程中LED数码管会显示乱码。但是数据传送过程很短,在不频繁更换显示数据的场合还是可以接受的。
34
应用实践证明,CD4094的输出与LED数码管之间可以不加限流电阻。当CD4094输出电流过大时会引起输出电压下降,从而自动限制了流过LED的电流。
另外,如果STC15F2K60S2单片机的串行口1在系统中另有用途,则可以其串口2输出数据。
35
2)动态显示接口 采用多位LED数码管显示时,可以逐位点亮数码管,虽然在显示过程中有些数码管有熄灭时间,但是利用人眼的视觉暂留效应和LED发光二极管的余辉,只要点亮与熄灭时间分配适当,仍能够感觉到所有数码管始终处于显示状态。
36
动态显示形式时CPU需要经常执行相关程序进行显示刷新,这样可能占用较多的CPU执行时间,对需要快速运算或实时控制的用途会增加编程难度。但是,在实际编程中可以融入一些编程技巧减轻CPU刷新显示的负担。
例如,将逐位显示程序编入经常调用的延时子程序中,就可以在执行正常程序的过程中满足动态显示的需求。
37
动态显示可以提高单片机显示口线的利用率,简化硬件电路的接线。LED动态显示接口的具体电路如图所示。
38
设需要显示的4位字形七段码存放在单片机内部RAM的60H开始的4个单元中,动态扫描显示子程序如下:
39
SDIS: MOV R0,#60H ;设显示数据存储区指针
MOV DPTR,# DSEG ;设置七段码表首地址 MOV R7,#0FEH ;设置显示位指针,指向最右边一位 MOV A,R7 ;显示指针内容送累加器 LD0: MOV P2,A ;选通显示位 RL A ;显示指向下一位 MOV R7,A ;存显示指针内容 MOV R ;取显示内容 MOVC ;查显示内容的字形码 MOV P0,A ;送出显示字形码 CALL DEL ;调延时子程序 INC R ;指向下一显示存储单元 MOV A,R ;取显示指针内容 JB ACC.4,LD ;未扫描完4位循环 RET
40
请读者自行补充完整其中的延时子程序和对应 的C语言程序。
;下面是0~9,A~F共阳极字形七段码 DSEG:DB C0H,F9H,A4H,B0H,99H,92H, 82H,F8H80H; DSEG2:DB 90H,88H,83H, C6H,A1H,86H,8EH 请读者自行补充完整其中的延时子程序和对应 的C语言程序。
41
二、液晶显示技术 液晶显示器件(简称LCD显示器)由于具有显示信息丰富、功耗低、体积小、无辐射等优点,得到了广泛的应用。 LCD显示器有笔画分段、分割显示、字符点阵显示和图形点阵LCD显示形式之分,对于比较丰富的显示内容通常采用图形点阵显示形式,但是这种显示形式的电路结构及控制方式比较复杂。
42
为了便于使用,LCD图形点阵显示器通常以LCM(液晶显示模块)形式出现,模块中封装了显示器、驱动电路、控制电路及背光调节电路等。
本节以128×64点阵的汉字图形型液晶显示模块OCMJ4X8C为例介绍图形点阵LCD显示接口的应用。
43
1、OCMJ4X8C液晶显示模块概述 OCMJ4X8C的液晶显示屏为128×64点阵,可显示4行、每行8个汉字。OCMJ4X8C可实现汉字、ASCII码、点阵图形、自造字体的同屏显示。 该模块具有2MB的中文字形CGROM,其中含有8192个16×16点阵中文字库; 具有16KB的16×8点阵的ASCII字符库; 提供了一个64×256点阵的GDRAM绘图区域; 提供了4组16×16点阵的造字空间。
44
OCMJ4X8C模块的工作电压为4.5~5.5V,具有睡眠、正常及低功耗工作模式,可满足系统各种工作电压及便携式仪器低功耗的要求。
为了便于和多种微处理器、单片机接口,模块提供了8位并行、2线串行、3线串行三种接口方式。 OCMJ4X8C的2线串行接口方式符合SPI时序标准,大大简化了液晶显示模块与单片机之间的接口设计。 OCMJ4X8C模块的工作电压为4.5~5.5V,具有睡眠、正常及低功耗工作模式,可满足系统各种工作电压及便携式仪器低功耗的要求。
45
OCMJ4X8C模块引脚及对应说明如表所示。
2、模块引脚 OCMJ4X8C模块引脚及对应说明如表所示。 引脚 名称 方向 说明 1 VSS - GND(0V) 11 DB4 I/O 数据4 2 VDD 逻辑电源 (+5v) 12 DB5 数据5 3 VO LCD电源(悬空) 13 DB6 数据6 4 RS(CS) H/L H: 数据 L: 指令码 14 DB7 数据7 5 R/W(STD) H: 读 L: 写 15 PSB H: 并行模式 L: 串行模式 6 E(SCLK) H,H/L 使能 16 NC 空脚 7 DB0 数据0 17 /RST 复位(低电平有效) 8 DB1 数据1 18 9 DB2 数据2 19 LEDA 背光源正极(LED+5V) 10 DB3 数据3 20 LEDK 背光源负极(LED-OV) 表10-1 OCMJ4X8C模块的引脚及对应的说明
46
3、信息传输与接口时序 (1)并行接口方式 当PSB脚接高电位时,模块将进入并行传输模式,单片机与液晶模块通过RS、RW、E、D7~D0完成信息传输。
47
并行接口方式时,单片机写数据到模块的时序图如图所示。
(a)单片机写数据到模块时序图
48
并行接口方式时,单片机从模块中读取数据的时序图如图所示。
(b)单片机从模块读取数据时序图
49
当PSB脚接低电位时,模块将进入串行模式。 串行传输流程
(2)串行接口方式 当PSB脚接低电位时,模块将进入串行模式。 串行传输流程 首先传输起始字节(五个连续的“1”),起始字节也称为同步字符串。 在传输起始字节时,传输计数将被重置并且串行传输将被同步,再跟随的两个位字符串分别指定传输方向位(RW)及寄存器选择位(RS),最后第八的位则为“0”。 在接收到同步位及RW和RS资料的起始字节后,每一个8位的指令将被分为两个字节接收到:高4位(D7~D4)的指令资料将会被放在第一个字节的LSB部分,而低4位(D3~D0)的指令资料则被放在第二个字节的LSB部分,至于相关的另四位则都为0。
50
串行接口方式时的时序图如图所示。 图10-8 串行接口方式的时序图
51
功能:将DDRAM 填满“20H”(空格),把DDRAM地址计数器调整为“00H”,重新进入点设定将I/D设为“1”,光标右移AC加1。
4、编程指令集 (1)清除显示(指令代码为01H) 功能:将DDRAM 填满“20H”(空格),把DDRAM地址计数器调整为“00H”,重新进入点设定将I/D设为“1”,光标右移AC加1。 RW RS D7 D6 D5 D4 D3 D2 D1 D0 1
52
功能:把DDRAM地址计数器调整为“00H”,光标回原点,该功能不影响显示DDRAM。
RW RS D7 D6 D5 D4 D3 D2 D1 D0 1 X
53
功能:设定光标移动方向并指定整体显示是否移动。
(3)点设定(指令代码为07H/04H/05H/06H) 功能:设定光标移动方向并指定整体显示是否移动。 I/D=1光标右移,AC自动加1;I/D=0光标左移,AC自动减1。 SH=1且DDRAM为写状态:整体显示移动,方向由I/D决定(I/D=1左移,I/D=0右移)。SH=0或DDRAM为读状态:整体显示不移动。 RW RS D7 D6 D5 D4 D3 D2 D1 D0 1 I/D S
54
(4)显示状态 开/关(指令代码为08H/0C0H/0E0H/0F0H) 功能:
D=1:整体显示ON;D=0:整体显示OFF。 C=1:光标显示ON;C=0:光标显示OFF。 B=1: 光标位置反白且闪烁;B=0:光标位置不反白闪烁。 RW RS D7 D6 D5 D4 D3 D2 D1 D0 1 D C B
55
(5)光标或显示移位控制(指令代码为10H/14H/18H/1CH) 功能:
10H/14H:光标左/右移动,AC减/加1 18H/1CH:整体显示左/右移动,光标跟随移动,AC值不变。 RW RS D7 D6 D5 D4 D3 D2 D1 D0 1 S/C R/L X
56
(6)功能设定(指令代码为36H/30H/34H) 功能: DL=1: 8-BIT控制接口; DL=0:4-BIT控制接口。
RE=1:扩充指令集动作; RE=0:基本指令集动作。 RW RS D7 D6 D5 D4 D3 D2 D1 D0 1 DL X RE
57
(7)设定CGRAM位址(指令代码为40H-7FH)
功能:设定CGRAM地址到地址计数器(AC),需确定扩充指令中SR=0(卷动地址或RAM地址选择)。 RW RS D7 D6 D5 D4 D3 D2 D1 D0 1 AC5 AC4 AC3 AC2 AC1 AC0
58
(8)设定DDRAM位址(指令代码为80H-9FH) 功能:设定DDRAM地址到地址计数器(AC)
RW RS D7 D6 D5 D4 D3 D2 D1 D0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0
59
功能:读取忙碌状态(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值。
RW RS D7 D6 D5 D4 D3 D2 D1 D0 1 BF AC6 AC5 AC4 AC3 AC2 AC1 AC0
60
功能:写入数据到内部的RAM(DDRAM/CGRAM/TRAM/GDRAM),每个RAM 地址都要连续写入两个字节的数据。
RW RS D7 D6 D5 D4 D3 D2 D1 D0 1
61
(11)读出RAM的值 功能:从内部RAM读取数据(DDRAM/CGRAM/GDRAM),当设定地址指令后,若需读取数据时,需先执行一次空的读数据,才会读取到正确数据,第二次读取时则不需要,除非又使用设定地址指令。 RW RS D7 D6 D5 D4 D3 D2 D1 D0 1
62
功能:进入待命模式,执行其他命令都可终止待机模式。
(12)待机模式(指令代码为01H) 功能:进入待命模式,执行其他命令都可终止待机模式。 RW RS D7 D6 D5 D4 D3 D2 D1 D0 1
63
(13)卷动地址或RAM地址选择(指令代码为02H/03H) 功能:
SR=1:允许输入卷动地址; SR=0:允许设定CGRAM地址(基本指令)。 RW RS D7 D6 D5 D4 D3 D2 D1 D0 H SR
64
功能:选择4行中的任一行作反白显示,并可决定反白与否。
(14)反白选择(指令代码为04H-07H) 功能:选择4行中的任一行作反白显示,并可决定反白与否。 RW RS D7 D6 D5 D4 D3 D2 D1 D0 1 R1 R0
65
(15)睡眠模式(指令代码为08H/0CH) 功能: SL=1:脱离睡眠模式; SL=0:进入睡眠模式。 RW RS D7 D6 D5 D4
1 SL X
66
(16)扩充功能设定(指令代码为20H/24H/26H/30H/34H/36H) 功能:
DL=1:8-BIT控制接口; DL=0:4-BIT控制接口。 RE=1:扩充指令集动作; RE=0:基本指令集动作。 G=1:绘图显示ON; G=0:绘图显示OFF。 RW RS D7 D6 D5 D4 D3 D2 D1 D0 1 DL X RE G L
67
功能:SR=1:AC5~AC0为垂直卷动地址;SR=0:AC3~AC0写ICONRAM地址。
(17)设定卷动地址(指令代码为40H~7FH) 功能:SR=1:AC5~AC0为垂直卷动地址;SR=0:AC3~AC0写ICONRAM地址。 RW RS D7 D6 D5 D4 D3 D2 D1 D0 1 AC5 AC4 AC3 AC2 AC1 AC0
68
(18)设定绘图RAM位址(指令代码为80H~FFH) 功能:设定GDRAM地址到地址计数器(AC)。
RW RS D7 D6 D5 D4 D3 D2 D1 D0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0
69
5、显示步骤 (1)显示数据RAM(DDRAM) 显示数据RAM提供64×2个字节的空间,最多可以控制4行16字(64个字)的中文字型显示。当写入显示数据RAM时,可以分别显示CGROM、HCGROM与CGRAM的字型。
70
三种字型的选择,由在DDRAM中写入的编码选择,部
ST7920A可以显示三种字型 半宽的HCGROM字型 CGRAM字型 中文CGROM字型。 三种字型的选择,由在DDRAM中写入的编码选择,部 0000H~0006H的编码中将选择CGRAM的自定字型 02H~7FH 的编码中将选择半宽英文数字的字型 A1H以上的编码将自动结合下一个字节,组成两个字节的中文字型编码:BIG5(A140H~D75FH)、GB(A1A0H~F7FFH)
71
1)显示半宽字型:将8位二进制数据写入DDRAM中,范围为02H~7FH的编码。
2)显示CGRAM字型:将16位二进制数据写入DDRAM中,共有0000H,0002H,0004H,0006H四种编码。 3)显示中文字形:将16位二进制数据写入DDRAM中,范围为A140H~D75FH的编码(BIG5),A1A0H~F7FFH的编码(GB)。数据写入DDRAM时,连续写入两个字节,先写入高字节(D15~D8),再写入低字节(D7~D0)。
72
(2)绘图RAM(GDRAM) 绘图显示RAM提供64×32位的存储空间,最多可以控制256×64点的二维绘图缓冲空间 在更改绘图RAM内容时,由扩充指令设定绘图GDRAM地址,先设垂直地址,再设水平地址(连续写入两个字节的数据到绘图RAM),地址计数器(AC)会自动加一。在写入绘图RAM期间,绘图显示必须关闭。
73
写入绘图RAM的步骤如下: 关闭绘图显示功能; 先将垂直的坐标(Y)写入绘图RAM地址; 再将水平的坐标(X)写入绘图RAM地址;
将D15~D8写入到RAM中(写入第一个字节); 将D7~D0写入到RAM中(写入第二个字节); 打开绘图显示功能。
74
(3)光标/闪烁控制 ST7920A提供硬件光标及闪烁控制电路,由地址计数器(address counter)的值来指定DDRAM中的光标或闪烁位置。 汉字字符显示坐标在晶模块中的地址80H~9FH。
75
图10-9 字符显示的RAM地址与32个字符显示区域的对应关系
X 坐标 Line1 80H 81H 82H 83H 84H 85H 86H 87H Line2 90H 91H 92H 93H 94H 95H 96H 97H Line3 88H 89H 8AH 8BH 8CH 8DH 8EH 8FH Line4 98H 99H 9AH 9BH 9CH 9DH 9EH 9FH 图10-9 字符显示的RAM地址与32个字符显示区域的对应关系
76
使用OCMJ4X8C显示模块时应注意以下几点:
①欲在某一个位置显示中文字符时,应先设定显示字符位置,即先设定显示地址,再写入中文字符编码。
77
②显示ASCII字符过程与显示中文字符过程相同。不过在显示连续字符时,只须设定一次显示地址,由模块自动对地址加1指向下一个字符位置,否则,显示的字符中将会有一个空ASCII字符位置。
③当字符编码为2字节时,应先写入高位字节,再写入低位字节。
78
④模块在接收指令前,处理器必须先确认模块内部处于非忙状态(BF=0),方可接受新的指令。如果在送出指令前不检查BF标志,则在送出本指令之前必须等待前一个指令执行完成。指令执行时间请参考指令表中的指令执行时间说明。 ⑤“RE”为基本指令集与扩充指令集的选择控制位。当改变“RE”后,以后的指令集将维持在最后的状态,除非再次改变“RE”位,否则使用相同指令集时,无需每次均重设“RE”位。
79
【例10-1】以SPI接口连接为例,说明LCD模块的使用方法。
当液晶模块的PSB引脚接低电平时,即进入串行接口模式。串行模式使用串行数据线SID和串行时钟线SCLK来传送数据,即构成2线串行模式。 OCMJ4X8C还允许同时接入多个液晶显示模块以完成多路信息显示功能。此时,要利用片选信号CS(与RS共用引脚)构成3线串行接口方式。当CS接高电平时,模块可正常接收并显示数据,否则,模块将被禁止。当系统仅使用一个液晶显示模块时,CS引脚可以接固定的高电平。
80
图10-10 OCMJ4X8C液晶模块与单片机的连接电路图
电路连接如图所示。 图 OCMJ4X8C液晶模块与单片机的连接电路图
81
示例程序如下: #include"stc15.h" typedef unsigned char BYTE;
//该声明以后就可以在程序中用BYTE 代替unsigned char了 sbit BLED=P2^2; //背光控制 void spi_init(void); //SPI初始化子程序 void delay(unsigned int us10); //延时子程序 void sendspi(BYTE spidata, BYTE read, BYTE dat); //显示数据发送子程序 void lcd_init_usual(void); //液晶初始化子程序 void set_position(BYTE position); //确定光标位置子程序 void data_write(BYTE data1); //显示单个字符子程序 void chinese_series(BYTE *series); //显示汉字字符串子程序
82
void main (void) { spi_init(); lcd_init_usual(); BLED=0; set_position(0x82); chinese_series("单片机"); data_write('0'); data_write('1'); while(1); }
83
void spi_init(void) //SPI初始化子程序
{ AUXR1=0x08; //将SPI转移到P4口 SPI初始化 SPCTL=0xd3; //SPI使能,主机模式,/SS无关,先发高 SPSTAT=0xC0; //清传输完成标志和写冲突标志 } void delay(unsigned int us10) //延时子程序 while(us10--);
84
//显示数据发送子程序 void sendspi(BYTE spidata, BYTE read, BYTE dat) { BYTE cmd,dat1,dat2,spi1_status=0; cmd=(0xf8|read|(dat<<1)); SPDAT=cmd; while(spi1_status==0) //等起始命令传输完毕 spi1_status=SPSTAT; spi1_status=spi1_status&0x80; } SPSTAT=0xC0; //写1清SPIF标志位 spi1_status=0; dat1=spidata&0xf0; SPDAT=dat1;
85
while(spi1_status==0) //等高4位数据传输完毕
{ spi1_status=SPSTAT; spi1_status=spi1_status&0x80; } SPSTAT=0xC0; //写1清SPIF标志位 spi1_status=0; dat2=(spidata<<4)&0xf0; SPDAT=dat2; while(spi1_status==0) //等低4位传输完毕 SPSTAT=0xC0; //写1清SPIF标志位
86
void lcd_init_usual(void) //液晶初始化子程序
{ sendspi(0x30,0,0); //基本指令集 sendspi(0x01,0,0); //清显示,地址复位 delay(2000); sendspi(0x0e,0,0); //整体显示,开游标,关位置 sendspi(0x06,0,0); //游标方向及移位 }
87
void set_position(BYTE position) //确定光标位置子程序
{ sendspi(position,0,0); } void data_write(BYTE data1) //显示单个字符子程序 sendspi(data1,0,1); void chinese_series(BYTE *series) //显示汉字字符串子程序 for(series;*series!=0;series++) data_write(*series);
88
三、数码管显示驱动和键盘扫描控制专用芯片
在实际单片机应用系统开发过程中,为了节省宝贵的I/O口线资源,提高CPU的处理效率,在键盘和显示接口设计方面,常常使用专用的数码管显示驱动和键盘扫描专用芯片(简称键盘/显示扩展芯片)。 常见的键盘/显示扩展芯片有CH451、ZLG7289A等。下面以CH451为例说明这类芯片的使用方法。
89
1、CH451简介 CH451是一个整合了数码管显示驱动、键盘扫描控制以及微处理器监控的多功能外围芯片。 三个功能之间相互独立,单片机可以通过操作命令分别启用、关闭、设定CH451 的任何一个功能。
90
CH451内置RC振荡电路,可以动态驱动8位数码管或者64只LED发光管,具有BCD译码、闪烁、移位等功能;
还可以进行64键的键盘扫描; CH451通过可以级联的串行接口与单片机等交换数据,其串行接口是由硬件实现的,单片机可以频繁地通过串行接口进行高速操作,而不会降低CH451 的工作效率。
91
2、特点 (1)显示驱动 内置大电流驱动级,段电流不小于25mA,字电流不小于150mA。
动态显示扫描控制,直接驱动8 位数码管或者64 只发光管LED。 可选数码管的段与数据位相对应的不译码方式或者BCD译码方式。 数码管的字数据左移、右移、左循环、右循环。
92
各数码管数字独立闪烁控制。 任意段位寻址,独立控制各个LED 或者各数码管的各个段的亮与灭。 通过占空比设定提供16级亮度控制。 支持段电流上限调整,可以省去所有限流电阻。 扫描极限控制,支持1到8个数码管,只为有效数码管分配扫描时间。
93
(2)键盘控制 内置64键键盘控制器,基于8×8矩阵键盘扫描。 内置按键状态输入的下拉电阻,内置去抖动电路。 键盘中断,低电平有效输出。
提供按键释放标志位,可供查询按键按下与释放。
94
(3)其它 高速的4线串行接口,支持多片级联,时钟速度从0到10MHz。
串行接口中的DIN和DCLK信号线可以与其它接口电路共用,节约引脚。 完全内置时钟振荡电路,不需要外接晶体或者阻容振荡。 内置上电复位和看门狗Watch-Dog,提供高电平有效和低电平有效复位输出。 支持低功耗睡眠,节约电能,可以被按键唤醒或者被命令操作唤醒。 支持3V~5V电源电压。 提供SOP28和DIP24S两种无铅封装,兼容RoHS。
95
提供SOP28和DIP24S两种封装分别如图(a)和图(b)所示
3、封装 提供SOP28和DIP24S两种封装分别如图(a)和图(b)所示 图10-11 CH451的两种封装形式
96
4、引脚 表10-4 CH451两种封装形式的引脚及引脚说明 SOP28的引脚号 DIP24S的引脚号 引脚名称 类型 引脚说明 23 2
VCC 电源 正电源端,持续电流不小于200mA 9 15 GND 公共接地端,持续电流不小于200mA 25 4 LOAD 输入 串行接口的数据加载,内置上拉电阻 26 5 DIN 串行接口的数据输入,内置上拉电阻 27 6 DCLK 串行接口的数据时钟,内置上拉电阻 同时用于看门狗的清除输入 24 3 DOUT 输出 串行接口的数据输出和键盘中断 22~15 1、 24~18 SEG7 ~SEG0 三态输出 及输入 数码管的段驱动,高电平有效, 键盘扫描输入,高电平有效,内置下拉 1~8 7~14 DIG7~DIG0 数码管的字驱动,低电平有效, 键盘扫描输出,高电平有效 12 16 RST 上电复位和看门狗复位,高电平有效 13 不支持 RST# 上电复位和看门狗复位,低电平有效 28 RST1 外部手工复位输入,高电平有效,内置下拉电阻 14 ADJ 段电流上限调整,内置强下拉电阻 11 CLKO 内部系统时钟输出 10 建议接GND 17 NC. 空脚 未使用,禁止连接
97
5、功能说明 (1)显示驱动 CH451对数码管和发光管采用动态扫描驱动,顺序为DIG0至DIG7,当其中一个引脚吸入电流时,其它引脚则不吸入电流。
98
CH451内部具有大电流驱动级,可以直接驱动0.5~2in的共阴数码管,
段驱动引脚SEG6~SEG0分别对应数码管的段G~段A 段驱动引脚SEG7对应数码管的小数点 字驱动引脚DIG7~DIG0分别连接8个数码管的阴极
99
CH451也可以连接8×8矩阵的发光二级管LED阵列或者64个独立发光管;
100
CH451支持扫描极限控制,并且只为有效数码管分配扫描时间。
当扫描极限设定为1时,唯一的数码管DIG0 将得到所有的动态驱动时间,从而等同于静态驱动; 当扫描极限设定为8时,8个数码管DIG7~DIG0各得到1/8的动态驱动时间; 当扫描极限设定为4时,4个数码管DIG3~DIG0各得到1/4的动态驱动时间,此时各数码管的平均驱动电流将比扫描极限为8时增加一倍,所以降低扫描极限可以提高数码管的显示亮度。
101
CH451将分配给每个数码管的显示驱动时间进一步细分为16等份,通过设定显示占空比支持16级亮度控制。
占空比的值从1/16至16/16,占空比越大,数码管的平均驱动电流越大,显示亮度也就越高,但占空比与显示亮度之间是非线性关系。
102
CH451内部具有8个8位的数据寄存器,用于保存8个字数据,分别对应于CH451所驱动的8个数码管或者8组每组8个的发光二极管。
103
CH451默认情况下工作于不译码方式 8个数据寄存器中字数据的位7~位0分别对应8个数码管的小数点和段G~段A,对于发光二极管阵列,则每个字数据的数据位唯一地对应一个发光二级管。 当数据位为1时,对应的数码管的段或者发光管就会点亮; 当数据位为0时,则对应的数码管的段或者发光管就会熄灭。例如,第三个数据寄存器的位0为1,所以对应的第三个数码管的段A点亮。
104
通过设定,CH451可以工作于BCD译码方式 该方式主要应用于数码管驱动,单片机只要给出二进制数BCD码,由CH451将其译码后直接驱动数码管显示对应的字符。 BCD 译码方式是指对数据寄存器中字数据的位4~位0进行BCD译码,控制段驱动引脚SEG6~SEG0的输出,对应于数码管的段G~段A,同时用字数据的位7控制段驱动引脚SEG7的输出,对应于数码管的小数点,字数据的位6和位5不影响BCD译码。
105
数据寄存器中字数据的位4~位0进行BCD译码后,所对应的段G~段A以及数码管显示的字符如表所示。
106
参考表,如果需要在数码管上显示字符0,只要置入数据0xx00000B 或者00H;
数据0xx11010B或者1AH 对应于字符.(小数点); 数据0xx10000B 或者10H 对应于字符 (空格,数码管没有显示)。
107
图10-12 CH451的段驱动引脚SEG7~SEG0的内部电路简图
SEGMENT-DATA SEG A 与非 与 按键编码 或非 非 2V 3V . 4V 15mA ADJ BCD-DECODE KEYB-SCAN DISPLAY-ENABLE 100K 用电压控制电流 VCC 2×15mA 图 CH451的段驱动引脚SEG7~SEG0的内部电路简图
108
图10-13 CH451的字驱动引脚DIG7~DIG0的内部电路简图
非 DIG KEYB-SCAN DISP-SCAN DISP-ENABLE INTENSITY SPARKLING VCC 5mA 8×20mA 图10-13 CH451的字驱动引脚DIG7~DIG0的内部电路简图
109
(2)键盘扫描 CH451的键盘扫描功能支持8×8矩阵的64键键盘。 在键盘扫描期间,DIG7~DIG0引脚用于列扫描输出
SEG7~SEG0引脚都带有内部下拉电阻,用于行扫描输入 当启用键盘扫描功能后,DOUT引脚的功能由串行接口的数据输出变为键盘中断以及数据输出。
110
CH451插入键盘扫描过程(显示驱动扫描过程中定期扫描键盘)
在键盘扫描期间,DIG7~DIG0引脚按照DIG0至DIG7的顺序依次输出高电平,其余7个引脚输出低电平; SEG7~SEG0引脚的输出被禁止,当没有键被按下时,SEG7~SEG0都被下拉为低电平;当有键被按下时,例如连接DIG3与SEG4的键被按下,则当DIG3输出高电平时SEG4检测到高电平;
111
为了防止因为按键抖动或者外界扰而产生误码,CH451实行两次扫描,只有当两次键盘扫描的结果相同时,按键才会被确认有效。
如果CH451检测到有效的按键,则记录下该按键代码,并通过DOUT引脚产生低电平有效的键盘中断,此时单片机可以通过串行接口读取按键代码; 在没有检测到新的有效按键之前,CH451不再产生任何键盘中断。CH451不支持组合键,也就是说,同一时刻,不能有两个或者更多的键被按下;如果多个键同时按下,那么按键代码较小的按键优先。
112
CH451所提供的按键代码为7位 位2~位0是列扫描码 位5~位3是行扫描码 位6是状态码(键按下为1,键释放为0)
113
例如,连接DIG3与SEG4的键被按下,则按键代码是 B或者63H,键被释放后,按键代码通常是 B或者23H,其中,对应DIG3的列扫描码为011B,对应SEG4的行扫描码为100B。 单片机可以在任何时候读取按键代码,但一般在CH451检测到有效按键而产生键盘中断时读取按键代码,此时按键代码的位6总是1,另外,如果需要了解按键何时释放,单片机可以通过查询方式定期读取按键代码,直到按键代码的位6为0。
114
连接在DIG7~DIG0与SEG7~SEG0之间的键被按下时,CH451所提供的按键代码如表所示。
表10-6 按键与按键代码的对应关系 按键代码 DIG7 DIG6 DIG5 DIG4 DIG3 DIG2 DIG1 DIG0 SEG0 47H 46H 45H 44H 43H 42H 41H 40H SEG1 4FH 4EH 4DH 4CH 4BH 4AH 49H 48H SEG2 57H 56H 55H 54H 53H 52H 51H 50H SEG3 5FH 5EH 5DH 5CH 5BH 5AH 59H 58H SEG4 67H 66H 65H 64H 63H 62H 61H 60H SEG5 6FH 6EH 6DH 6CH 6BH 6AH 69H 68H SEG6 77H 76H 75H 74H 73H 72H 71H 70H SEG7 7FH 7EH 7DH 7CH 7BH 7AH 79H 78H
115
这些按键代码具有一定的规律,如果需要键被释放时的按键代码,则将表中的按键代码的位6置0,也就是将表中的按键代码减去40H。
表10-6 按键与按键代码的对应关系 按键代码 DIG7 DIG6 DIG5 DIG4 DIG3 DIG2 DIG1 DIG0 SEG0 47H 46H 45H 44H 43H 42H 41H 40H SEG1 4FH 4EH 4DH 4CH 4BH 4AH 49H 48H SEG2 57H 56H 55H 54H 53H 52H 51H 50H SEG3 5FH 5EH 5DH 5CH 5BH 5AH 59H 58H SEG4 67H 66H 65H 64H 63H 62H 61H 60H SEG5 6FH 6EH 6DH 6CH 6BH 6AH 69H 68H SEG6 77H 76H 75H 74H 73H 72H 71H 70H SEG7 7FH 7EH 7DH 7CH 7BH 7AH 79H 78H
116
(3)μP监控 CH451提供的μP监控包括上电复位和看门狗Watch-Dog。 单片机或者微处理器的复位输入引脚可以根据需要直接连接到CH451的RST引脚或者RST#引脚,当CH451通电或者看门狗溢出时,RST引脚输出高电平有效的复位脉冲信号,RST#引脚输出低电平有效的复位脉冲信号。 CH451的上电复位脉冲信号同时作用于CH451芯片的内部电路,而看门狗复位脉冲信号不会对CH451芯片的内部电路起作用。
117
CH451的上电复位是指上电过程(从断电状态变为正常供电状态的过程)中产生的复位脉冲。
为了减少CH451驱动大电流而产生的电源干扰,在设计印制电路板PCB时,应在紧靠CH451芯片的正负电源之间并联一组电源退耦电容,包括至少一个容量不小于0.1uF的独石或者瓷片电容和一个容量不小于100uF的电解电容。
118
CH451在启用看门狗功能后,只要清除输入引脚DCLK的电平没有变化,看门狗计时器就会计时,当计满溢出周期时,就会产生看门狗复位脉冲信号。
119
CH451的看门狗计时可以被下述的任何一个操作清除:
上电复位 RSTI引脚的手工复位 DCLK从低变为高 DCLK从高变为低等 启用看门狗功能后,当单片机程序失控而使 DCLK的电平长时间保持不变时,CH451就会输 出看门狗复位脉冲信号。
120
CH451具有硬件实现的高速4线串行接口,包括4个信号线:
(4)串行接口 CH451具有硬件实现的高速4线串行接口,包括4个信号线: 串行数据输入线DIN 串行数据时钟线DCLK 串行数据加载线LOAD 串行数据输出线DOUT DIN、DCLK、LOAD是带上拉的输入信号线,默认是高电平;DOUT在未启用键盘扫描功能时作为串行数据输出线,在启用键盘扫描功能后作为键盘中断和数据输出线,默认是高电平。
121
CH451的串行接口框图如图所示。 图10-14 CH451的串行接口框图 DCLK DOUT LOAD CK 非 DIN D 寄存器 Q
命 令 译码 D11-D0 Q 1 S 选择器 KEYB-DATA KEYB-INTER KEYB-ENABLE 图 CH451的串行接口框图
122
单片机向CH451输出串行数据的过程是(不是唯一的过程,可以有很多变化):
输出一位数据,即向DIN输出最低位数据D0,并向DCLK输出低电平脉冲(从高电平变为低电平再恢复为高电平),其中包括一个上升沿使CH451输入位数据; 以同样的方式,输出位数据D1~D11; 向LOAD输出低电平脉冲,其中包括一个上升沿使CH451加载串行数据。
123
未启用键盘扫描功能时,单片机通过串行接口向CH451发送12位数据的波形示意图如图所示。
DIN D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 D11 DCLK LOAD DOUT D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 图10-15 未启用键盘扫描功能时CH451发送12位数据的波形示意图
124
单片机从CH451获得按键代码的过程如图所示。MCU是指单片机的工作状态。
DIN LOAD DCLK DOUT MCU 中断 读取按键代码命令 输入按键代码 D8 D9 D10 D11 K6 K5 K4 K3 K2 K1 K0 H H L L L H H L 图10-16 单片机从CH451获得按键代码的过程
125
具体过程是: ①输出一位数据,即向DIN输出读取按键代码命令的最低位数据D0,并向DCLK输出低电平脉冲; ②以同样的方式,输出读取按键代码命令的位数据D1~D11;
126
③向LOAD输出低电平脉冲,其中包括一个上升沿使CH451加载串行数据,CH451分析出是读取按键代码命令,立即在DOUT输出按键代码的最高位数据K6;
④读取一位数据,即从DOUT输入按键代码的最高位数据K6,并向DCLK输出低电平脉冲; ⑤以同样的方式,输入按键代码的位数据K5~K0。
127
实际上,CH451的读取按键代码命令只有位数据D8~D11是有效的,所以单片机不必发出读取按键代码命令的D0~D7。
例如,按键代码是63H,则上述过程的简化描述是1^1^1^0^↑H^H^L^L^L^H^H^,即先向CH451发出读取按键代码命令0111xxxxxxxxB,然后从DOUT接收按键代码 B。
128
表10-7 CH451的各个操作命令所对应的12位串行数据
(5)操作命令 CH451的操作命令均为12位,CH451的各个操作命令所对应的12位串行数据如表所示。 表10-7 CH451的各个操作命令所对应的12位串行数据
129
1)空操作:0000xxxxxxxxB 空操作命令不对CH451产生任何影响。该命令可以在多个CH451级联的应用中,透过前级CH451向后级CH451 发送操作命令而不影响前级的状态。
130
例如,要将操作命令 B 发送给两级级联电路中的后级CH451(后级CH451 的DIN连接前级CH451的DOUT),只要在该命令后添加空操作命令 B 再发送,简化描述是1^0^0^0^0^0^0^0^0^1^0^0^0^0^0^0^0^0^0^0^0^0^0^0^↑,那么,该操作命令将经过前级CH451到达后级CH451,而空操作命令留给了前级CH451。 另外,为了在不影响CH451的前提下变化DCLK以清除看门狗计时,也可以发送空操作命令,在非级联的应用中,空操作命令可以只发送有效数据D8~D11,简化描述是0^0^0^0^↑。
131
2)段位寻址清0:000110[BIT_ADDR]B 段位寻址清0 命令用于将指定地址的发光管(或者数码管的指定段或者小数点)熄灭,该命令一次只能熄灭指定地址的一个发光管,并且完全不影响其它发光管的状态。
132
段位寻址的编址顺序(矩阵编址表)如表所示。
例如,命令数据 B 表示将编址为3AH 的发光管熄灭。 表10-8 矩阵编址表 矩阵编址 DIG7 DIG6 DIG5 DIG4 DIG3 DIG2 DIG1 DIG0 SEG0 38H 30H 28H 20H 18H 10H 08H 00H SEG1 39H 31H 29H 21H 19H 11H 09H 01H SEG2 3AH 32H 2AH 22H 1AH 12H 0AH 02H SEG3 3BH 33H 2BH 23H 1BH 13H 0BH 03H SEG4 3CH 34H 2CH 24H 1CH 14H 0CH 04H SEG5 3DH 35H 2DH 25H 1DH 15H 0DH 05H SEG6 3EH 36H 2EH 26H 1EH 16H 0EH 06H SEG7 3FH 37H 2FH 27H 1FH 17H 0FH 07H
133
3)段位寻址置1:000111[BIT_ADDR]B 段位寻址置1 命令用于将指定地址的发光管(或者数码管的指定段或者小数点)点亮,该命令一次只能点亮指定地址的一个发光管,并且完全不影响其它发光管的状态。段位寻址的编址顺序请参考矩阵编址表。 例如,命令数 B 表示将编址为06H 的发光管点亮。
134
4)芯片内部复位: B 内部复位命令将CH451 的各个寄存器和各种参数复位到默认的状态。 芯片上电时,CH451总是被复位,此时各个寄存器均复位为0,各种参数均恢复为默认值。
135
5)进入睡眠状态: B 进入睡眠状态命令使CH451 暂停显示驱动和键盘扫描,并进入低功耗睡眠状态,从而可以节约电能。 执行该命令之前,应该先用设定系统参数命令关闭CH451的显示驱动使能和按键扫描使能,并且执行该命令本身必须在20uS 之内完成,发出命令后DCLK 引脚必须保持不变。
136
处于低功耗睡眠状态中的CH451 可以被下述两种事件中的任何一种唤醒,
第一种事件是检测到SEG3~SEG0上的按键,有效按键代码是40H 到5FH; 第二种事件是接收到单片机发出的操作命令(通常是空操作命令),或者检测到DCLK 引脚的状态变化。 睡眠和唤醒操作本身不会影CH451 的工作状态。
137
6)字数据左移: B 字数据左移命令将CH451 的字数据左移一次,即从DIG0 向DIG7 移动一位,然后最右边的DIG0补进数据00H。 例如,在数码管DIG7~DIG0 显示“ ”时,执行字数据左移命令,显示变为“ ”(不译码方式)或者“ ”(BCD 译码方式)。
138
7)字数据右移: B 字数据右移命令将CH451 的字数据右移一次,即从DIG7 向DIG0 移动一位,然后最左边的DIG7补进数据00H。 例如,在数码管DIG7~DIG0 显示“ ”时,执行字数据右移命令,显示变为“ ”(不译码方式)或者“ ”(BCD 译码方式)。
139
8)字数据左循环: B 字数据左循环命令将CH451 的字数据左循环一次,即从DIG0 向DIG7 移动一位,然后最右边的DIG0 补进原DIG7 的数据。 例如,在数码管DIG7~DIG0 显示“ ”时,执行字数据左循环命令,显示变为“ ”。
140
9)字数据右循环: B 字数据右循环命令将CH451 的字数据右循环一次,即从DIG7 向DIG0 移动一位,然后最左边的DIG7 补进原DIG0 的数据。 例如,在数码管DIG7~DIG0 显示“ ”时,执行字数据右循环命令,显示变为“ ”。
141
10)自定义BCD 码:00111[SELF_BCD]B
自定义BCD码命令用于自行定义常规BCD译码中未实现的特殊字符,CH451支持一个自定义BCD码,其BCD值为1EH,显示编码由该命令指定,编码共7 位,分别对应于数码管的7 个段,而小数点由BCD 值的最高位单独控制。
142
例如,命令数据001110111110B 表示自定义BCD字符U(对应的段显示数据为3EH) 在BCD译码方式下
当单片机要求显示BCD 值1EH 时,CH451会在对应的数码管中显示字符U 当单片机要求显示BCD 值9EH 时,CH451 会在对应的数码管中显示字符U.(含小数点)。
143
11)设定系统参数:0100000[CKHF]0[WDOG][KEYB][DISP]B
设定系统参数命令用于设定CH451 的系统级参数:输出高频时钟CKHF(选择快速闪烁),看门狗使能WDOG,键盘扫描使能KEYB,显示驱动使能DISP。各个参数均通过1位数据控制,将相应的数据位置为1 则启用该功能,否则关闭该功能(默认值)。 例如,命令数据 B 表示选择低频时钟、关闭看门狗的功能、启用键盘扫描的功能、启用显示扫描驱动的功能。
144
12)设定显示参数:0101[MODE][LIMIT][INTENSITY]B
设定显示参数命令用于设定CH451 的显示参数:译码方式MODE,扫描极限LIMIT,显示亮度INTENSITY。
145
译码方式MODE 通过1 位数据控制,置1 时选择BCD 译码方式,置0 时选择不译码方式(默认值)。
扫描极限LIMIT 通过3 位数据控制,数据001B~111B 和000B分别设定扫描极限为1~7 和8(默认值)。 显示亮度INTENSITY通过4位数据控制,数据0001B~1111B和0000B 分别设定显示驱动占空比为1/16~15/16 和16/16(默认值)。
146
例如 命令数据010101110000B 表示选择不译码方式、扫描极限为7、显示驱动占空比为16/16;
命令数据 B 表示选择BCD 译码方式、扫描极限为8、显示驱动占空比为10/16。
147
13)设定闪烁控制:0110[D7S][D6S][D5S][D4S][D3S][D2S][D1S][D0S]B
设定闪烁控制命令用于设定CH451 的闪烁显示属性:D7S~D0S 分别对应于8 个字驱动DIG7~DIG0。闪烁属性D7S~D0S 分别通过1 位数据控制,将相应的数据位置为1 则使能闪烁显示,否则为正常显示,不闪烁(默认值)。
148
例如,命令数据011000100001B 表示设定数码管DIG5 和DIG0 闪烁显示,其余数码管正常显示,不闪烁。
149
14)加载字数据:1[DIG_ADDR][DIG_DATA]B
加载字数据命令用于将字数据DIG_DATA 写入DIG_ADDR 指定地址的数据寄存器中。DIG_ADDR 通过3 位数据指定数据寄存器的地址,数据000B~111B 分别指定地址0~7,对应于DIG0~DIG7 引脚驱动的8 个数码管。DIG_DATA 是8 位的字数据。
150
例如 命令数据100001111001B 表示将字数据79H写入第1 个数据寄存器,如果是不译码方式,则DIG0 引脚驱动的数码管将显示E;
命令数据 B 表示将字数据88H 写入第5 个数据寄存器,如果是BCD 译码方式,则DIG4 引脚驱动的数码管将显示8.。
151
15)读取按键代码:0111xxxxxxxxB 读取按键代码命令用于获得CH451 最近检测到的有效按键的按键代码。该命令是唯一的具有数据返回的命令,CH451从DOUT引脚输出按键代码,按键代码总是7 位数据,最高位是状态码,位5~位0 是扫描码。读取按键代码命令的位数据D0~D7 可以是任意值,所以单片机可以将该操作命令缩短为4 位数据D8~D11。
152
例如,CH451 检测到有效按键并中断,按键代码是5EH,简化描述1^1^1^0^↑H^L^H^H^H^H^L^表示先向CH451 发出读取按键代码命令0111xxxxxxxxB,然后从DOUT 获得按键代码5EH。
153
图10-17 CH451通过串行接口与单片机相连接的电路
(6)应用 1)单片机与CH451的连接 CH451通过串行接口与单片机相连接的电路。 U2 R1 C1 C3 VCC CH451-28 200R×8 U1 0.1u 0.1u SEG0 15 SEG0 STC15F2K60S2 VCC SEG1 16 SEG1 2 20 10 17 RXD VCC GND SEG2 SEG2 3 SEG3 TXD 18 GND 10 9 GND SEG3 C2 SEG4 19 SEG4 28 RSTI 7 INT1 470u SEG5 20 SEG5 13 8 T0 RST# 21 SEG6 RESET 1 RESET 12 SEG6 9 T1 RST 22 SEG7 11 SEG7 P3.7 X2 4 5 SCLK 11 X1 8 CLK0 DIG0 DIG0 12 P10 DIG1 7 DIG1 DCLK 13 P11 19 27 DIG2 6 DIG2 P17 DCLK 14 P12 P16 18 DIN 26 DIN动了 DIG3 5 DIG3 15 P13 17 LOAD 25 4 P15 LOAD DIG4 DIG4 16 P14 INT0 6 KEY 24 DOUT DIG5 3 DIG5 DIG6 2 DIG6 14 1 DIG7 ADJ DIG7 图 CH451通过串行接口与单片机相连接的电路
154
2)驱动数码管 CH451 驱动数 码管的 电路如 图所示。 图10-18 CH451驱动数码管的电路 . m N1 N2 N3 N4 N5
SEG4 1 1 SEG0 7 7 SEG1 6 6 SEG2 4 4 SEG3 2 2 SEG5 9 9 SEG6 10 10 SEG7 5 5 B A C D E F G . N1 SEG4 1 1 SEG2 4 4 SEG3 2 2 SEG610 10 SEG75 5 N2 SEG41 1 SEG24 4 SEG32 2 SEG59 9 N3 SEG16 6 N4 DIG7 DIG6 DIG5 DIG4 m SEG0 7 7 SEG2 4 4 N5 N6 N7 N8 DIG3 DIG2 DIG1 DIG0 图 CH451驱动数码管的电路
155
3)8×8键盘扫描 CH451连接8×8键盘的电路图如图所示。CH451具有64键的键盘扫描功能,如果应用中只需要很少的按键,则可以在8×8 矩阵中任意去掉不用的按键。 为了防止键被按下后在SEG信号线与DIG信号线之间形成短路,影响显示,一般应该在CH451的DIG0~DIG7 引脚与键盘矩阵之间串接限流电阻R2,其阻值为1KΩ至10KΩ。
156
图10-19 CH451连接8×8键盘的电路图 SEG0 SEG1 SEG2 SEG3 SEG4 SEG5 SEG6 SEG7 R2
K0 K1 K2 K3 K4 K5 K6 K7 K10 K11 K9 K8 K12 K13 K14 K15 K18 K19 K20 K21 K22 K23 K16 K17 K26 K27 K28 K29 K30 K31 K24 K25 K34 K35 K36 K37 K38 K39 K32 K33 K42 K43 K44 K45 K46 K47 K40 K41 K50 K51 K52 K53 K54 K55 K48 K49 K58 K59 K60 K61 K62 K63 K56 K57 SEG0 SEG1 SEG2 SEG3 SEG4 SEG5 SEG6 SEG7 DIG0 DIG1 DIG2 DIG3 DIG4 DIG5 DIG6 DIG7 R2 2K×8 图 CH451连接8×8键盘的电路图
157
4)完整的应用电路 单片机通过CH451驱动8个共阴数码管显示,并同时扫描64个按键的完整电路图如图所示。
158
图10-20 单片机通过CH451驱动8个共阴数码管显示,并同时扫描64个按键的完整电路图
159
由于某些数码管在较高工作电压时存在反向漏电现象,容易被CH451误认为是某个按键一直按下,所以建议使用二级管D1-D8 防止数码管反向漏电,并提高键盘扫描时SEG0~SEG7输入信号的电平,确保键盘扫描更可靠。 当电源电压较低时(例如VCC=3.3V),这些二级管应该去掉以避免影响显示亮度。 当数码管多于8个时,可以采用多个CH451进行驱动。多个CH451与单片机的连接电路及使用方法请参阅CH451手册,在此从略。
Similar presentations