首页 理论教育 MSP430单片机的键盘和显示器应用案例

MSP430单片机的键盘和显示器应用案例

时间:2023-12-05 理论教育 版权反馈
【摘要】:4键盘和显示器的应用在单片机应用系统中,键盘和显示器是非常重要的人机接口。常用输入设备主要是键盘,常用输出设备包括发光二极管、数码管和液晶显示器等。当按下某键时,将显示相应的数值。图4.54×4矩阵式键盘实例4.2矩阵键盘编号显示任务要求:将4×4矩阵式键盘编号,如果其中一个按键闭合,则在LED数码管上显示相应的按键编号。

MSP430单片机的键盘和显示器应用案例

4 键盘和显示器的应用

单片机应用系统中,键盘和显示器是非常重要的人机接口。人机接口是指人与计算机系统进行信息交互的接口,包括信息的输入和输出。常用输入设备主要是键盘,常用输出设备包括发光二极管数码管和液晶显示器等。

4.1 键盘输入

键盘用于实现单片机应用系统中的数据信息和控制命令的输入,按结构可分为编码键盘和非编码键盘。编码键盘上闭合键的识别由专用的硬件编码器实现,并产生相应的键码值,如计算机键盘。非编码键盘是通过软件的方法产生键码,不需要专用的硬件电路。为了减少电路的复杂程度,节省单片机的I/O端口,在单片机应用系统中广泛使用非编码键盘,主要对象是各种按键或开关。这些按键或开关可以独立使用(称之为独立键盘),也可以组合使用(称之为矩阵式键盘)。

4.1.1 按键电路与按键抖动处理

按键电路连接方法非常简单,如图4.1所示。此电路用于通过外力使按键瞬时接通开关的场合,如单片机的RESET电路中,通过按键产生一个瞬时的低电压,CPU感知这个低电压后重启。

由于按键的闭合与断开都是利用其机械弹性实现的,当机械触点断开、闭合时,会产生抖动,这种抖动操作用户感觉不到,但对CPU来说,其输出波形会明显发生变化,如图4.2所示。

按键闭合和断开时的抖动时间一般为10~20 ms,按键的稳定闭合期由操作用户的按键动作决定,一般为几百毫秒至几秒,而单片机CPU的处理速度在微秒级。因此,按键的一次闭合,有可能导致CPU的多次响应。为了避免这种错误操作,必须对按键电路进行去抖动处理。常用的去抖动方法有硬件方式和软件方式两种。

使用硬件去抖动,需要在按键连接的硬件设计上增加去抖动电路,比如将按键输出信号经过R-S触发器或RC积分电路后再送入单片机,就可以保证按一次键只发出一个脉冲。

软件方式去抖动的基本原理是在软件中采用时间延迟,对按键进行两次测试确认,即在第一次检测到按键闭合后,间隔10 ms左右,再次检测该按键是否闭合,只有在两次都测到按键闭合时才最终确认有键按下,这样就可以避开抖动时间段,消除抖动影响。同样,在按键断开时也采用相同方法。由于人的按键速度比单片机的运行速度要慢很多,所以,软件延时方法从技术上完全可行,而且经济上更加实惠,因此被广泛采用。

图4.1 按键复位电路

图4.2 按键断开、闭合时的电压抖动波形

4.1.2 独立键盘检测

独立键盘是一种最简单的键盘,前面章节已经介绍过使用独立键盘的实例。独立按键的每个键单独占用一根I/O端口线,每根I/O端口线上的按键工作状态不会影响其他I/O线的工作状态。

实例4.1 独立按键编号显示

任务要求:单片机端口连接三个按键,从1~3进行编号;如果其中一个按键闭合时,则在LED数码管上显示相应的按键编号。

1)硬件电路设计

选取MSP430F249单片机的P1端口连接数码管显示按键编号,P3端口的P3.0、P3.1、P3.2端口分别和三个按键连接。硬件电路如图4.3所示。

三个I/O端口P3.0、P3.1、P3.2作为输入端口(输入方式),分别与K1、K2、K3三个按键连接。当按键断开时,I/O端口的输入为电平;按键闭合时,I/O端口的输入为低电平。此三个引脚上接了上拉电阻,是为了保证按键断开时逻辑电平为高。

2)程序设计

按键闭合时,与该键相连的I/O引脚为低电平;按键断开时,与该键相连的I/O引脚为高电平。所以在程序中通过P3IN寄存器读取P3.0、P3.1、P3.2这三个I/O端口的电平状态,便可检测按键是否闭合。另外,在有按键闭合时,要有一定的延时,以防止由于键盘抖动而引起误操作。当确认某按键闭合后,就让数码管显示其按键编号。

图4.3 独立键盘检测电路图

程序说明:当按键闭合时,P3端口的低三位将不全为高电平。在Read Key函数中,当判断P3的低三位不全为1,即0x07时,则认为有按键闭合,然后延迟20 ms,再次判断P3的低三位;如果低三位依旧不全为1,可以确定是有键按下,并获取键值后显示在数码管上。

3)仿真结果与分析

双击MSP430F249单片机,装载可执行文件。运行时,LED最初没有显示。当按下某键时,将显示相应的数值。图4.4为编号是“3”的按键闭合时的仿真效果图。

图4.4 独立键盘检测的仿真效果图

4.1.3 矩阵式键盘检测

独立键盘与单片机连接时,每一个按键开关占用一个I/O端口线,若单片机系统中需要较多按键,独立按键的方式便会占用过多的I/O端口资源。此时,为了节省I/O端口线,采用矩阵式键盘(也称为行列式键盘)。

下面以4×4矩阵式键盘为例讲解其工作原理和检测方法。将16个按键排成4 行4列,将第一行每个按键的一端连接在一起构成行线,将第一列每个按键的另一端连接在一起构成列线,这样便有4行4列共8根线,如图4.5所示。将这8根线连接到单片机的8个I/O端口上,即可通过程序扫描键盘检测到哪个键闭合,具体方法见实例4.2。

图4.5 4×4矩阵式键盘

实例4.2 矩阵键盘编号显示

任务要求:将4×4矩阵式键盘编号,如果其中一个按键闭合,则在LED数码管上显示相应的按键编号。

分析说明:4×4矩阵式键盘只需要占用一个8位的端口,硬件电路的设计较为简洁,重点在于如何在程序中判断矩阵键盘的按键位置。

1)硬件电路设计

选取MSP430F249单片机的P1端口连接数码管,P3端口的8个引脚分别和矩阵式键盘的行线和列线连接。硬件电路如图4.6所示。

图4.6中,列线P3.4~P3.7通过上拉电阻连接电源,处于输入状态;行线P3.0~P3.3为输出状态。键盘上没有按键闭合时,所有列线P 3.4~P 3.7的输入全部为高电平。当键盘上某个按键闭合时,则对应的行线和列线短接。例如A号键闭合时,行线P3.1和列线P3.5短接,此时P3.5输入电平由P3.2的输出电平决定。

在检测是否有键闭合时,先使4条行线全部输出低电平,然后读取4条列线的状态。如果全部为高电平则表示没有任何键闭合;如果有任一键闭合,由于列线是上拉至VCC的,则行线上读到的将是一个非全“1”的值。

图4.6 矩阵式键盘电路原理图

2)程序设计

确定矩阵式键盘上哪个键闭合通常采用行扫描法,又称为逐行(或列)扫描查询法,其软件主要基于扫描方式完成。关于键盘扫描查询的程序大致可分为以下几个步骤。

(1)检测当前是否有键闭合。

首先看输入的列线,假设4条行线都输出低电平,4条列线都是上拉至VCC的,在没有任何键闭合时,4条列线输入都为“1”。但当与某一条行线相连的4个键中的任何一个闭合时,这条列线将输入低电平,即当某条列线输入低电平时,必定是连接在这条列线上的某个键闭合了。

(2)去除键抖动。

当检测到有键闭合后,延长一段时间再作下一步的检测判断。

(3)若有键闭合,检测出是哪一个键闭合。

逐行扫描方式:在4条行线上分别输出“0”信号。第一次,在P3.0上输出低电平,其他的行线(P3.1、P3.2、P3.3)上输出高电平;第二次,在P3.1上输出低电平,其他的行线(P3.0、P3.2、P3.3)上输出高电平;第三次,在P3.2上输出低电平,其他的行线(P3.0、P3.1、P3.3)上输出高电平;第四次,在P3.3上输出低电平,其他的行线(P3.0、P3.1、P3.2)上输出高电平。当某一行线上输出低电平时,如果此行上有键被按下,那么相应键的列线上就会读取到“0”,于是可以唯一的确定是哪一个键闭合了。

假设图4.6中编号为“6”的键闭合,第一次扫描时,P3.0端口输出“0”,P3.1、P3.2、P3.3输出“1”,则P3.4~P3.7所读到的电平全为“1”;第二次扫描时,P3.1端口输出“0”,P3.0、P3.2、P3.3输出“1”,此时,P3.4、P3.5、P3.6、P3.7读到的电平分别为“1”、“1”、“0”、“1”,由此即可确定P3.1行线和P3.6列线交叉的编号“6”键的具体位置。

矩阵式键盘的按键检测过程如图4.7所示。

图4.7 矩阵式键盘按键检测流程图

此实例的源程序如下。

程序说明:主程序通过调用键盘扫描程序获取键值,并通过数码管显示出键盘编号。键盘扫描首先通过读取列线输入,如果不是全为1,则延迟20 ms后再次判断列线是否全为1;如果依旧不是全为1,可以确定是稳定的按键动作;通过逐行扫描的方式得到按键的位置。从程序上来看还存在两个问题:一是按键扫描中延迟去抖需要20 ms的时间,浪费了单片机的运算资源;二是在扫描到按键后如果按键闭合不动,主程序会得到多个相同的键值,即重复按键,这种情况可以通过判断按键弹起的动作予以解决。

3)仿真结果与分析

装载可执行文件,运行后的仿真结果如图4.8所示。

图4.8 矩阵式键盘仿真电路图

4.2 LED点阵显示

LED点阵显示器由发光二极管LED按矩阵的方式排成一个n×m的点阵,每个发光二极管构成点阵中的一个点。这种点阵显示器不仅可以静态的显示信息,而且可以通过动态滚动,增加信息显示的容量和效果,因此应用十分广泛。

4.2.1 LED点阵显示原理

LED点阵显示器的分类有多种方法:按阵列点数可分为5×7、5×8、6×8、8×8 等4种,按发光颜色可分为单色、双色、三色等3种;按极性排列方式可分为共阳极型和共阴极型等2种。

图4.9所示为常见的8×8 LED点阵显示器,它由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上。当对应的某一行置1电平,某一列置0电平,则相应的发光二极管就亮。如要将第一个发光二极管点亮,则将第9脚接高电平,第13脚接低电平;如果要将第一行点亮,则将第9脚要接高电平,而将第13、3、4、10、6、11、15、16引脚接低电平;如要将第一列点亮,则将第13脚接低电平,而第9、14、8、12、1、7、2、5引脚接高电平。

从原理上来说,模块没有共阳或共阴之分,共阳的翻转90°就是共阴的了,共阴的翻转90°就是共阳的了。但电路会有行扫描接阴或行扫描接阳之分。

显示单个字母、数字时,只需要一个5×7的LED点阵显示器即可;显示汉字时,需要使用多个LED点阵显示器组合,最常见的组合方式有15×14、16×15、16×16、32×32等。例如,一个16×16的点阵由4个8×8点阵组合而成,即每一个汉字在纵、横各16点的区域内显示,有笔画经过地方的发光二极管都为点亮状态(即“1”),没有笔画经过的发光二极管都为熄灭状态(即“0”),这样就可以表示不同的汉字。

图4.9 8×8 LED点阵管脚图

LED点阵显示器与LED数码管类似,常用的工作方式有静态显示和动态显示两种。所谓静态显示,就是当显示器显示一个字符时,相应的发光二极管始终保持导通或截止,在显示的过程中,其状态是静止不变的,直到一个字符显示完毕、将要显示下一个字符时其状态才改变。而动态显示则不同,它在显示每一个字符的过程中,都是按列(或行)不停扫描,一位一位地轮流点亮要显示的每个位,如此反复循环。动态显示方式利用了人眼的视觉暂留性质,当扫描的速度足够快时,可以得到静态显示的效果。由于LED点阵引脚设计的特殊性,一般采用动态扫描显示方式。

下面介绍用动态扫描方式在8×8共阳极LED点阵显示器上显示字符“B”的过程,如图4.10所示,由此简要说明动态扫描的原理。

图4.10 用动态扫描方式显示字符“B”的过程

假设X、Y为两个8位的字节型数据,X的每位对应LED点阵的8条列线X7~ X0;同样,Y的每位对应LED点阵的8条行线Y7~Y0。Y为行扫描线,在每个时刻只有一条为“1”,即有效行选通电平;X为列数据线,其内容就是点阵化的字模数据的体现。

①Y=0x01,X=0x FF,如图4.10中的第一帧;

②Y=0x02,X=0x87,如图4.10中的第二帧;

③Y=0x04,X=0xBB,如图4.10中的第三帧;

④Y=0x08,X=0xBB,如图4.10中的第四帧;

⑤Y=0x10,X=0x87,如图4.10中的第五帧;

⑥Y=0x20,X=0xBB,如图4.10中的第六帧;

⑦Y=0x40,X=0xBB,如图4.10中的第七帧;

⑧Y=0x80,X=0x87,如图4.10中的第八帧;

⑨跳到第①步循环。

如果高速地进行①~⑨的循环,且两个步骤的间隔时间小于1/24 s,则由于视觉暂留,LED显示屏上将呈现一个完整的“B”字符。

实例4.3 8×8 LED点阵数字显示

任务要求:利用MSP430F249单片机控制一个8×8 LED点阵显示器,使其循环显示数字0~9。

1)硬件电路设计

选用MSP430F249单片机的P2端口控制LED点阵的行扫描信号,P1端口控制点阵的列显示数据,硬件电路原理如图4.11所示。

图4.11 点阵显示数字字符硬件电路原理图

2)程序设计

程序说明:在主循环中对0~9这10个数字进行循环显示,每个数字扫描次数为255,是为了让每个数字显示时间足够长,得到稳定的显示效果。P2端口送出行扫描信号后,P1端口给出列显示数据。注意,此例中8×8点阵为共阴极接法,显示数据是经过取反后送出的。

3)仿真结果

加载程序后,运行得到仿真效果如图4.12所示。

图4.12 点阵显示数字字符仿真图

4.2.3 16×16汉字点阵显示

与字母和数字显示原理一样,16×16汉字点阵的显示也是采用动态逐行(或逐列)扫描的方式完成,只是列扫描需要16位,而每列数据需要2×8位(2字节),显示一个完整的汉字则需要32字节。

1.点阵驱动电路

实例4.3中,单片机控制一个8×8 LED点阵显示器,需要两组I/O端口,其中一组实现点阵的行扫描,另一组输出列数据。按照这种硬件连接方式,如果利用单片机控制一个16×16汉字点阵实现显示功能,需要8组I/O端口;如果控制多个汉字点阵显示,需要更多的I/O端口。显然,这种连接方式是难以实现的。因此,在多个点阵驱动电路设计中,一般采用移位寄存器的方法来减少对单片机I/O端口的需求。

图4.13 D触发器

寄存器是存放进制数的电路,由D触发器构成,如图4.13所示。在CP时钟信号的上升沿,将输入的数字DI存入D触发器,Q端的输出就与DI相同,即无论触发器Q原来的值是什么,只要时钟脉冲CP上升沿到来,加在数据输入端的数据就立即被送入触发器,当DI端信号消失,输出Q保持不变,数据被保存在触发器中,所以又称为寄存器。将多个寄存器级联,第一级D触发器接输入信号DI,其余触发器输入D接前级输出Q,所有CP连在一起接输入移位脉冲,所有D触发器都在一个CP的上升沿工作,这种电路称为移位寄存器。以4个D触发器构成的4级移位寄存器如图4.14所示。

在移位脉冲的作用下,输入信息的当前数字DI存入第一级D触发器,第一级D触发器的状态存入第二级D触发器,依此类推,低位D触发器存入高位D触发器状态,实现了输入数码在移位脉冲的作用下向左逐位移存。假设所有寄存器初态为0,DI=1101串行送入寄存器输入,如图4.15所示。当第一个移位脉冲上升沿到来后,DI=1,第一个触发器输出Q=D,而因为初始值都为0,所有Q2、Q3、Q4依然为0。当第二个移位脉冲上升沿到来后,DI=1,因此Q1=1,而Q2的值等于触发器Q1之前的输出1,依次类推,当第四个脉冲的上升沿到来后,Q4Q3Q2Q1=1101。

图4.14 4级移位寄存器

图4.15 4级移位寄存器串行移位

在4个CP作用下,输入的4位串行数码1101全部存入寄存器,这种方式称为串行输入。寄存器中的4位数码1101是并行输出,这种方式称为并行输出。当移位脉冲继续产生,而输入全部为0时,可以看到每一个触发器的输出都是在对输入的1101进行移位操作。

移位寄存器的特点如下。

(1)单向移位寄存器中的数字,在CP脉冲操作下,可以依次右移或左移。

(2)n位单向移位寄存器可以寄存n位二进制代码。n个CP脉冲即可完成串行输入工作,此后可从Q1~Q n端获得并行的n位二进制数字,再用n个CP脉冲又可实现串行输出操作。

(3)若串行输入端状态为0,则n个CP脉冲后,寄存器便被清零。

利用移位寄存器串行输入、并行输出的特点,在驱动16×16点阵的列信号时,可以在单片机和点阵之间增加一个8位的移位寄存器。由单片机产生CP时钟信号和所需的串行数据输出信号,在8个CP时钟后,可以将串行数据移入移位寄存器并行输出。因此,这种驱动方式只需要单片机的两个I/O端口,大大节约了单片机的引脚资源。

本书选择点阵显示系统中常用移位寄存器74HC595来实现点阵列数据的串行输入、并行输出功能。74HC595的管脚图和逻辑图如图4.16和图4.17所示。

(www.xing528.com)

图4.16 74HC595管脚图

图4.17 74HC595逻辑功能图

74HC595输入端是8位串行移位寄存器,输出端是8位并行缓存器,具有锁存功能。其管脚功能描述如表4-1所示。

表4-1 74 HC595管脚描述

74HC595的逻辑功能是在串行移位时钟SHCP的上升沿,将串行数据输入DS的数据,从低位到高位依次移入内部的寄存器中,当8个数据都移入后,若OE为低电平,通过STCP的上升沿将8个数据输出到Q0~Q7引脚上。由于74HC595输出电流较大,可以直接驱动LED,因此,在亮度要求不高的设计中,可以直接将74HC595输出端连接到LED点阵。一片74HC595能驱动一个8位的点阵列输入,若需要驱动多个点阵,则可利用74HC595的Q7′串行数据输出端,将多个74HC595串联起来使用,如图4.18所示。

图4.18 多片74HC595级联驱动点阵示意图

另外,由于74HC595串行数据时钟和锁存时钟是独立的,移位时钟SHCP的上升沿将串行数据移入内部的寄存器后,在锁存时钟STCP的作用下才会输出到Q0~Q7。当多片74HC595级联驱动点阵的时候,通过同一个锁存时钟STCP,在所有列数据准备好后,启动锁存信号使所有数据同时锁存并输出,满足多个点阵列数据并行输出的目的。串行数据时钟,串行数据输入对于MSP430单片机可以通过内部的SPI接口实现高速数据传输,也可以采用I/O端口模拟所需的时序的方式。串行数据时钟模拟的方法是按照移位脉冲时序图,利用单片机的I/O端口定时输出高电平或者低电平,以获得所需的时钟信号。对串行数据的输出,可以通过程序判断8位的数据的最高位是否为1,将数据输出端口置高或者置低。并将数据左移一位,循环八次后即可实现输出8位的串行数据。下面以单片机向74HC595串行发送一个字节函数send_byte为例。

其中,DS_L和DS_H分别是单片机I/O端口输出串行数据的宏定义,SHCP_L和SHCP_H是输出串行移位脉冲的宏定义,假定串行数据用P3.1端口,串行移位脉冲用P3.2端口。从程序可以看出,通过软件模拟串行移位方式是参照移位寄存器的时序图实现的,这种方式可以推广到具有串行输入或者输出方式的芯片驱动中。

图4.19 74HC154管脚图

同理,除了列数据输出电路以外,还需要行输出电路实现逐行选通控制功能,即16×16的汉字点阵需要从上到下循环扫描16次,每次扫描过程中某一行被选通,而其他行都要关闭。为减少单片机端口的占用,可以使用74HC154译码器实现点阵行扫描的驱动。

74HC154是一种4线/16线译码器,数据输入端有4位,数据输出端有24=16个。74HC154译码器的管脚如图4.19所示,其输入输出关系如表4.2所示。

表4.2 74HC154的输入输出关系表

从表4-2可以看出,当输入一个0~15的二进制数据时,对应的某个Y引脚输出低电平,而其他输出引脚为高电平,正好满足行扫描的要求。如果需要行扫描时输出高电平,通过74HC154输出端接入反相器即可。值得注意的是,74HC154输出电流只有20 m A,按每一个LED器件需要10 m A计算,16个LED同时发光时,需要160 m A电流,因此实际应用中应增加专用电流驱动电路,如ULN2803或者三极管才能实现行扫描驱动。

要完成16×16点阵的驱动,需要4片74HC595级联实现其列数据输入,其级联方式参照汉字取模的方式。每片74HC595的Q0~Q7连接一个8×8点阵的8根列数据输入引脚,而点阵的行扫描信号连接到一片74HC154的Y0~Y15即可。依照此方式,可以完成更多点阵级联的驱动电路。

2.汉字字模提取

根据前面所述,16×16点阵由4个8×8点阵组成,分别为ABCD四个部分,如图4.20所示。

图4.20 16×16点阵组成示意图

汉字显示需要先获得汉字点阵的数据,才能通过单片机驱动点阵显示,这种获得汉字点阵的方法称为取模,取模方式按照点阵驱动的不同,可以有ABCD、ACBD、BACD、CABD等四种顺序。取模后得到的数据保存在数组中。由于这些数据是常量,在程序设计中一般用const关键字来描述。对于MSP430序列单片机,常量会保存到单片机内部的Flash存储器中,以节省内存空间的占用。汉字取模通常用取模软件完成,如字模提取软件zimo等。本书使用的字模提取软件如图4.21所示。

这里字模提取方式为横向取模,取模顺序为ABCD。比如汉字“中”取模得到的数据为:

0x01,0x00,0x01,0x00,0x01,0x04,0x7F,0x FE,0x41,0x04,0x41,0x04,0x41,0x04,0x41,0x04,0x7F,0x FC,0x41,0x04,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00

数据共32个字节,对照上面提取软件的点阵图像可以看出,0x01对应的是左上的第一行数据,0x00对应的是右上的第一行,如此类推。根据取模的方式,硬件上对74HC595级联时,如果是ABCD这种方式,则是AB级联,CD级联,我们在单片机程序中输出数据的顺序也要按照取模的顺序。

图4.21 字模提取软件

实例4.4 16×64 LED点阵汉字显示

任务要求:利用16个8×8点阵构成4个16×16点阵,显示四个汉字字符“中国你好”。

分析说明:4个16×16点阵用8片74HC595输出列数据驱动,行扫描可以用1 片74HC154译码器实现,将占用单片机I/O端口的资源降到最低,同时也解决了单片机输出电流不足的问题。

1)硬件电路设计

16个8×8点阵构成4个16×16点阵汉字,单片机控制其显示的原理框图如图4.22所示。该点阵为“行共阴极”,即一行中所有的阴极接在一起。16条行选通利用单片机的4个I/O端口控制4线/16线译码器74HC154,实现16条行线的低电平分别选通。每1个8×8点阵的列线由1片8位串入并出移位寄存器74HC595控制。74HC595输出具有锁存功能,使得74HC595锁存显示某一行数据时,单片机可以进行下一行数据的传送。

图4.22中,74HC595首尾串行连接,每两片驱动一个16×16点阵的列,一共有8 片74HC595,所有74HC595共用SHCP和STCP时钟信号,在单片机输出的SHCP驱动下,数据从DS端输入到第一片74HC595的DS端,经过8个时钟脉冲将第一个数据输出到第一片74HC595,在下一个时钟脉冲的作用下,一方面第一片74HC595继续接收数据,另一方面将接收的数据移位输出到第二片74HC595,如此经过16×8 =256个时钟的驱动,可将所有的行数据保存在16个74HC595内部寄存器中,再经过STCP锁存信号驱动输出到LED点阵。同时,单片机此时应输出行的编号,通过74HC154选通行信号点亮汉字字模对应的LED。当所有的行扫描结束后再次循环,从而输出所需的汉字。

图4.22 16×64 LED点阵显示原理框图

按照显示原理框图设计的proteus硬件电路如图4.23所示。

图4.23中,为简化图纸,芯片之间的电路连接都采用网络标号实现。其中P1.0、P1.1、P1.2、P1.3作为74HC154译码器输入信号,P3.0作为锁存时钟信号STCP输出端,P3.1作为串行数据输出端连接到74HC595的DS端,P3.2作为串行移位时钟信号输出端连接到74HC595的SHCP端。

2)程序设计

图4.23 16×64 LED点阵硬件电路图

3)仿真结果与分析

加载程序后运行得到本实例的仿真结果如图4.24所示,可见到点阵上显示“中国你好”字符。

图4.24 16×64点阵显示汉字仿真图

4.3 LCD液晶显示器的应用

LCD液晶显示器(LCD,简称液晶)是一种被动式的显示器,与LED不同,液晶本身并不发光,而是利用液晶在电压作用下能改变光线通过方向的特性,达到显示字符或者图片的目的。LCD由于体积小、重量轻、电压低(工作电压一般为3~5 V)、功耗低(每平方厘米液晶显示屏的耗电量在μA级,主要的功耗是LCD的背光所产生)等优点已在单片机系统中得到广泛使用。近年来液晶显示器技术的发展迅猛,彩色液晶、OLED有机发光液晶显示器、大屏幕显示器也开始用于人—机接口领域。在要求低功耗的电子产品中,如手机万用表等,液晶显示器是首选的显示器。

各种型号的液晶通常是按照显示字符的行数或液晶点阵的行、列数来命名的。比如:1602的意思是每行显示16个字符,一共显示两行;类似的命名还有0801、0802、1601等。这类液晶通常都是点阵字符型液晶,即由点阵字符液晶显示器件和专用的行、列驱动器、控制器及必要的连接件、结构件装配而成,可以显示数字和西文字符,但不能显示图形。12864液晶属于点阵图形型液晶,其点阵像素连续排列,行和列在排布中均没有空格,这种液晶不仅可以显示字符,而且可以显示连续、完整的图形。其命名的意思是液晶由128列、64行组成,即共有128×64个点来显示各种图形、字符和汉字等,我们可以通过程序控制这128×64个点中的任一个点显示或不显示。类似的命名还有12232、19264、320240等。点阵图形型液晶显示器的显示灵活性好,自由度大,如果驱动液晶显示器以一定速度更新,可以实现视频的播放。但点阵图形型液晶显示器的控制复杂,硬件连接线多,且要对点阵数据进行更新,占用单片机的存储空间大。

因此,本章节主要介绍点阵字符型液晶1602的显示应用,通过学习其工作原理和相关指令,让大家掌握液晶显示的程序设计方法。4.3.1 1602引脚功能

1602液晶是把LCD控制器、点阵驱动器、字符存储器全做在一块PCB板上,构成便于应用的显示器模块,实物如图4.25所示。

图4.25 1602液晶实物图

1602 LCD采用标准的14引脚(无背光)或16引脚(背光)接口,芯片和背光电路工作电压与单片机兼容,液晶是否带背光在应用中并无差别。其引脚分电源、通信数据和控制三部分,可以很方便地与单片机进行连接。各引脚接口说明如表4-3所示。

表4-3 1602引脚接口说明

●VDD接5 V正电源,为模块最佳工作电压。

●VL为液晶对比度调整端,接正电源时对比度最低,接地时对比度最高。对比度过高时会产生“鬼影”,使用时可以通过一个10 kΩ的电位器调整对比度。

●RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。

●R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或显示地址;当RS为低电平、R/W为高电平时可以读忙信号;当RS为高电平、R/W为低电平时可以写入数据。

●E端为使能端,当E端从高电平跳变到低电平时,液晶模块执行命令。

●DO~D7为8位双向数据线。

4.3.2 1602时序及指令说明

1.基本时序操作

单片机驱动1602 LCD的主要操作包括读状态、写指令、读数据、写数据等。数据的读写是通过1602 LCD的数据端口D0~D7和RS、R/W、E三个控制端电平组合控制实现的,具体的操作时序如表4-4所示。

表4-4 基本操作时序

在数据或指令的读写过程中,控制端外加电平有一定的时序要求,图4.26、图4.27分别为该器件的读写操作时序图,时序图说明了三个控制端口与数据之间的时间对应关系,这是基本操作的程序设计的基础。

图4.26 读操作时序

2.控制指令

1602 LCD模块内部的控制器共有11条控制指令,各指令利用2位16进制代码表示,如表4-5所示。

图4.27 写操作时序

表4-5 1602 LCD控制指令集

●清屏指令代码为0x01。单片机向1602的数据端口写入0x01后,1602自动将本身DDRAM的内容全部填入“空白”的ASCII代码0x20,并将地址计数器AC的值设为0,同时光标归位,即将光标撤回液晶显示屏的左上方。此时显示器无显示。

●光标归位指令代码为0x02或0x03。其主要功能是把地址计数器(AC)的值设置为0,保持DDRAM的内容不变,同时把光标撤回到显示器的左上方。

●模式设置指令中,当I/D为0时,写入新数据后光标右移;当I/D为1时,写入新数据后光标左移,显示屏幕不移动。当S=0时,写入新数据后显示屏幕不移动;当S=1时,写入新数据后显示屏幕整体右移1个字符。如指令代码为0x06时,光标随写入数据自动右移。

●显示开关控制指令中,D为0时关显示功能,为1时开显示功能;C为0时无光闪烁,C为1时有光闪烁;B为0时光标闪烁,为1时光标不闪烁。如指令码为0x0C,设置为显示功能开,无光标,光标不闪烁。

●屏幕光标指令中,S/C、R/L设定为0、0时光标左移1格,且AC减1;S/C、R/L设定为0、1时光标右移1格,且AC加1;S/C、R/L设定为1、0时显示器上的字符左移1格,光标不动;S/C、R/L设定为1、1时显示器上的字符右移1格,光标不动。如指令码0x14,设置为AC+1,光标右移1格(打字的效果)。

●功能设定指令主要是设置1602的初始工作状态。其中DL为0时,数据总线为4位,DL为1时,数据总线为8位;N为0时显示1行,N为1时显示2行;F为0时,1602显示的一个字符为5×7点阵,为1时为5×10点阵。如指令码为0x38,1602被设置成为8位并行数据接口,显示2行,5×7点阵显示。

●设定CGRAM/DDRAM(字符发生存储器地址/数据存储器地址)指令有0x40+地址、0x80+地址两个。0x40是设定CGRAM地址的命令,地址是指你要设置的CGRAM地址;0x80是设定DDRAM地址的命令,地址是指要写入的DDRAM地址。

●读取忙信号或AC地址指令中,RS=0、R/W=1,单片机读取忙信号BF的内容。当BF=1时,表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF =0时,液晶显示器可以接收单片机送来的数据或指令,同时单片机读取地址计数器(AC)的内容。

●写入CGRAM/DDRAM数据操作中,RS=1、R/W=0,单片机可以将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符,也可以将用户自己设计的图形存入CGRAM。

●从CGRAM/DDRAM读数据指令中,RS=1、R/W=1,单片机读取DDRAM或CGRAM中的内容。

4.3.3 1602的RAM地址映射及标准字库表

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志是否为低电平,如果是低电平则表示不忙(空闲),否则此指令失效。显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图4.28所示的是1602液晶的内部显示地址。

图4.28 1602液晶内部RAM地址映射图

例如,第二行第一个字符的地址是0x40,那么是否直接写入0x40就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1,所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。

初始化液晶模块时要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有阿拉伯数字大小写英文字母、常用的符号和日文假名等,如图4.29所示。每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B (41H),显示时模块把地址41H中的点阵字符图形显示出来,就能看到字母“A”。

图4.29 CGROM和CGRAM中字符代码与字符图形对应关系

实例4.5 1602液晶显示字符

任务要求:利用MSP430F249单片机驱动1602 LCD,使其显示两行字符:第一行显示“I like mcu”,第二行显示“I can;I do”。

1)硬件电路设计

无背光1602 LCD的引脚共14根,其中数据线D0~D7与单片机的P1端口相连,控制端口RS、R/W和E分别与P2端口低3位相连,如图4.30所示。控制单片机的P2端口的电平变换,产生所需的液晶时序。

2)程序设计

图4.30 1602LCD显示硬件电路原理图

程序说明:程序首先对端口进行初始化,将P1和P2的某些端口设置为输出,并对液晶初始化。在液晶的程序设计中,用了一些宏定义实现对液晶的RS、R/W、E等引脚的高低电平的控制,其顺序是按照前面介绍的液晶时序设计的。值得注意的是,当单片机将字符串输出给液晶显示器后,液晶显示器就不再需要单片机对其进行动态刷新操作,这种显示类似于数码管的静态显示,可使单片机程序设计得以简化。另外,液晶显示一般都是对字符串的输出,在很多情况下,比如A/D转换、数据处理等,结果都是数字,需要将这些数字转换为字符串。

3)仿真结果与分析

程序的仿真运行参照前面的实例,点击运行后可以观察到液晶上显示了两行字符。仿真结果如图4.31所示。

图4.31 1602 LCD显示仿真结果图

思考与练习

1.简述键盘的机械特性和键盘扫描程序的特点。

2.键盘扫描方式中,除了行扫描方法以外,还有一种行反转的方法,试分析其工作方式并完成4×4键盘的扫描功能。

3.将MSP430F249单片机P1端口外接4×4键盘,为减少键盘扫描时间,试采用MSP430F249端口中断方式判断键盘按下的动作。要求用Proteus和IAR完成硬件和软件设计

4.利用8×8 LED点阵实现一个箭头符号循环向上移动的动作。要求用Proteus和IAR完成硬件和软件设计。

5.用6个8×8 LED点阵设计一数字钟,显示时、分、秒。要求用Proteus和IAR完成硬件和软件设计。

6.试利用MSP430F249单片机和2个16×16 LED点阵显示“你好”两个汉字,并循环左移。驱动电路可采用74 HC595和74 HC154。

7.设计一数字时钟,要求MSP430F249单片机外接1602 LCD和按键K1、K2、K3、K4,1602 LCD显示时、分、秒,外接的按键K1、K2、K3完成对时、分、秒进行校时,K4为确认键。

8.试采用74 HC595实现对1602 LCD的控制,利用Proteus和IAR完成测试。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈