极简51单片机:体系结构、程序设计与案例开发(汇编语言版)课件 第4章 数据的输入输出_第1页
极简51单片机:体系结构、程序设计与案例开发(汇编语言版)课件 第4章 数据的输入输出_第2页
极简51单片机:体系结构、程序设计与案例开发(汇编语言版)课件 第4章 数据的输入输出_第3页
极简51单片机:体系结构、程序设计与案例开发(汇编语言版)课件 第4章 数据的输入输出_第4页
极简51单片机:体系结构、程序设计与案例开发(汇编语言版)课件 第4章 数据的输入输出_第5页
已阅读5页,还剩77页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4.1磨刀霍霍—预备知识

4.1.1数码管的概念及工作原理4.1.2键码的概念及工作原理4.1.4LED点阵显示器 4.2小试牛刀—实战案例

动手实践4-1:数码管的动态扫描显示动手实践4-2:矩阵键盘的扫描动手实践4-3:点阵显示第4章

数据的输入和输出第4章

数据的输入和输出4.3庖丁解牛—原理剖析4.3.1汇编语言中的查表操作4.3.2循环移位指令 4.3.3动态扫描显示的实现4.3.4子程序的现场保护4.3.5矩阵键盘的扫描与按键识别 4.4牛气冲天——实战进阶4.4.1字符型液晶显示器LCD16024.4.2图形液晶显示器LCD128644.1磨刀霍霍—预备知识

4.1.1数码管的基本概念及工作原理电路连接与字段码每个数码管都有一个公共端com(称为位选端),在数码管内部将其与所有LED的阴极接在一起,则这种数码管称为共阴极(CommonCathode)数码管。反之,如果com端与所有LED的阳极接在一起,则称为共阳极(CommonAnode)接法。在系统中,如果将数码管的com端接有效的低电平(共阴极)或者高电平(共阳极),则当通过a~g和dp端向数码管送入不同的二进制代码和高低电平,即可点亮或熄灭数码管中的各LED,从而在数码管上显示期望的字符。这些二进制代码称为数码管的字段码,其中最低位到最高位依次对应字段a~g和dp。数码管的显示方式如果各数码管的字段码分别通过单片机的不同并口送来,则在程序运行过程中,只要送往并口的数据不变,各数码管上显示的字符就一直保持不变。数码管的这种显示方式称为静态显示。动态扫描显示——每次操作首先通过一个并口输出位选码以选中一位数码管,然后通过另一个并口送出数据的当前位字符对应的字段码。之后修改位选码,以选中下一位数码管,再由并口输出下一位数码管所需的字段码。当重复时间较短时,各位数码管上将显示稳定的字符。数码管的译码方式为了方便,在程序中一般直接给出数码管需要显示的数字或字符。但是,要让数码管正确显示出期望的字符,必须将字符转换为相应的字段码。获取待显示字符字段码的方法称为数码管的译码。硬件译码——采用专用的译码芯片实现上述译码转换过程。软件译码——不需要增加另外的电路,只需要在程序中用DB伪指令定义数码管的字段码表,然后用查表指令读取需要显示数字字符的字段码送数码管。图4-4为74LS48芯片的引脚图,其中各引脚的功能如下。(1)A、B、C、D:译码输入端,输入为待显示字符0~9的BCD码,高低电平分别表示1码和0码,其中D为高位,A为低位。(2)QA~QG:译码输出端,输出共阴极数码管的7位字段码,输出的高低电平分别表示1码和0码,分别对应与七段共阴极数码管的a~g段选端相连接。……4.1.2

键盘的基本概念及工作原理键盘一般用于在单片机系统运行过程输入简单的字符或控制命令,例如在计算器、电话机上的键盘,这些键盘的按键数都远少于普通的Windows键盘,称为小键盘。独立按键与矩阵键盘将键盘中的每个按键电路分别接到单片机不同的并口引脚,工作互不干扰,这样的键盘称为独立按键。当按键数比较多时,这种电路连接和控制方法将需要大量的单片机I/O口,为此,在实际系统中一般采用矩阵键盘。键盘扫描与按键识别在系统中,对键盘的操作主要是识别按键,获得按键的编码代号,再据此实现各种应用功能,例如将识别到的按键字符送数码管显示,根据不同的按键点亮不同的LED等。实现按键识别常用的是逐行扫描法和行列反转法。行列翻转法

分别使键盘的行线和列线全部输出低电平,读取列线和行线。然后根据两次读取的数据识别按键所在的行和列。第一步:MOV P3,#0F0H

;4根列线输出低电平MOV A,P3

;读取行线第二步:MOV P3,#3FH ;2根行线输出低电平MOV A,P3 ;读取列线根据上述两步读取的行线和列线代码中哪一位为0,综合判定按键。逐列扫描法

第一步通过全扫描确认是否有键按下;第二步通过列扫描识别按键。在上述两步中,列线称为列扫描线,用于输出扫描码;行线称为行回读线,用于读取键盘电路中各行线的状态(高低电平)。全扫描:使所有列线同时输出低电平(称为全扫描码)并读取行线。只要行线数据有一位为低电平0,此时再进行后续列扫描。若无按键按下,则读取的行线全部为高电平,此时不再进行后续的列扫描。当有按键按下时,再进行列扫描,其基本步骤是:从左向右或从右向左使各列线依次输出低电平,并立即读取行线,根据当前送出的列扫描码和读取的行线数据即可确定按下按键的位置。

中断扫描法单片机响应中断后,再通过列扫描识别当前用户按下的按键。也可以在中断服务程序中,设置一个有键按下标志,当由中断服务程序返回主程序后,在主程序中实现逐列扫描以识别按键。将各行线的输出利用与门组合后,作为一个外部中断源,由P3.2或P3.3引脚送入单片机。在程序中,需要扫描读取按键时,先送出全扫描码。一旦有键按下,与门输出一个负跳变,立即向单片机发出外部中断请求。

键码按照上述方法确定所有按键的键码后,在程序中可以将其定义为一个键码表,类似于数码管的字段码表。在键码表中,各按键的键码一般根据按键代表的数字字符大小顺序排列。通过行列反转法或者逐列扫描法识别按键后,在程序中需要用合适的编码代码来表示识别到的按键,这些编码代号称为键码或者键值。程序中每个按键的键码可以根据上述扫描的过程自行规定,只要保证每个按键有唯一不同的编码,并且便于程序实现。例如,图4-6所示矩阵键盘的键码表可以定义为:KEYTAB: DB 4EH,8EH,4DH,8DH,4BH,8DH,47H,87H

4.1.3LED点阵显示器LED点阵显示器由若干个发光二极管按矩阵方式排列而成,阵列点数有5×7、5×8、6×8、8×8和8×16等。行码和列码第1、2列行码分别为0E0H、0DFH行线,行码列线,列码行码和列码类似于数码管的字段码和位选码,点阵显示器的显示控制与数码管的动态扫描显示类似。通过送来不同的列码以选中需要显示的列,同时由行线送来行码,即可控制一列点阵的显示。延时一定的时间后,再送出下一个列码以选中下一列,同时送出该列对应的行码。4.2小试牛刀—实战案例

动手实践4-1:数码管的静态和动态扫描显示(ex4_1.pdsprj、

p4_1_1.asm、p4_1_2.asm)

动手实践4-2:矩阵键盘的逐列扫描法(ex4_2.pdsprj、p4_2.asm)

动手实践4-3:LED点阵的简单显示控制(ex4_3.pdsprj、p4_3.asm)动手实践4-1在4位数码管上静态和动态显示给定字符。将位选码修改为0F0H,则4个数码管上将同时显示同一个字符。动手实践4-2通过键盘输入字符,存入给定的键盘输入缓冲区。动手实践4-3在8

8点阵显示器上显示给定图案。4.3庖丁解牛—原理剖析

4.3.1汇编语言中的查表操作表的定义为了实现查表操作,程序中首先需要定义数码管的字段码表和点阵显示器的行码表等。p4_1_2.asmp4_3.asm查表操作MOV DPTR,#TABMOV A,#**MOVCA,@A+DPTRMOV A,#**ADDA,#disMOVCA,@A+PCp4_1_1.asmp4_1_2.asmp4_3.asm4.3.2循环移位指令小循环大循环循环移位指令的其他应用检测多位二进制数据中各位是0码还是1码。例如,大循环移位指令每执行一次,累加器A中当前的最高位或最低位都将移入C标志位。因此执行后利用JC或JNC即可检测C标志位,从而检测A中当前的最高位或者最低位是0码还是1码,并据此做进一步操作。替代MUL和DIV指令实现乘法和除法运算。4.3.3动态扫描显示的实现程序p4_1_2.asm4.3.4子程序的现场保护与参数传递程序p4_1_2.asm现场指的是在子程序要修改和使用,但返回主程序时不能发生变化的寄存器和存储器单元。在上述程序中,子程序SUBSET内部要用到R0,DELAY子程序中要用到R7。这两个寄存器都是现场。对于子程序SUBSET,在其中要用到R0作为显示缓冲区的地址指针。在主程序中调用该子程序之前,设置需要显示的字符数据所在的显示缓冲区,并将缓冲区的起始地址存入R0。进入子程序后,通过R0即可找到缓冲区,并将需要显示的字符数据存入缓冲区中的各单元。由此可见,R0实现了主程序向子程序的参数传递。在汇编语言程序中,主程序和子程序之间的参数传递大都利用工作寄存器进行。如果工作寄存器不够用,也可以采用其他方法(例如堆栈)实现参数传递。具体实现方法这里就不详细介绍了。4.3.5矩阵键盘逐列扫描法的实现程序p4_2.asm全扫描子程序

列扫描子程序

4.4牛气冲天—实战进阶

动手实践4-4:点阵动画显示(ex4_4.pdsprj、p4_4.asm)基本原理:每隔一定的时间(例如10ms),将8列点阵对应的行码顺序前移一列。具体实现时,每次循环显示动画的一帧(共8列),而显示每一帧对应的行码逐一提前。例如,显示第一帧时,从行码表的第一个字节开始输出8列行码;延时10ms后显示第二帧,从行码表的第二字节开始输出8个行码,…。直到重复8帧后,又重复上述过程。液晶显示器(LiquidCrystalDisplay,LCD)分为字段型、字符型和点阵图形型。字段型以长条状组成字符显示,主要用于数字显示,也可用于显示西文字母或某些字符;字符型专门用于显示字母、数字、符号等,一个字符由5×7或5×10点阵组成;点阵图形型是在平板上排列的多行列的矩阵式的晶格点,这种类型的LCD显示器广泛用于笔记本电脑、彩色电视和游戏机等的图形显示。将LCD控制器、驱动器、RAM、ROM和液晶显示器用PCB连接到一起,从而构成液晶显示模块(LCdModule,LCM),单片机只需向LCD显示模块写入相应的命令和数据就可显示需要的内容。4.4.1字符型液晶显示器LCD1602LCD1602的内部结构及外部引脚LCD1602是16字*2行的字符型液晶显示模块,工作电压为4.5~5.5V,工作电流为2mA。模块内有80字节DDRAM(DisplayDataRAM,显示数据随机存储器),还有CGROM(CharacterGeneraterROM,字符发生只读存储器)和CGRAM(CharacterGeneraterRAM,字符发生随机存取存储器)。CGROM中存放了192个字符的5×7点阵(称为字符的字模)。每个字符有一个唯一的编码代号,其中数字和字母字符的编码代号正好是其ASCII码,因此只需将待显示字符的ASCII码写入DDRAM,内部控制电路就可自动从CGROM中取出的字符点阵,从而将字符显示在显示器上。DDRAM用于接收字符的ASCII码,称为显示缓冲区。DDRAM中各存储单元与显示屏上字符的显示位置一一对应,每个存储单元都有一个地址,如图4-22所示。LCD1602模块内部还有指令寄存器IR和地址寄存器DR这两个8位的寄存器,用于接收各种命令和地址,对工作方式和字符显示位置等进行设置。用户通过RS和R/W信号选择指定的寄存器,利用E控制信号向其中写入各种命令,实现相应的操作,如表4-3所示。LCD1602的命令字及基本操作LCD1602上电后的复位状态为:清除屏幕显示;设置为8位数据长度,单行显示,5×7点阵字符;显示屏、光标、闪烁功能均关闭;输入方式为整屏显示不移动,I/D=1。程序中,可以根据需要利用上述命令字对其显示模式进行初始化设置。初始化设置的一般步骤为:写命令01H,命令1,清屏;写命令38H,命令6,设置显示模式为2行显示、5×7点阵,8位数据接口;写命令0EH或0CH,命令4,开显示,显示/不显示光标,字符不闪烁;写命令06H,命令3,设置字符不动,光标自动右移1个字符位置。初始化设置以后,即可设置字符的显示位置,并将在当前屏幕位置需要显示的字符ASCII码写入DDRAM。在初始化时写入命令06H后,每输出一个字符,屏幕上的光标将自动右移。因此,如果需要在同一行连续显示多个字符,只需要执行一次发送表中命令8的操作,设置第一个字符显示的位置。LCD内部有一个数据地址指针,用户可通过它访问内部全部80字节的DDRAM单元,在程序中对应的命令代码为80H+DDRAM单元地址码。动手实践4_5LCD1602的应用(ex4_5.pdsprj,p4_5.asm)图形液晶显示模块,主要由行驱动器/列驱动器及128×64点阵液晶显示器组成。利用程序可以对显示屏上的每一个点阵进行亮灭控制,从而实现任意图形的显示,也可以显示4行8列共32个16×16点阵汉字。LCD12864液晶显示器上的128×64点阵分为左半屏和右半屏,每个半屏都由64×64点阵构成。与LCD1602相比,主要增加了CS1和CS2引脚,用于控制左右半屏的显示。这些引脚的基本功能如表4-5所示,与51单片机的一种典型连接方法如图4-23所示。4.4.2图形液晶显示器LCD12864LCD12864的常用命令及基本操作汇编语言程序举例:实现图4-23的显示效果。

上述程序中的主程序主要包括两大部分,分别用于显示左半屏和右半屏图案。两部分的操作步骤相同,可以用图4-24所示流程图表示。在显示左/右半屏时,首先设置CS1和CS2引脚的高低电平,以指定接下来显示的是左半屏还是右半屏,然后发送开显示命令(命令代码为3FH),允许所选择的半屏显示。显示半屏的主要流程是一个循环,每次循环显示一页。在循环一开始,页设置命令为0B8H,事先存入R0。每显示完一页,在换页时将起始页(即R0中保存的页设置命令字)递增1。在循环体中,每次循环首先将一页的总列数64存入R6,之后调用RWRITE子程序向LCD12864发送页设置和列设置命令,再调用DWRITE子程序写入点阵数据。注意显示完一列后不需要重新发送页设置和列设置命令,直接输出下一列点阵数据即可。但是每次显示完一页后,都需要重新发送页设置和列设置命令,并且将起始页(即R0中保存的页设置命令字)递增1。本例中需要显示的图案具有一定的规律,因此所需的点阵数据表无需在程序中单独定义,而是由程序中相应的指令直接产生。点阵数据表及字模提取软件对于复杂的、无规律的图形和字符,可以像数码管的字段码表一样定义一个点阵数据表。在程序中只需要利用MOVC指令查表获取各列点阵数据,即可很方便地显示任意期望的字符和图形。为便于程序显示控制,在同一页中,将每一列的8个点阵定义为一个字节的点阵数据。左/右半屏的每一页共有64列点阵,因此一共需要64字节,按列号顺序定义。每个半屏的所有点阵数据再按照页号顺序定义,共需要64×8=512字节。这样得到整个液晶显示屏的点阵数据共需要2×64×8=1024=1KB,这1KB数据构成点阵数据表。字符的点阵数据表在LCD12864中,假设所有中英文字符都用16×16点阵显示,则每个字符的点阵将占用相邻的两页,每页16列,因此每个字符的点阵数据为216=32字节。为便于程序控制,将一个字符的32字节点阵数据分为两组,对应字符的上下两半部分,屏上相邻的两页分别显示汉字的上半部分和下半部分。在定义字符的点阵数据表时,根据字符在屏幕上需要显示的位置,在上述点阵数据表中找到对应的点阵数据定义,用待显示字符的上下两半点阵数据替换即可。例如,要求汉字“东”在左半屏的第0页和第1页最后16列显示,则其64字节点阵数据分别定义在第0页和第1页的最后两行:TAB:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论