640 likes | 837 Views
第六章 人机接口实例. 人机接口设计. 单片机系统需要与外部的世界通信和联系,尤其是与使用者进行交流。人机接口是其重要的交互界面。常用的人机交互装置有:显示器、键盘、打印机等。 本章我们将介绍显示器和键盘的设计。. 显示器接口设计. 单片机系统常用的显示器有: LED 显示器和 LCD 显示器。. LED Light Emitting Diode Light Emitting Diode Display Device. LCD Liquid Crystal Display. 高电平点亮. h g f …… a. a. a. f. f.
E N D
第六章 人机接口实例 人机接口设计 单片机系统需要与外部的世界通信和联系,尤其是与使用者进行交流。人机接口是其重要的交互界面。常用的人机交互装置有:显示器、键盘、打印机等。本章我们将介绍显示器和键盘的设计。
显示器接口设计 单片机系统常用的显示器有:LED显示器和LCD显示器。 LEDLight Emitting Diode Light Emitting Diode Display Device LCDLiquid Crystal Display
高电平点亮 h g f …… a a a f f b b g g e c e c d d h h h g f …… a 接地 公共阴极 低电平点亮 h g f e d c b a LED显示器 LED数码管的结构:①共阳极与共阴极 h g f e d c b a 接高电平 公共阳极 单片机系统扩展LED数码管时多用共阳LED: 共阳数码管每个段笔画是用低电平(“0”)点亮的,要求的驱动功率很小;而共阴数码管段笔画是用高电平(“1”)点亮的,要求的驱动功率较大。 通常每个段笔画要串一个限流电阻。
AT89C51 CD4511 共阴LED gfedcb a P1.3P1.2P1.1P1.0 DCBA a f b g e c d h LED数码管的译码:②硬件译码与软件译码 硬件译码 74LS48/CD4511是“BCD码→七段共阴译码/驱动”IC; 74LS47是“BCD码→七段共阳译码/驱动”IC 硬件译码特点:采用专用的译码/驱动器件,驱动功率较大;增加了硬件的开销;软件编程简单;字型固定
+5V 80C52 P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7 a f b g e c d h 共阳LED 软件译码 软件译码特点: 不用专用的译码/驱动器件,驱动功率较小;不增加硬件的开销;软件编程较复杂;字型灵活。
h g f e d c b a 接高电平 公共阳极 高电平点亮 h g f …… a a a f f b b g g e c e c d d h h h g f …… a 低电平点亮 公共阴极 接地 h g f e d c b a LED数码管的软件译码 八段LED数码管段代码编码表(连线不同可有多种表): 设:h g f e d c b a D7D6D5D4D3D2D1D0
LED数码管的显示方式:③静态显示与动态显示 静态显示: 各数码管在显示过程中持续得到送显信号,与各数码管接口的I/O口线是专用的。 动态显示: 各数码管在显示过程中轮流得到送显信号,与各数码管接口的I/O口线是共用的。 静态显示特点: 无闪烁,用元器件多,占I/O线多,无须扫描,节省CPU时间,编程简单。 动态显示特点: 有闪烁,用元器件少,占I/O线少,必须扫描,花费CPU时间,编程复杂。(有多个LED时尤为突出)
+5V P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 段代码 共阳 数码管 P89C52 P1.5 P1.4P1.3P1.2P1.2P1.0 位选线 LED数码管动态显示举例 工作原理:从P0口送段代码,P1口送位选信号。段码虽同时到达 6个LED,但一次仅一个LED被选中。利用“视觉暂留”,每送一个字符并选中相应位线,延时一会儿,再送/选下一个……循环扫描即可。
要求:此处为共阳数码管,P0口送段代码,P1口送位选信号。要求:此处为共阳数码管,P0口送段代码,P1口送位选信号。 实现动态显示。 条件:待显数据存放在数组seg[0]~seg[5] 数字0~9的段代码已放在:BUF[0] ~BUF[9]中。 # include <reg52.h> …… void display( ) unsigned char code BUF[10]= {0xc0,0xf9,0xa4,0xb0,ox99,0x92,0x82,0x80,0x90,0x88,0x83}; unsigned char seg[ 6 ]; void display( ) { unsigned char i , j, temp; temp =0x01; for( i=0; i<6; i++) { P1 = temp; P0 = BUF[ seg[ i ] ]; for( j=0; j<50; j++) _nop_( ); temp=temp*2; } }
LCD接口设计 LCD是一种与LED不同的被动式的显示设备,液晶本身并不发光,它是利用液晶在电压的作用下能够改变光线通过的方向的特性而达到显示白底黑字或黑底白字的目的。
液晶:实质上是一种物质态,有人称之为第四态液晶:实质上是一种物质态,有人称之为第四态 • 1888年奥地利植物学家F.REINITZER发现液晶 • 当时德国物理学家将其命名为Flissende krystalle • 英文翻译为Liquid crystal,中文翻译为液晶用它制成的显示器件称为LCD(Liquid crystal Display) • 1961年,美国RCA公司普林斯顿实验室的年轻电子学者F. Heimeier把电子学的知识用于研究化学。在研究外部电场对晶体内部电场的影响时,他使用了液晶。他将两片透明导电玻璃之间夹上掺有颜料的液晶,当在液晶层的两面施加以几伏的电压时,液晶层就由红色变成透明态。根据这一现象,进而研制出一系列数字、字符显示器件。
LCD的特点: • 工作电流比LED小几个数量级; • 尺寸小,厚度约为LED的1/3; • 工作温度范围较窄; • 响应速度低。
常见的LCD显示器有:笔画式和点阵式两种 笔画式LCD的字型由硬件直接形成,每种字型对应相应的字码。驱动编程简单。字型固定。 笔画式 点阵式LCD的显示由一个一个的点像素构成。字型由软件控制各个像素的亮和灭来实现。驱动编程较为复杂。字型灵活。 点阵式
HD61202U是带显示存储器的图形液晶显示列驱动控制器。它的特点是内置64×64位的显示存储器,显示屏上各像素点的显示状态与显示存储器的各位数据一一对应,显示存储器的数据直接作为图形显示的驱动信号。显示数据为“1”,相应的像素点显示;显示数据为“0“,相应的像素点就不显示。同时HD61202U配备了一套显示存储器的管理电路和与计算机接口电路,允许计算机直接访问显示存储器,也就是说HD61202U可以直接与计算机的总线连接。但是HD61202U不能独立工作,因为它本身不能生成显示时序,所以HD612O2U需要与相应的带振荡器和显示时序发动器的行驱动器HD61203U配套才能形成一个完整的液晶驱动和控制系统。HD61202U是带显示存储器的图形液晶显示列驱动控制器。它的特点是内置64×64位的显示存储器,显示屏上各像素点的显示状态与显示存储器的各位数据一一对应,显示存储器的数据直接作为图形显示的驱动信号。显示数据为“1”,相应的像素点显示;显示数据为“0“,相应的像素点就不显示。同时HD61202U配备了一套显示存储器的管理电路和与计算机接口电路,允许计算机直接访问显示存储器,也就是说HD61202U可以直接与计算机的总线连接。但是HD61202U不能独立工作,因为它本身不能生成显示时序,所以HD612O2U需要与相应的带振荡器和显示时序发动器的行驱动器HD61203U配套才能形成一个完整的液晶驱动和控制系统。
HD61202U的主要特性为: ·拥有64×64位(512字节)的显示存储器,其数据直 接作为显示驱动信号。 ·8位并行数据接口,适配M6800系列时序。 ·64路列驱动输出。 ·简单的操作指令 显示开关设置,显示起始行设置, 地址指针设置和数据读/写等指令。 ·低功耗,在显示期间功耗最大为2mW。 ·宽电压工作 Vcc=2.7V~5.5V Vee=OV~-10V
精电MGLS12864模块的电路特性 模块的接口定义如下表所示
HD61202U的操作时序图 E R/W /CS1 /CS2 D/I D0-D7 write D0-D7 read
内置HD61202U图形液晶显示模块的软件特性 了解内置HD61202U图形液晶显示模块的电路特性后,要使用内置HD612O2U图形液晶显示模块还需要熟悉其软件特性,即HD61202U的指令功能,才能很好地应用内置HD61202U图形液晶显示模块。指令一览表如下表所示。
●读状态字(Status Read) 格式 BUSY O ON/OFF RESET 0 0 0 0 状态字是计算机了解HD61202U当前状态,或是HD612O2U向计算机提供其内部状态的唯一的信息渠道。状态字为一个字节,其中仅有3位有效位,它们是: BUSY 表示当前 HD61202U接口控制电路运行状态。BUSY=1表示 HD61202U正在处理计算机发来的指令或数据。此时接口电路被封锁,不能接受除读状态字以外的任何操作。BUSY=0表示 HD61202U接口控制电路已处于“准备好”状态,等待计算机的访问。 ON/OFF 表示当前的显示状态。ON/OFF=l表示关显示状态,ON/OFF=0表示开显示状态。 RESET 表示当前 HD61202U的工作状态,即反映RST端的电平状态。当RST为低电平状态时,HD61202U处于复位工作状态,RESET=1。当RST为高电平状态时,HD61202U为正常工作状态,RESET=0。 在指令设置和数据读写时要注意状态字中的BUSY标志。只有在BUSY=0时,计算机对HD61202U的操作才能有效。因此计算机在每次对HD61202U操作之前,都要读出状态字判断BUSY是否为“0”。若不为“0”,则计算机需要等待,直至BUSY=0为止。
●显示开关设置(Display on/off) 格式 0 O 1 1 1 1 1 D 该指令设置显示开/关触发器的状态,由此控制显示数据锁存器的工作方式,从而控制显示屏上的显示状态。D位为显示开/关的控制位。当D=1为开显示设置,显示数据锁存器正常工作,显示屏上呈现所需的显示效果。此时在状态字中 ON/OFF=0。当 D=0为关显示设置,显示数据锁存器被置零,显示屏呈不显示状态,但显示存储器并没有被破坏,在状态字中 ON/OFF=1。
●显示起始行设置(Display Start Line) 格式 1 1 L5 L4 L3 L2 L1 L0 该指令设置了显示起始行寄存器的内容。HD612O2U有64行显示的管理能力,该指令中 L5~LO为显示起始行的地址,取值在O~3FH(1~64行)范围内,它规定了显示屏上最顶一行所对应的显示存储器的行地址。如果定时间隔地,等间距地修改(如加一或减一)显示起始行寄存器的内容,则显示屏将呈现显示内容向上或向下平滑滚动的显示效果。
●页面地址设置[Set Page(X address)] 格式 1 O 1 1 1 P2 P1 P0 该指令设置了页面地址—X地址寄存器的内容。HD61202U将显示存储器分成8页,指令代码中P2~PO就是要确定当前所要选择的页面地址,取值范围为0~7H,代表第l~8页。该指令规定了以后的读/写操作将在哪一个页面上进行。 ●列地址设置(Set Y address) 格式 0 1 C5 C4 C3 C2 C1 C0 该指令设置了Y地址计数器的内容,C5~CO=O~3FH(1~64)代表某一页面上的某一单元地址,随后的一次读或写数据将在这个单元上进行。Y地址计数器具有自动加一功能,在每一次读/写数据后它将自动加一,所以在连续进行读/写数据时,Y地址计数器不必每次都设置一次。页面地址的设置和列地址的设置将显示存储器单元唯一地确定下来,为后来的显示数据的读/写作了地址的选通。
●写显示数据(Write Display Data) 格式 数 据 该操作将8位数据写入先前已确定的显示存储器的单元内。操作完成后列地址计数器自动加一。 ●读显示数据(Read Display Data) 格式 数 据 该操作将HD61202U接口部的输出寄存器内容读出,然后列地址计数器自动加一。
内置HD612O2U图形液晶显示模块的接口技术 一、直接访问方式 直接访问方式就是将液晶显示模块的接口作为存储器或 I/O设备直接挂在计算机总线上,计算机以访问存储器或I/O设备的方式操作液晶显示模块的工作。直接访问方式的接口实用电路如下图所示。在图中,计算机8031通过高位地址A11控制CSB;A10控制CSA;以选通液晶显示屏上各区的控制器HD61202U;同时8031用地址A9作为R/W信号控制数据总线的数据流向;用地址A8作为D/I信号控制寄存器的选择;E信号由8031的读信号RD和写信号WR合成产生。从而实现计算机对内置HD61202U图形液晶显示模块的电路连接。电位器用于显示对比度的调节。
二、间接控制方式 间接控制方式是计算机通过自身的或系统中的并行接口与液晶显示模块连接,如8031的P1和P3口,8255或Z80-PIO等并行接口芯片以及像74LS373类的锁存器等。计算机通过对这些接口的操作,以达到对液晶显示模块的控制。这种方式的特点是电路简单,控制时序由软件实现,可以实现高速计算机与液晶显示模块的接口。实用电路图如下图所示。在图中电路中以8031的P1口作为数据口,P3.O控制CSA,P3.l控制CSB,P3.2控制D/I,P3.3控制R/W和P3.4控制E等信号。电位器用于显示对比度的调节。
驱动子程序如下: ;---------------------------------- ;端口定义 ;---------------------------------- CSA EQU P3.0 ;片选CSA CSB EQU P3.1 ;片选CSB D/I EQU P3.2 ;寄存器选择信号 R/W EQU P3.3 ;读/写选择信号 E EQU P3.4 ;使能信号
1.左区驱动子程序 (1)写指令代码子程序(左) PRLO; CLR CSA ;片选设置为“00” CLR CSB CLR D/I ;D/I=0 SETB R/W ;R/W=1 PRL01: MOV P1,#OFFH ;P1口置“1” SETB E ;E=1 MOV A,P1 ;读状态字 CLR E ;E=0 JB ACC.7,PRL01 ;判“忙”标志为“0”否,否再读 CLR R/W ;R/W=0 MOV P1,COM ;写指令代码 SETB E ;E=1 CLR E ;E=0 RET
(2)写数据代码子程序(左) PRL1; CLR CSA ;片选设置为“00” CLR CSB CLR D/I ;D/I=0 SETB R/W ;R/W=1 PRL11: MOV P1,#OFFH ;P1口置“1” SETB E ;E=1 MOV A,P1 ;读状态字 CLR E ;E=0 JB ACC.7,PRL11 ;判“忙”标志为“0”否,否再读 CLR R/W ;R/W=0 MOV P1,DAT ;写指令代码 SETB E ;E=1 CLR E ;E=0 RET
(3)读数据代码子程序(左) PRL2; CLR CSA ;片选设置为“00” CLR CSB CLR D/I ;D/I=0 SETB R/W ;R/W=1 PRL21: MOV P1,#OFFH ;P1口置“1” SETB E ;E=1 MOV A,P1 ;读状态字 CLR E ;E=0 JB ACC.7,PRL21 ;判“忙”标志为“0”否,否再读 SETB D/I ;D/I=1 MOV P1,#OFFH ;P1口置“1” SETB E ;E=1 MOV DAT,P1 ;读显示数据 CLR E ;E=0 RET
2.右区驱动子程序 (1)写指令代码子程序(右) PRLO; SETB CSA ;片选设置为“10” CLR CSB CLR D/I ;D/I=0 SETB R/W ;R/W=1 PRL01: MOV P1,#OFFH ;P1口置“1” SETB E ;E=1 MOV A,P1 ;读状态字 CLR E ;E=0 JB ACC.7,PRL01 ;判“忙”标志为“0”否,否再读 CLR R/W ;R/W=0 MOV P1,COM ;写指令代码 SETB E ;E=1 CLR E ;E=0 RET
(2)写数据代码子程序(右) PRL1; SETB CSA ;片选设置为“10” CLR CSB CLR D/I ;D/I=0 SETB R/W ;R/W=1 PRL11: MOV P1,#OFFH ;P1口置“1” SETB E ;E=1 MOV A,P1 ;读状态字 CLR E ;E=0 JB ACC.7,PRL11 ;判“忙”标志为“0”否,否再读 CLR R/W ;R/W=0 MOV P1,DAT ;写显示数据 SETB E ;E=1 CLR E ;E=0 RET
(3)读数据代码子程序(右) PRL2; SETB CSA ;片选设置为“10” CLR CSB CLR D/I ;D/I=0 SETB R/W ;R/W=1 PRL21: MOV P1,#OFFH ;P1口置“1” SETB E ;E=1 MOV A,P1 ;读状态字 CLR E ;E=0 JB ACC.7,PRL21 ;判“忙”标志为“0”否,否再读 SETB D/I ;D/I=1 MOV P1,#OFFH ;P1口置“1” SETB E ;E=1 MOV DAT,P1 ;读显示数据 CLR E ;E=0 RET
内置HD61202U图形液晶显示模块的应用软件 初始化子程序: INT:MOV COM,#0C0H;设置显示起始行为第一行 LCALL PRL0 LCALL PRM0 LCALL PRR0 MOV COM,#3FH;开显示设置 LCALL PRL0 LCALL PRM0 LCALL PRRO RET
清显示RAM区(清屏)子程序 CLEAR: MOV R4, #00H ;页面地址暂存器设置 CLEAR1:MOV A, R4 ORL A, #OB8H ;“或”页面地址设置代码 MOV COM, A ;页面地址设置 LCALL PRLO LCALL PRM0 LCALL PRR0 MOV COM, #40H ;列地址设置为“0” LCALL PRLO LCALL PRM0 LCALL PRRO MOV R3, #40H ;一页清 64个字节 CLEAR2:MOV DAT, #00H ;显示数据为“0” LCALL PRL1 LCALL PRM1 LCALL PRR1 DJNZ R3, CLEAR2 ;页内字节清零循环 INC R4 ;页地址暂存器加一 CJNE R4, #08H,CLEAR1 ;RAM区清零循环 RET
COLUMN EQU 30H ;列地址寄存器 PAGE EQU 31H ;页地址寄存器D2,D1,DO:页地址 ;D7:字符体 D7=0为6 × 8点阵 ;D7=1为8 × 8点阵 CODE EQU 32H ;字符代码寄存器 COUNT EQU 33H ;计数器
CW_PR:MOV DPTR,#CTAB ;确定字符字模块首地址 MOV A,CODE ;取代码 MOV B,#08H ;字模块宽度为8个字节 MUL AB ;代码×8 ADD A,DPL ;字符字模块首地址 MOV DPL,A ;=字模库首地址十代码× 8 MOV A,B ADDC A,DPH MOV DPH,A MOV CODE,#00H ;借用为间址寄存器 MOV A,PAGE ;读页地址寄存器 JB ACC.7,CW_1 ;判字符体 MOV COUNT,#06H ;6 × 8点阵 LJMP CW_2 CW_ 1: MOV COUNT,#08H ;8 × 8点阵 CW_ 2: ANL A,#07H ;取页地址值
ORL A,#OB8H ;“或”页地址指令代码 MOV COM,A ;写页地址指针 LCALL PRL0 LCALL PRM0 LCALL PRR0 MOV A,COLUMN ;读列地址寄存器 CLR C SUBB A,#40H ;列地址一 64 JC CW_3 ;<0为左屏显示区域 MOV COLUMN,A SUBB A,#40H ;列地址一64 JC CW_21 ;<0为中屏显示区域 MOV COLUMN,A ;≥O为右屏显示区域
MOV A,PAGE SETB ACC.5 ;设置区域标志位, MOV PAGE,A ;“00”为左,“01”为中,“10“为右 LJMP CW_3 CW_21:MOV A,PAGE SETB ACC.4 ;设置区域标志位 MOV PAGE,A CW_3:MOV COM,COLUMN;设置列地址位 ORL COM,#40H;“或”列地址指令标志让 MOV A,PAGE ;判区域标志以确定设置哪个控制器 ANL A,#30H CJNE A,#10H,CW_31;“01“为中区 LCALL PRM0 LJMP CW_4 CW_31: CJNE A,#20H,CW_32 ;“10”为右区 LCALL PRRO LJMP CW_4 CW_32: LCALL PRLO ;“00“为左区
CW_4:MOV A,CODE ;取间址寄存器值 MOVC A,@A+DPTR ;取字符字模数据 MOV DAT,A ;写数据 MOV A,PAGE ;判区域标志 ANL A,#30H CJNE A,#10H,CW_41 ;“01”为中区 LCALL PRM1 LJMP CW_5 CC_41: CJNE A,#20H,CW_42 ;“10”为右区 LCALL PRR1 LJMP CW_5 CW_42: LCALL PRL1 ;“00“为左区 CW_5: INC CODE ;间址加一 INC COLUMN ;列地址加一 MOV A,COLUMN;判列地址是否超出区域范围 CJNE A,#40H,CW_6 CW_6: JC CW_9 ;未超出则继续 MOV COLUMN,#00H
MOV A,PAGE ;超出则判在何区域 JB ACC.5,CW_9 ;在右区域则退出 JB ACC.4,CW_61 ;判在左区或中区 SETB ACC.4 ;在左区则转中区 MOV PAGE,A MOV COM,#40H ;设置中区列地址为“0“ LCALL PRM0 LJMP CW_9 CW_61:SETB ACC.5 ;在中区则转右区 CLR ACC.4 M0V PAGE,A MOV COM,#4OH ;设置右区列地址为“0“ LCALL PRR0 CW_9: DJNZ COUNT,CW_4 ;循环 RET ;―――――――――――――――――――――――――― CTAB:(西文字符字库表,略)
键盘接口设计 键盘是人机交互中的重要的输入设备,价格低廉,结构简单,使用方便,在单片机系统中得到广泛的应用。 单片机与计算机在键盘规模/键符设置等方面差别很大。本节将介绍单片机系统中常用的键盘。
键盘分类 按键值编码方式分 (硬件)编码键盘与非(硬件)编码键盘。 按键组连接方式分 独立连接键盘与矩阵连接键盘。
编码键盘:采用专用的编码/译码器件,被按下的键由该器件译码输出相应的键码/键值。编码键盘:采用专用的编码/译码器件,被按下的键由该器件译码输出相应的键码/键值。 特点:增加了硬件开销,编码因选用器件而异,编码固定,但编程简单。适用于规模大的键盘。 非编码键盘:单片机系统多采用此类键盘 采用软件编码/译码的方式,通过扫描,对每个被按下的键判别输出相应的键码/键值。 特点:不增加硬件开销,编码灵活,适用于小规模的键盘,特别是单片机系统。但编程较复杂,占CPU时间,还须软件“消颤”。 按键值编码方式:编码键盘与非编码键盘