基于DSP的键盘控制LCD显示计算机与信息工程学院xxx指导教师xxx副教授摘要本文主要介绍用‘C54x芯片控制LCD显示和键盘扫描的原理,以及对’C54x进行编程下载,将键盘和LCD屏显示相结合,实现计算器的功能。此计算器有16个按键,10个数字键,4个运算符键,1个等号键和1个清屏键,可以实现加法和减法运算,并能完整显示整个运算式。键盘扫描的软件实现方法有助于缩减一个系统的重复开发成本,且只需要很少的CPU开销。关键词键盘;LCD;计算器1引言数字信号处理(DigitalSignalProcessing)的目的是对真实世界的连续模拟信号进行测量或滤波。因此在进行数字信号处理之前需要将信号从模拟域转换到数字域,这通常通过模拟数字转换器(A/D)实现。而数字信号处理的输出经常也要变换到模拟域,这是通过数字模拟转换器(D/A)实现的。数字信号处理的算法需要利用计算机或专用处理设备如数字信号处理器(DSP)和专用集成电路(ASIC)等。数字信号处理技术及设备具有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等突出优点,这些都是模拟信号处理技术与设备所无法比拟的。数字信号处理(DSP)是研究用数字方法对信号进行分析、变换、滤波、检测、调制、解调以及快速算法的一门技术学科。但很多人认为:数字信号处理主要是研究有关数字滤波技术、离散变换快速算法和谱分析方法。随着数字电路与系统技术以及计算机技术的发展,数字信号处理技术也相应地得到发展,其应用领域十分广泛。本文就是利用DSP处理芯片‘C54x实现计算器功能。2设计原理2.1键盘工作原理实习题目指导教师职称学生姓名学号日期实习题目指导教师职称学生姓名学号日期实现键盘有两种方案:一是采用现有的一些芯片实现键盘扫描;另一种就是用软件实现键盘扫描。作为一个嵌入系统设计人员,总是会关心产品成本。虽然目前有很多芯片可以用来实现键盘扫描,但键盘扫描的软件实现方法有助于缩减一个系统的重复开发成本,且只需要很少的CPU开销。嵌入式控制器的功能能强,可能充分利用这一资源,这里就介绍一下软键盘的实现方案。图1通常在一个键盘中使用了一个瞬时接触开关,并且用如上图1所示的简单电路,微处理器可以容易地检测到闭合。当开关打开时,通过处理器的I/O口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的I/O口的输入将被拉低得到逻辑0。可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1或者0。尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。当触点闭合时,其弹起就像一个球。弹起效果将产生如图2所示的好几个脉冲。弹起的持续时间通常将维持在5ms~30ms之间。如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。键盘上阵列这些开关最有效的方法(当需要5个以上的键时)就形成了一个如图3所示的二维矩阵。当行和列的数目一样多时,也就是方型的矩阵,将产生一个最优化的布列方式(I/O端被连接的时候)。一个瞬时接触开关(按钮)放置在每一行与线一列的交叉点。矩阵所需的键的数目显然根据应用程序而不同。每一行由一个输出端口的一位驱动,而每一列由一个电阻器上拉且供给输入端口一位。键盘扫描过程就是让微处理器按有规律的时间间隔查看键盘矩阵,以确定是否有键被按下。一旦处理器判定有一个键按下,键盘扫描软件将过滤掉抖动并且判定哪个键被按下。每个键被分配一个称为扫描码的唯一标识符。应用程序利用该扫描码,根据按下的键来判定应该采取什么行动。换句话说,扫描码将告诉应用程序按下哪个键。图2按键抖动123456ABCD654321DCBATitleNumberRevisionSizeCDate:7-Jan-2009SheetofFile:E:\电子系项目\DSP\sch\dsp-21.ddbDrawnBy:S11S12S16S15S7S8S4S3KEY7KEY6KEY5KEY4KEY3KEY23R43R5VCCS2S1S6S5S10S9S14S13KEY13R3KEY03R2图3矩阵键盘某一时刻按下多个键(意外地或者故意地)的情况被称为转滚。能够正确识别一个新键被按下(即使n-1个键已经被按下)的任何算法被称为具有n键转滚的能力。本章提出的矩阵键盘系统设计,在这种系统中用户输入可能发生相继按键。这些系统通常不需要具有像终端或者计算机系统上的键盘的全部特征那样的键盘。键盘扫描算法:在初始化阶段,所有的行(输出端口)被强行设置为低电平。在没有任何键按下时。所有的列(输入端口)将读到高电平。任何键的闭合将造成其中的一列变为低电平。为了查看是否有一个键已经被按下,微处理器仅仅需要查看任一列的值是否变成低电平。一旦微处理器检测到有键被按下,就需要找出是哪一个键。过程很简单,微处理器只需在其中一行上输出一个低电平。如果它在输入端口上发现一个0值,该微处理器就知道在所选择行上产生了键的闭合。相反,如果输入端口全是高电平,则被按下的键就不在那一行,微处理器将选择下一行,并重复该过程直到它发现了该行为止。一旦该行被识别出来,则被按下键的具体的列可以通过锁定输入端口上唯一的低电位来确定。微处理器执行这些步骤所需要的时间与最小的状态闭合时间相比是非常短的,因此它假设该键在这个时间间隔中将维持按下的状态。比如:当发现某列变为低电平时,此时微处理器仅在某一行上输出低电平,再查看列的状态,如果此时在输入端口上发现了一个0,则就可以断定就是此行上的键按下了,反之,如果输入端口上全为1,则就不是这一行上按下了键。根据第一步和第二步中得到的值,便可以得到相应的扫描码。比如,第一步中行全为零时列输入B1为零,当将输出的第二行B2置为零时,如果此时的列输入B1仍为零,则可得到扫描码为×××。为了过滤回弹的问题,微处理器以规定的时间间隔对键盘进行采样,这个间隔通常在20ms~100ms之间(被称为去除回弹周期),它主要取决于所使用开关的回弹特征。另一个的特点就是所谓的自动重复。自动重复允许一个键的扫描码可以重复地被插入缓冲区,只要按着这个键或者直到缓冲区满为止。自动重复功能非常有用的,当你打算递增或者递减一个参数(也就是一个变量)值时,不必重复按下或者释放该键。如果该键被按住的时间超过自动重复的延迟时间,这个按键将被重复的确认按下。本次实验实现的是4×4的键盘扫描。分别将每一列置零,如果这时有键按下,则对应的行将为低电平,将4次得到的结果放到一个16位变量中,该变量的每一位为零则对应一个按键,如果没有键按下则该变量的值为0xffff。做一个数组存储键盘的映射码,这样方便修改按键对应的值。为了过滤回弹的问题,微处理器以规定的时间间隔对键盘进行采样,这个间隔通常在20ms~100ms之间(被称为去除回弹周期),它主要取决于所使用开关的回弹特征。本次实验中取为50ms。另个一个的特点就是所谓的自动重复。自动重复允许一个键的扫描码可以重复地被插入缓冲区,只要按着这个键或者直到缓冲区满为止。本次实验的自动重复按键的第一次和第二次之间的延时为1秒钟,以后的重复速度为50毫秒。本实验系统的行列线映射为DSP的IO空间地址为1C00H。2.2LCD工作原理2.2.1LCD(LiquidCrystalDisplay)原理液晶得名于其物理特性:它的分子晶体,不过以液态存在而非固态。这些晶体分子的液体特性使得它具有两种非常有用的特点:1、如果让电流通过液晶层,这些分子将会以电流的流向方向进行排列,如果没有电流,它们将会彼此平行排列。2、如果提供了带有细小沟槽的外层,将液晶倒入后,液晶分子会顺着槽排列,并且内层与外层以同样的方式进行排列。液晶的第三个特性是很神奇的:液晶层能够使光线发生扭转。液晶层表现的有些类似偏光器,这就意味着它能够过滤掉除了那些从特殊方向射入之外的所有光线。此外,如果液晶层发生了扭转,光线将会随之扭转,以不同的方向从另外一个面中射出。液晶的这些特点使得它可以被用来当作一种开关——即可以阻碍光线,也可以允许光线通过。液晶单元的底层是由细小的脊构成的,这些脊的作用是让分子呈平行排列。上表面也是如此,在这两侧之间的分子平行排列,不过当上下两个表面之间呈一定的角度时,液晶成了随着两个不同方向的表面进行排列,就会发生扭曲。结果便是这个扭曲了的螺旋层使通过的光线也发生扭曲。如果电流通过液晶,所有的分子将会按照电流的方向进行排列,这样就会消除光线的扭转。如果将一个偏振滤光器放置在液晶层的上表面,扭转的光线通过了,而没有发生扭转的光线将被阻碍。因此可以通过电流的通断改变LCD中的液晶排列,使光线在加电时射出,而不加电时被阻断。也有某些设计了省电的需要,有电流时,光线不能通过,没有电流时,光线通过。LCD显示器的基本原理就是通过给不同的液晶单元供电,控制其光线的通过与否,从而达到显示的目的。因此,LCD的驱动控制归于对每个液晶单元的通断电的控制,每个液晶单元都对应着一个电极,对其通电,便可使用光线通过(也有刚好相反的,即不通电时光线通过,通电时光线不通过)。2.2.2电致发光LCD的发光原理是通过控制加电与否来使光线通过或挡住,从而显示图形。光源的提供方式有两种:透射式和反射式。笔记本电脑的LCD显示屏即为透射式,屏后面有一个光源,因此外界环境可以不需要光源。而一般微控制器上使用的LCD为反射式,需要外界提供光源,靠反射光来工作。电致发光(EL)是液晶屏提供光源的一种方式。电致发光的特点是低功耗,与二极管发光比较而言体积小。电致发光(EL)是将电能直接转换为光能的一种发光现象。电致发光片是利用此原理经过加工制作而成的一种发光薄片。其特点是:超薄、高亮度、高效率、低功耗、低热量、可弯曲、抗冲击、长寿命、多种颜色选择等。因此,电致发光片被广泛应用于各种领域。2.2.3LCD的驱动控制市面上出售的LCD有两种类型:一种是带有驱动电路的LCD显示模块,这种LCD可以方便地与各种低档单片机进行接口,如8051系列单片机,但是由于硬件驱动电路的存在,体积比较大。这种模块常常使用总线方式来驱动。另一种便仅是LCD显示屏,没有驱动电路,需要与驱动电路配合使用。特点是体积小,但是却需要另外的驱动芯片。也可以使用带有LCD驱动能力的高档MCU驱动。本实验我们使用的是带有驱动电路的LCD显示模块,采用DSP的总线方式来驱动。一般带有驱动模块的LCD显示屏使用这种驱动方式,由于LCD已经带有驱动硬件电路,因此模块给出的是总线接口,便于与单片机的总线进行接口。驱动模块具有八位数据总线,外加一些电源接口和控制信号。而且还自带显示缓存,只需要将要显示的内容送到显示缓存中就可以实现内容的显示。由于只有八条数据线,因此常常通过引脚信号来实现地址与数据线复用,以达到把相应数据送到相应显示缓存的目的。本实验系统采用了HS12232型图符点阵液晶,它具有以下特性:-122×32点阵;-内置SED1520型专用液晶驱动控制器;-1/32占空比周期;-+5V供电。由于单一的液晶片的驱动非常复杂,因此我们用到了液晶模块(LCM),该液晶模块是由专用液晶驱动芯片(SED1520)加上液晶片构成的。液晶驱动芯片专门产生液晶显示所需要的信号,它与液晶片的集成使得液晶模块的控制接口变得非常简单。液晶模块的接口特性主要取决于模块中采用的专用液晶驱动控制芯片。3功能描述在此主程序中,首先调用键盘扫描的子程序进行键盘扫描,然后根据返回值控制参数传递和LCD显示。当按键返回值是0—9且x=1时,在LCD显示屏的左半屏第五行第1个字的位置显示相应数值,并将返回值传递给a。当按键返回值是0—9且x=2时,在LCD显示屏的左半屏第五行第3个字的位置显示相应数值,并将返回值传递给b。当按键返回值是10时,在LCD显示屏的左半屏第五行第2个字的位置一个“+”,并将全局变量c置成1。当按键返回值是11时,在LCD显示屏的左半屏第五行第2个字的位置一个“-”,并将全局变量c置成2。当按键返回值是12时,在LCD显示屏的左半屏第五行第2个字的位