版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 江阴职业技术学院毕业论文课题:智能仪表的液晶显示与键盘输入的设计 专 业 学生姓名 班 级 学 号 指导教师 完成日期 摘 要本文主要介绍了智能仪表工作原理及其检测,包含对键盘输入、液晶模块及应用软件的设计。大体分为以下几个局部:介绍了智能仪表的普遍性及其的应用场所;根据实际应用设计的单片机硬件要求,该系统能够实现按键内容的液晶显示、按键功能的液晶显示、智能仪表的操纵输入、智能仪表的结果输出。并简介了该仪表的软件局部。智能仪表是以AT89C51单片机系统和输入、输出设备相结合的系统。所采用的设备在市场上具有普遍性,测量方法容易实现,其具有的总体特点是:携带方便、界面友好、操作简单、本钱低、低
2、功耗。AbstractThis paper mainly introduces the work principle and the detection of intelligent instruments, including the keyboard input, LCD module and application software design. Roughly divided into a few parts: introduces the universality of intelligent instrument and its application places; Accor
3、ding to the practical application of the single chip design hardware requirements, the system can realize the key content of liquid crystal display, keys function liquid crystal display LCD , intelligent instrument manipulation of the input and output the result of intelligent instrument. Introducti
4、on to the instrument of the software.Intelligent instrument is based on AT89C51 single-chip microcomputer system and the input and output equipment combination of system. The equipment in the market universal, and measurement method is easy to be realized, it has the overall characteristic is: easy
5、to carry and friendly interface, simple operation, low cost, low power consumption.目 录摘 要IAbstractI目 录II第一章 绪论11.1 智能仪表的用处及功能11.2 智能仪表所表达的特点1第二章 总体方案22.1 系统分析22.2 技术方案2第三章 硬件设计53.1 液晶电源电路设计53.2 液晶显示93.3 行列键盘的输入153.4 电路原理和器件选择19第四章 软件设计224.1 键盘的软件去抖224.2 C51和汇编的混合编程234.3 程序设计27第五章 调试355.1程序调试顺序355.2液
6、晶模块的检修37总结39致 谢40参考资料41附录42第一章 绪论 1.1 智能仪表的用处及功能 智能仪表有着广泛的用途,如万用表、转速表等。目前,大局部的数字智能仪表是基于单片机系统开发的。在单片机系统中,除了需要完成特定功能的算法和传感器等器件外,还需要输入、输出装置。在智能仪表中,输入装置一般是键盘,而输出装置一般是液晶显示模块。 液晶显示模块与键盘输入模块作为智能仪表的通用器件,在单片机系统的开发过程中也可以作为常用的程序和电路模块进行整体设计。 智能仪表可广泛用于工业数据采集系统、矿场信号采集、电路调试等多种场合,而智能仪表的输入输出模块的主要功能表现在:实现按键内容的液晶显示:液晶
7、显示当前被使用者按下的案件内容,以及该键被按下的次数。实现按键功能的液晶显示:液晶显示当前被按下的按键所对应的功能。例如,当按下启动按键时,在液晶上显示“READY字样等。实现智能仪表的操纵输入:通过键盘,实现使用者对智能仪表的操作。实现智能仪表的结果输出:通过液晶显示模块,显示当前功能的结果输出,例如,当测量完毕时,显示当前测量的电压数值等。在设计智能仪表的输入输出模块时,以上的功能均需要满足,其中主要局部就是液晶显示模块的驱动和行列键盘的输入。而这两个功能也正是单片机系统中常用的关键技术,所以这个系统着重就这两个模块的功能进行介绍。1.2 智能仪表所表达的特点携带方便:体积小,重量轻。界面
8、友好:液晶显示模块可以清晰的显示输出结果和功能提示。操作简单:采用行列式键盘出入,通过键盘实现显示功能和内容。本钱低:采用普通的电池作为电源。低功耗:液晶显示模块可以设置低功耗模式,从而延长工作时间。总体方案2.1 系统分析 智能仪表的根本机构如图2-1所示。从图中可以看出,对于任何一种智能仪表而言,除了功能传感器需要具备自身的要求和特点之外,液晶显示模块和键盘输入模块均是通用模块,其主要的功能也大致相同,这也是要介绍液晶显示和键盘功能的目的所在。图2-1 智能仪表的根本功能模块 从图中可以看出,智能仪表的主要功能模块分为3类:数据采集:是指在单片机的控制下,实用功能传感器完成特定信号的测量和
9、数据采集的功能,传感器将采集到的信号和数据传输到单片机中。 结果显示:是指单片机将采集到的数据发送到液晶显示模块,并控制液晶显示模块按照一定的格式将其现实的功能。操纵输入:是指操纵者或其他器件向单片机发送控制指令,用于控制仪器的模式,该指令一般通过键盘输入。单片机在控制指令的要求下,完成一定功能,如进行信号测量、数据显示等。除此之外,在智能仪表的设计中,电源模块也是一个重要的设计内容,是完成上述功能的根本模块。2.2 技术方案在设计方案中,主要涉及到系统组成和器件的选择。对于智能仪表而言,主要是指显示方案和键盘输入方案这2个方面。1. 液晶显示模块的选择选择适宜的液晶模块对于智能仪表的外观和功
10、能的实现起到至关重要的作用。目前,液晶模块有下述3种类型。数显液晶模块 这是一种有段型液晶显示器件与专用的集成电路组装成一体的功能部件,只能显示数字和一些标识符号。段型液晶显示器件大多应用在便携、袖珍设备上。由于这些设备体积小,所以尽可能不将显示局部设计成单独的部件,即使一些应用领域需要单独的显示组件,那么也应该使其除具有显示功能外,还应该具有一些信息接收、处理、存储传递等功能,由于它们具有某种通用的、特定的功能而受市场的欢送。 2液晶点阵字符模块 它是由点阵字符显示器件和专用的行、列驱动器、控制器及必要的连接件,结构件装配而成的,可以显示数字和西文字符。这种点阵字符模块本身具有字符发生器,显
11、示容量大,功能丰富。一般该种模块最少也可以显示8位1列或16位1列以上的字符。这种模块的点阵排列是由5*7、5*8或5*11的一组组像素点阵排列组成的。每组为1位,每位间有一点的间隔,每行间也有一行的间隔,所以不能显示图形。 3 点阵图形液晶模块这种模块也是点阵模块的一种,其特点是点阵像素连续排列,行和列在排布中均没有空隔。因此可以显示连续、完整的图形。由于它也是有X-Y矩阵像素构成的,所以除显示图形外,也可以显示字符。有下述3种类型。 行、列驱动型这是一种必须外接专用控制器的模块,其模块只装配有通用的行、列驱动器,这种驱动器实际上只有对像素的一般驱动输出端,而输入端一般只有4位以下的数据输入
12、端、移位信号输入端、锁存输入端、交流信号输入端等,如HD44100,IID66100等。此种模块必须外接控制电路,如HD61830,SED1330等才能与计算机连接。这种模块数量最多,最普遍。虽然需要采用自配控制器,但也可以自行选择不同控制器。 行、列驱动-控制型这是一种可直接与计算机接口相连,依靠计算机直接控制驱动器的模块。这类模块所用的列驱动器具有I/O总线数据接口,可以将模块直接挂在计算机的总线上,省去了专用控制器,因此对整机系统降低本钱有好处。对于像素数量不大,整机功能不多,对计算机软件的编程又很熟悉的用户非常适用,不过它会占用系统的局部资源。 行、列控制器这是一种内藏控制器型的点阵图
13、形模块。也是比拟受欢送的一种类型。这种模块不仅装有如第一类的行、列驱动器,而且也装配有如T6963C等的专用控制器。这种控制器是液晶驱动器与计算机的接口,它以最简单的方式受控于计算机,接收并反响计算机的各种信息,经过自己独立的信息处理实现对显示缓冲区的管理,并向驱动器提供所需要的各种信号、脉冲,操纵驱动器实现模块的显示功能。这种控制器具有自己一套专用的指令,并具有自己的字符发生器CGROM。用户必须熟悉这种控制器的详细说明书,才能进行操作。这种模块使用户摆脱了对控制器的设计、加工、制作等一系列工作,又使计算机防止了对显示器的繁琐控制,节约了主机系统的内容资源。通过以上的论述,以及对各类液晶显示
14、模块的比拟,选择了较为常用的点阵图形液晶模块,从而使智能仪表更具有广泛性。2. 键盘的选择键盘按结构的不同可分为独立式按键键盘和行列式键盘两类,每类按译码方式的不同又分为编码式和非编码式两种。单片机中一般使用的都是用软件来识别和产生键代码的非编码键盘。行列式键盘的编码方式有静态和动态两种。静态接口主要由一个行编码器和一个列编码器构成;动态接口可采用计数器、译码器和数据选择器来构成。这两类键盘由硬件完成键的编码任务。一般在小型仪器仪表和控制系统中,使用较多的是行列式和独立式的非编码键盘;如果系统要求实现多键同时按下的处理,那么用非编码独立方式键盘较为适宜。第三章 硬件设计液晶显示模块模块在设计时
15、需要解决的主要问题在于3个方面,一是液晶显示模块的驱动和编程,二是行列键盘的输入,三是在编程过程中牵涉到的C51和汇编语言的混合编程技术。在本例中,和这三个方面相关的关键技术主要包括: 液晶显示模块的电源液晶模块的电源需要提供两路不同的电压,如何在电源单输入的情况下,设计整个单片机系统的多路电源输出,这是设计单片机系统时首先需要解决的问题。 液晶显示模块的驱动主要是设计液晶模块和单片机的接口,以及利用单片机对液晶模块的驱动和操作。 行列键盘的输入行列键盘是智能仪表中单片机系统的输入接口。将说明如何在单片机系统中使用行列键盘,从而实现利用行列键盘的输入,控制单片机系统的功能显示。3.1 液晶电源
16、电路设计1. 作用液晶电源电路设计的主要作用是为液晶显示模块提供工作电压。同时,液晶显示模块的电源设计也是整个系统电源设计中的重要组成局部。一般情况下,液晶器件的驱动需要两种不同的电源电压,一种是5V,另一种是-10V。液晶电源电路就是需要将输入的电压转换成这两种电压信号输出,为液晶显示模块提供工作电压。同时,需要注意液晶电源的设计需要综合考虑整个单片机系统的供电方案。2. 技术方案智能仪器体积虽小,却是一个很完整的系统,系统中不同的局部对于电源的需求是不同的,因此不可防止的会遇到两种甚至两种以上的电源需求,这就是电源局部要解决的关键问题。在设计具体的电源模块时要注意如下几个方面: 为降低系统
17、功耗,减小仪表体积,应尽可能地选用CMOS器件。 根据容许的空间和需求的容量合理的选择电池,从互换性角度考虑应尽量选用普通电池作为电源。 选用的适宜的电源稳压变换器件,在满足电源需求的前提下,使电源模块的外围电路简单,减小占用的空间。电源局部电压的输入输出要求 市场上可供选择的电池规格多种多样,除了较常规的1.2V1.2V整数倍的镍镉充电电池电池组、1.5V和1.9V的干电池和3.6V锂电池以外,还有各种特殊的3V、4.5V、5V、6V和12V的电池可供选择但从使用者更换或购置备用电池的方便的角度考虑,应尽可能使用互换性更好的普通电池。因此希望选择2节5号干电池作为电池局部的输入。传感器及其驱
18、动电路的电压需求为+5V;单片机及接口局部、外部存储器局部和其他一些数字电路局部需要+5V电压;LCD显示输出除了需要提供+5V工作电压外,还需要提供-10V的比照度调节电压。有以上分析得到电源局部的设计要求为+3V输入,+5V和-10V双电压输出。根据此电源输入输出要求选择相应的集成电源稳压变换器件,在满足电源需求的前提下,使外围电路尽可能的简单,体积尽可能小。电源稳压变换器件的选择 选择1677作为超声硬度计电源局部的核心器件。1677芯片管脚如下图。管脚定义见下表所示。图3-11677芯片及管脚 由于 1677输入电压范围0.7V5.5V较大,可以依据不同系统提供的安装的电池空间和所需的
19、不同电池电压与容量,灵活地选择电池的种类,13节普通干电池、碱性电池、镍镉充电电池或一节锂电池均可以使系统正常工作。使用1677的电源局部实际电路原理图3-4所示,假设使用0805表贴元件,那么此电源处理电路在电路板上实际占用尺寸只有22mm*17mm。1677是双电压输出电压DC-DC变换器,适用于需两种可调电压输出的智能仪表。其主要性能为:允许的输入电压范围为0.7V-5.5V;主输出,2.5V-5.5V可调电压输出,或工厂预设值3.3V输出,最大输出电流可达 350mA;第二输出,可为LCD 比照度调节提供+28V-28V范围内的电压;电源效率可达95%;16脚QSOP封装,体积很小,不
20、需要外部场效应管。其他性能还包括20A静态工作电流、1A关断维持电池和电池欠电压监测。表3-11677管脚功能F旁路电容到地,与POUT脚间通过10串联电阻连接2FB主升压电路反响输入端。短路到地为3.3V输出,外接分压电阻到OUT脚,输出电压2.5V到5.5V可调3LBI电池低电压检测比拟输入端。内部门限电平为614mV。可通过外局部压电阻 设置电池低电压检测电平4LBO电池低电压检测比拟器输出端。LBI低于内部门限电平614mV时,LBO输出为低。5F旁观电容9GND地10LCDFBLCD升压电路反响输入端,正压输出时,内部门限电平为1.25V,负压输出时,为0V11ON芯片使能端,高电平
21、启动167712LCDLXLCD28V升压功率开关管漏极13LCDGNDLCD28V升压功率开关管漏极14PGND主升压电路内部N-沟道MOSFET漏极15LX主升压电路内部功率开关漏极16POUT主升压电路电源输出端,内部同步整流器P-沟道MOSFET源极3. 具体实现器件选择和功能 1677: 电压转换芯片,输入为3V,输出两路电压,分别+5V和-10V,作为系统电源和液晶显示模块的背光电源。 L1、L2:磁芯电感,选用CoilCraf 线艺 的DO1608C-103表贴磁芯电感,电感值为10H。 D1、D2:肖特基二极管,但也可选用其他型号,只要反相耐压大于16V即可。 R1、R2: 电
22、阻,R1和R2的比值决定了LCD比照度输出的电压值Vlcd图中的Vout2,关系式为R1 R2x|Vlcd|1.25 V ,其中R1的取值范围为500k-2M。 R3、R4:电阻,R3和R4的比值决定了主输出电压值Vout对应图中的VOUT1,关系式为R3 R4x VOUT1.25V -1,其中R4的取值范围为 10K-200K。 R5、R6:电阻, R5和R6的比值决定了系统欠电压监测的门槛电压值Vtrip,关系式为R5 R6x Vtrip0.614V -1,其中R6130k.当电池电压正常时,电池电压过地蔬菜管脚LBO Low-Battery Outout 输出保持高电平;一旦电池电压低于
23、门槛电压Vtrip时,LBO管脚输出变为低电平。如果不使用欠电压监测的话,只需将第3管脚 LBI 接地。图3-2 1677电源处理电路原理图地址分配和硬件连接 此处只列出和智能仪表相关的、关键局部的单片机管脚连接和相关的地址分配。如图中的一些电路参数的说明如下: Vin: 电源电路的输入端,连接两节1.5V的电池,形成智能仪表的电源。 Vout1:连接1677的16管脚,输出+5V的电池,作为系统的电源电压。 Vout2:连接1677的10管脚,输出-10V的电压,作为液晶显示模块的背光电源电池。 Low-battery Output:连接1677的4管脚,输出电源电压缺乏的报警信号,也就是1
24、677中的LBO的信号3.2 液晶显示1. 作用在单片机系统中,液晶显示是单片机系统中反映系统输出和操纵输入的有效。液晶显示模块是一种将液晶显示器件、连接件、集成电路、PCB线路板、背光源、结构件装配在一起的组件。英文名称“LCD Module,简称“LCM,中文一般称为“液晶显示模块。2. 技术方案图3-3 点阵图形式液晶模块通过在第二节中的技术方案的论述,系统使用的液晶模块为香港精电公司VARITRONIX点阵图形式液晶模块,型号为MGLS-12032A,是内置SED1520控制驱动器的图形液晶显示模块,点阵数120x32,点大小0.6x0.425mm,如下图。 1 MGLS-12032A
25、液晶模块的特征 MGLS-12032A液晶模块是有两片SED1520来驱动的,两个SED1520都只用了其中的60个列驱动口SEG0SEG59 。分别驱动液晶显示器的左右半屏。其内部逻辑电路如下图。图3-4 SED1520显示RAM结构图MGLS-12032A液晶模块的接口端共16个管脚,各管脚的具体说明见表。表3-2MGLS-12032A液晶模块的接口端管脚功能序号管脚符号管教名称说明1GND逻辑电池地2Vcc逻辑电源+5V3V0工作负电压提供比照度调节负电压4A0数据/指令通道选择A0 0选择数据通道;A0 1选择指令通道5R/W读/写选择信号R/W 0写操作;R/W 1读操作6E1控制器
26、1的读写使能E1 0禁用;E1 1允许使用7E2控制器2的读写使能E2 0禁用;E2 1允许使用8NC空916DB0DB7三态数据总线SED1520液晶显示控制驱动器的特征 SED1520液晶显示控制驱动器集行、列驱动器和控制器与一体,被广泛应用于小规模液晶显示模块,其根本功能如下: 内置32行80列共2560位显示RAM区,RAM中的1位数据控制液晶屏上一个像素的亮1、暗0状态。显示RAM的结构见图。 具有16个行驱动输出和61个列驱动输出。 可以直接与80系列微处理器相连。 驱动占空比为1/16或1/32.。 可以级联使用,以扩展行、列驱动能力。 内部具有18kHz时钟发生器,不需要外部提
27、供时钟发生器即可工作。图3-5 SEG1520 显示RAM结构图 3液晶模块接口方式选择液晶模块接口方式选择存储器映像方式的接口,将液晶模块当作存储器的一局部对待,直接使用存储器读写进行IO操作。这种存储器映像方式的接口电路示意图如下图,将液晶模块的数据总线与单片机的数据总线P0口直接相连,液晶模块的片选与控制引脚与单片机的高8位地址线P2口相连,这样对液晶模块的各种指令操作,实际上就是与相应的控制地址交换数据。 图3-6 液晶模块与单片机的接口电路图 按照图3-5的连接方式,那么液晶模块的各根本指令操作对应的控制地址如表3-3所示。表3-3液晶模块的各根本指令操作对应的控制地址操作E1地址E
28、2地址写指令代码8000H4000H读状态字8200H4200H写显示数据8100H4100H读显示数据8300H4300H 4液晶显示的字符输出要对液晶模块进行控制,需要3个最根本的控制操作:分别向两个SED1502控制器写指令代码、写显示数据和读显示数据。完成这三项操作的前提条件是相应SED1520处于准备好的状态,当SED1520处于忙的状态时除了读状态字指令外,其他指令均不起作用,因此在访问SED1520前,都要先读取控制器当前状态,判断是否准备好。由于单片机内部ROM容量的限制,使用西文字符库进行显示,每个字符大小为68点阵,以二维数组的格式存放在ROM中。二维数组的一行表示一个字符
29、,行号即为字符的代码,计算公式:字符代码 ASCII码-30H;二维数组的每个元素对应各字符的每列中8点状态得列数据。向液晶模块输出1个字符的过程就是,由液晶屏显示区的指定字符行的指定列开始,连续输出该字符对应的字符库中的6个列数据。MGLS-12032A液晶模块中液晶屏显示区为12032点阵,如图3-6所示,每8个像素行组成1页字符行,整个显示区共分为4页;显示区的左半区受E1控制器的60个列驱动器控制,右半区受E2控制器的60个列驱动器控制。图3-7 液晶屏显示区示意图当字符输出的指定位置出现在E1和E2控制区的交界线附近时如不进行适当处理的话,字符是无法被完整显示的,因此必须参加切换控制
30、区以及换页的自动调整处理,得到完整显示的字符输出。3. 具体实现单片机和LCD的接口电路如图3-8所示。图3.8 单片机和LCD的接口电路 1 电路原理和器件选择 在这里仅列出单片机和LCD接口局部电路的器件名称和相关的主要功能。 89C52:LCD的控制器,控制字符的发送和点阵显示的时序。 LCD:液晶显示模块。在单片机的控制下,按照要求的格式显示接收到的数据。 74LS00、74LS04: 由于LCD并没有独立的片选信号,所以使用单片机的读写信号进行选通,而74LS00、74LS04那么是转换读写信号的电平,同时作为片选信号。2地址分配与连接此处只列出与之相关的、关键局部的单片机管脚连接和
31、相关的地址分配。主要是单片机和LCD之间的信号连接和地址分配。 E1、E2:连接经过74LS00、74LS04转换后的单片机读写信号,作为单片机对LCD的片选信号。 A8:单片机对LCD的数据指令通道的选择。 A9:单片机对LCD的读写选择信号。 D0D7:单片机和LCD的数据总线。液晶显示的程序 液晶的驱动cdwe.a51的程序:向液晶的驱动模块写入控制字。 液晶驱动inclr.a51的程序:液晶模块的清屏功能。 液晶字符显示程序 disp.c的程序:液晶的数据显示功能。在这里我们列出他们关键局部的程序代码:液晶驱动cdwe.a51的内容:见附录1,液晶驱动inclr.a51见附录2,液晶字
32、符显示程序disp.c见附录3。此处的C51程序使用到了汇编函数。利用C51和汇编语言进行混合编程的技术在后续的章节内容中会作详细的说明。3.3 行列键盘的输入1. 作用计算机控制系统中,数据和控制信号的输入主要使用键盘。键盘接口,尤其是键入新号的软件处理方法是影响系统使用和操作性能的重要因素。键盘接口及其软件的任务主要包括以下几个方面: 检测并判断是否有键按下。 按键开关的延时消抖功能。 计算并确定按键的键值。 程序根据计算出的键值进行一系列的动作处理和执行。2. 技术方案在这里我们选用非编码式行列键盘作为智能仪表的输入装置,如图3-9所示。图3-9 行列式键盘 1行列式键盘的根本结构行列式
33、键盘中的键实际上就是一个机械开关,位于行线和列线的交点处,图3-8所示的那么为我们使用的4行4列的16键行列式键盘,当键按下时,其焦点的行线和列线接通,使相应行线和列线上的电平发生变化,根据电平变化情况确定被按下的键。图3-10 44行列式键盘示意图 2键盘接口方式选择采用线翻转法进行键盘识别。会占用大量的CPU时间,但对于本系统而言,要实现智能的设计,硬件电路使用的器件越少越好。被测信号由外中断引脚输入,未占用单片机4个并行I/O口中的任何一个,系统有足够的资源利用自身I/O口完成接口。只有当传感器输出信号频率为空载频率,系统处于空闲待测的状态下,才允许键盘输入,因此键盘识别占用的CPU时间
34、不会对系统正常工作造成影响。图3-11 44行列式键盘与单片机的连接通常的线翻转法是将行线和列线分别接到两个不同的并行口,通过设置各并行口的状态改变行线和列线的输入输出工作方式,但这样过多地占用了系统的硬件资源,必须进行相应调整。选用如图3-10所示的44行列式键盘,将总共8根行线和列线直接与单片机的通用输入输出口P1口相连,连接方式见图3-11,高4位用于列控制,低4位用于行控制,通过软件中的逻辑运算控制使同一个并行口的不同管脚工作在不同的输入输出方式下,实现线翻转法的键盘识别工作。键盘处理子程序流程键盘上有很多键,每一个键对应一个键码,以便根据键码转到相应的键处理子程序,进一步实现数据输入
35、和命令处理的功能。采用线翻转法实现的具体方法如下。 判断是否有键按下。设置列线输出方式,行线输入方式;向所有列线输出低电平;读取P1口状态,并从P1口状态中别离出行线状态;假设行线状态皆为高电平,那么无键按下,假设有低电平状态,那么有键按下;保存此时的行线状态。 去抖动。按键本身是机械开关,在触点闭合或断开的瞬间会出现电压抖动的现象,必须去除抖动的影响,才能正确识别被按下的键。为简单起见使用软件方法消抖。延时10ms,读取所有列线输出低电平情况下的行线状态,假设两次的行线状态相同,说明信号稳定,可以继续确定按键的物理位置。 确定物理位置得到键码。将改变行线和列线的工作方式,由行线输出,列线输入
36、。行线输出前次读取的行线状态,由列线读取相应的列线状态。闭合间对应的行线和列线的状态均为低电平,其他键均为高电平状态。将此行线和列线状态组合即可得到该闭合键对应的键码。 等待键释放。得到闭合键对应的键码以后,继续延时并判断按键状态,直到闭合的按键被释放,再根据键码转到响应的键处理子程序中。系统中使用的44行列式键盘上16个按键的功能定义与相应键码见表3-4所列。表3-4 16个按键的功能定义与相应键码的定义键号功能键码017EH120BEH230DEH3M10EEH447DH550BDH660DDH7M20EDH877BH980BBH1090DBH11M30EBH12*77H1300B7H14
37、#0D7H15M40E7H3. 具体实现在此单片机系统使用简单的键盘和液晶显示器件来完成输入/输出操作的人机界面。行列式键盘与89C52单片机的接口电路键盘输入信号的主要过程是: CPU判断是否有键按下。 确定按下的是哪一个键。 把此按键代表的信号翻译成计算机所能识别的代码,如ASCII或其他特征码。图3-11是8031与行列式键盘的接口电路。P1口作键盘接口,P1.0P1.3作键盘的行扫描输出线,P1.4P1.7作列检测输入线。键的识别功能,就是判断键盘中是否有键按下,假设有键按下那么确定其所在的行列位置。程序扫描法是一种常用的键识别法。在这种方法中,只要CPU空闲,就调用键盘扫描程序,查询
38、键盘并给予处理。采用查询方法实现的键盘扫描程序的过程如下。 查询按下键所在的行列位置“0扫描码F0H,然后从列检测口P1.4P1.7输入列检测信号,只要有一列信号不为“1,即P1口不为F0H,那么表示有键按下。接着要查出按下键所在的行、列位置。 查询按下键所在的行列位置单片机将得到的信号取反,P1.4P1.7中的为1的位便是键所在的列。“1,即向门口发送扫描码FEH,接着输入列检测信号,假设为全“1,表示不在第一行。接着使P1.1接地,其余为“1,再读入列信号。这样逐步发“0扫描码,直到找到按下键所在的行,将该行扫描码取反保存。当各行都扫描以后仍没有找到,那么放弃扫描,认为是键的误动作。 对得
39、到的行号和列号译码,得到键值扫描函数的返回值为行列键盘的键特征码,假设无键按下,返回值为0.行列键盘扫描的源程序段keyscan.c的代码如下。代码见附录4。图3-12 行列式键盘的接口电路 此程序对于行列式键盘而言是一种通用的键盘扫描程序,对于不同的键盘和功能,只需要稍作改变,即可适用于不同的使用场合。 3.4 电路原理和器件选择智能仪表输入输出模块的主要功能是提供单片机和外部的液晶显示模块以及键盘的接口电路,此外还需要设计智能仪表的电源模块。智能仪表电路如图3-12所示。液晶显示模块与单片机的连接中,液晶显示模块的读写通道和数据通道的管脚和单片机相连,而单片机正是通过与之相连的P2口控制液
40、晶显示模块的操作。行列式键盘和单片机的连接中,行列键盘的行输入和列输入分别连接到单片机的P1口的8个管脚上,通过单片机的键盘扫描程序,完成对输入信号的读取。图3-13 智能仪表的液晶显示和键盘输入电路在这里列出与之相关的、关键局部的器件名称 及其主要功能。? 89C52单片机:主要完成键盘扫描程序,检测外部的操纵指令;控制液晶显示模式和向液晶发送显示数据等功能。? MGLS-12032A: 液晶显示模块,在单片机的控制下,按照要求的格式完成对接收到的数据的显示。? 74LS00、74LS04:转换读写信号的电平,使用单片机的读写信号进行选通。? KEY:44行列式键盘,将总共8根行线与列线直接
41、与单片机的通用输入输出口P1口相连。? 1677: 电压转换芯片,输入为3V,输出两路电压,分别是+5V和-10V,作为系统电源和液晶显示模块的背光电源。? L1,L2: 磁芯电感,选用DO1608C-103表贴磁芯电感,电感值为10H.? D1,D2: 肖特基二极管,但也可选用其他型号,只要反相耐压值大于16V即可。? R1、R2、R3、R4、R5、R6: 电阻,决定了输出的电压值以及电压调节的范围。 地址分配和连接:? Vin:电源电路的输入端,连接两节1.5V的电池,形成智能仪表的电源。? Vout1:连接1677的16管脚,输出+5V的电压,作为系统的电源电压。? Vout2:连接16
42、77的10管脚,输出-10V的电压,作为系统的的电源电压。? Low-battery Output:连接1677的4管脚,输出电源电压缺乏的报警信号,也就是1677中的LBO的信号。? E1、E2:连接经过74LS00、74LS04转换后的单片机的读写信号,作为单片机对LCD的片选信号。? A8:单片机对LCD的数据/指令通道的选择。? A9:单片机对LCD的读写选择信号。第四章 软件设计4.1 键盘的软件去抖 1. 作用 当按下一个键时,往往会出现所按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况。在释放一个键时,也会出现类似的情况,这就是键抖动,抖动的持续时间不一,通常不会大于10
43、ms。假设抖动问题不解决,就会引起对闭合键的屡次读入,从而引起系统对输入状态的判断失误,所以很有必要进行按键的消抖。2. 技术方案在单片机控制系统中,按键处理几乎存在于每个实际设计中。目前,有两种方法可以对按键进行消抖,一种是通过使用RS触发器构成的硬件电路消除按键的抖动,而另一种那么是我们需要说明的的软件消抖方法。软件消抖的方法也有所不同,我们采用的是通过延时的方法消抖这是一种常见的消抖方法。判断有键后延时1020ms再次独键判断,以便到达每次按键操作只产生一次有效信号供单片机处理。由于键被按下的时间持续上百ms,延时后再扫描也不迟。3. 具体实现键盘消抖方法是常用的软件延时方法,在键盘输入
44、的扫描过程中嵌入如下的程序段,那么能方便的实现键盘输出的消抖功能。Void main void uchar key:While 1 key kbscan ; /键盘扫描程序 Delays ; /键的消抖延时函数Void delays void uchar i; for i 300;i 0;i- ; 上述程序中的delays 就是单片机的延时子函数,由于采用的晶振频率不同,采用的延时函数的循环次数也不相同,需要用户根据实际情况自己定义。4.2 C51和汇编的混合编程1. 作用C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并可以调用汇编语言的子程序或子函数。Franklin C51是
45、一种专门针对51系列微处理器的C开发工具,它提供了丰富的库函数,具有很强的数据处理能力,编程中对8051存放器和存储器的分配均由编译码自动管理,因而,通常用C51来编写主程序。然而,有时也需要在C程序中调用一些用汇编A51编写的子程序。另一方面,在以汇编语言为主体的程序开发过程中,如果涉及到复杂的数学运算,往往需要借助C语言工具所提供的运算库函数和强大的数据处理能力,这就要求在汇编中调用C函数。 2.技术方案 1函数名的转换和命名本章前面的模块为同一种语言的模块化编程。下面是模块以不同语言编写的模块化编程,即混合编程。混合编程必须指定参数的传递规那么。函数名的转换如表4-1.表4-1函数名的转
46、换说明符号名解释void func void FUNC无参数传递或不含存放器参数的函数名不作改变转入目标文件中,名字只是简单地转为大写形式void func char _FUNC带存放器参数的函数名参加“_字符以示区别,它说明这类函数包含存放器内的参数传递void ft2nc void reentrant_?FUNC对于重入函数加上“_?字符串前线以示区别,它说明该函数包含站内的参数传递当组合在一起的程序局部以不同语言汇编时,大多数是用汇编语言编写硬件有关的程序。编译器由于历史原因不能有效使用内部存放器。编译器也可把中间结果放在片内RAM中。通常情况下以高级语言C编写主程序,这样程序易编写。几
47、个字节的外部代码仅用一次,时间消耗很少,但循环重复使用这些字节消耗很大。好的方法是以高级语言编写而在经常用到的函数处调用相关的子函数,不管该函数用何种语言编写。所有程序运行通过后,返回来优化有缺陷的程序。一些C编译器可以很容易的生成汇编语言源程序,必须会变后才得到最后程序;一些编译器允许单行的汇编程序,也可把汇编程序集中在同一文件中。参数通常是通过固定的CPU存放器传给汇编程序的。当使用“#pragmaNOREG PARMS时,那么通过固定的存贮器位置传递参数。这样就给汇编与FranklinC51之间提供了一个非常简洁的接口,且返回值在CPU存放器中。 2C51函数的参数传递规那么 C 和汇编
48、接口的关键在于要弄清C函数的参数传递规那么。Franklin C51具有特定的参数传递规那么,这就为二者的接口提供了条件。Frankin C51函数最多可通过CPU存放器传递3个参数,这种传递技术的优点是可产生与汇编语言相比的高效代码。表3-6是利用存放器传递参数的规那么。如果参数较多而使存放器不够用时,局部参数将在固定的存储区域内传送,这种混合的情况有时会令初学者在弄清每一个参数的传递方式时发生困难。如果在源程序中选择了编译控制命令“#pragma NOREG PARMS,那么所有参数传递都发生在固定的存储区域,所使用的地址空间依赖于所选择的存储器模式。这种参数传递技术的优点是传递途径非常清
49、晰,缺点是代码效率不高,速度较慢。当函数具有返回值时,也需要传递参数,这种返回值参数的传递均是通过CPU内部存放器完成。CPU存放器中最多传递3个函数。这种参数传递技术产生高效代码,可与汇编程序相媲美。参数传递的存放器选择如表3-6所示。表4-2参数传递的存放器选择参数类型charintlong.float一般指针第1个参数R7R6,R7R4R7R1,R2,R3第2个参数R5R4,R5R4R7R1,R2,R3第3个参数R3R2,R3无R1,R2,R3参数传递段给出汇编在程序中使用的固定存储区,就像参数传递给C函数一样,参数传递段的首址通过名为“?函数名?BYTE的PUBLIC符号确定。当传递位
50、值时,使用名为“?函数名?BIT的PUBLIC符号。所有传递的参数放在以首地址开始递增的存储区内,函数返回值放入CPU存放器,如表4-3所示。这样,C51程序与汇编语言的接口相当直观。表4-3参数传递的定义返回值存放器说明bitC进位标志 unsigned charR7 unsigned intR6,R7高位在R6,低位在R7 unsigned longR4R7高位在R4,低位在R7floatR4R732位IEEE格式,指数和符号位在R7指针R1,R2,R3R3放存贮器类型,高位在R2,低位在R1在汇编子程序中,当前选择的存放器组及存放器ACC、B、DPTR、和PSW都可能改变。当被C函数调用
51、时,必须无条件地假定这些存放器的内容已被破坏。如果在连接/定位程序时选择了覆盖,那么每个汇编子程序包含一个单独的程序段是必要的,因为在覆盖过程中,函数间参量通过于程序各自的段参量计算。汇编和C的调用与C和汇编的混合编程的概念并不相同,但在此处,由于都是为了解决在编程过程中C和汇编的综合使用问题,所以归为一类编程技术加以介绍。汇编和C的相互调用可以分以下几种情况: 汇编程序中访问C51程序中的变量和函数。在汇编程序中,用_XX就可以访问C中的变量XX了。访问数组是,可以用_XX+偏移量来访问,如_XX+3访问了数组中的XX。在汇编程序调用C程序时,如果没有参数传递,直接用_funcname 就可
52、以了。如果有参数传递,那么函数中最左边的一个参数由存放器A给出,其他的参数按顺序由堆栈给出、返回值是返回到A存放器或者有A存放器给出的地址。同时注意,为了使汇编语言能访问到C语言中定义的变量和函数,必须声明为外部变量,即加extern前缀。 C51程序中访问汇编程序中的变量如果需要在C程序中访问汇编程序中的变量,那么汇编程序中的变量名必须以下划线为首字符,并用global使之成为全局变量。如果需要在C程序中调用汇编程序中的变量,那么过程名必须以下划线为首字符,并且,要根据C程序编译时使用的模式是stack-based model还是register argument model来正确地编译该过
53、程,使之能正确地取得调用参数。 C51嵌套汇编在C程序中还可以直接插入asm“*,从而实现在C语言中嵌汇编语言。该方法有两种实现方式:方法一:在每个汇编语句前加asm即可,如:void reset_data void asm mov r0.#0dfhasm do_ resetdataasm mov r0,#00hasm djnz r0.do_resetdata return; 方法二:把asm 作为关键字后续汇编用大括号括起来即可,如下:void reset_data void asm mov r0,#0dfh do_ resetdata; mov r0.#00h djnz r0,do_res
54、etdata return; 注意:需要注意的是这种用法要慎用,在线汇编提供了能直接读写硬件的能力,如读写中断控制允许存放器等,但编译器并不检查和分析在线汇编语言,插入在线汇编语言改变汇编环境或可能改变C变量的值可能导致严重的错误。由于混合编程中既有C51语言,又有汇编语言,所以在进行程序的编译时,需要进行特殊的编译和连接。具体的过程可以使用如下的批处理文件:? C51 main_c.C DEBUG? C51 func_c1.C DEBUG? A51 func_a1.A51 DEBUG? A51 funa_a2.A51 DEBUG? A51 funa_a3.ASM DEBUG? OH main_c对上述的批处理文件做如下的说明:? main_c.C: C51编程的主程序。? func_c1.C: C51编程的函数。? func_a1.A51:汇编函数。? func_a2.A51:汇编函数。?
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论