1、 第第5章章 I/O口应用口应用-显示与开关显示与开关/键盘输入键盘输入1 内容概要内容概要2单片机片内的单片机片内的I/O口口常见的显示器件常见的显示器件常见的输入器件常见的输入器件发光二极管发光二极管LED数码管数码管LCD液晶屏液晶屏开关开关键盘键盘拨盘开关拨盘开关3发光二极管发光二极管4LED数码管数码管5LCD液晶屏液晶屏6常见的输入器件常见的输入器件 5.1 单片机控制发光二极管显示单片机控制发光二极管显示 第第2章介绍了单片机片内章介绍了单片机片内4个个I/O端口端口P0口口P3口的内部电路以口的内部电路以及外部引脚特性。如果及外部引脚特性。如果P0口作为通用口作为通用I/O使用
2、,由于漏极开路,需使用,由于漏极开路,需要外接上拉电阻。要外接上拉电阻。而而P1P3口内部已有口内部已有30k左右的上拉电阻。下左右的上拉电阻。下面首先讨论面首先讨论P1P3口如何与口如何与LED发光二极管连接。发光二极管连接。发光二极管常用来指示系统工作状态,制作节日彩灯、广告牌发光二极管常用来指示系统工作状态,制作节日彩灯、广告牌匾等。匾等。大部分大部分发光二极管发光二极管工作电流工作电流15mA之间,之间,其内阻为其内阻为20100。电流越大,亮度也越高。电流越大,亮度也越高。为保证发光二极管正常工作,同时减少功耗,限流电阻选择十为保证发光二极管正常工作,同时减少功耗,限流电阻选择十分重
3、要,若供电分重要,若供电电压为电压为+5V,则则限流电阻可选限流电阻可选13k。5.1.1 单片机与发光二极管的连接单片机与发光二极管的连接 单片机通过并行端口单片机通过并行端口P1P3直接驱动发光二极管,电直接驱动发光二极管,电路如图路如图5-1所示。所示。P0口与口与P1、P2、P3口相比,口相比,P0口每位可驱动口每位可驱动8个个LSTTL输入,而输入,而P1P3口每一位的驱动能力,只有口每一位的驱动能力,只有P0口的口的一半。当一半。当P0口的某位为高电平时,可提供口的某位为高电平时,可提供400A的拉电流的拉电流(见图(见图5-1(a);当);当P0口某位为低电平(口某位为低电平(0
4、.45V)时,可)时,可提供提供3.2mA的灌电流(见图的灌电流(见图5-1(b),而),而P1P3口内部有口内部有30k左右的上拉电阻,如果高电平输出,则从左右的上拉电阻,如果高电平输出,则从P1、P2和和P3口输出的拉电流口输出的拉电流Id仅为几百仅为几百A,驱动能力较弱,亮度较差,驱动能力较弱,亮度较差,如图,如图5-1(a)所示。)所示。9图图5-1 发光二极管与单片机并行口的连接发光二极管与单片机并行口的连接 如果端口引脚为低电平,能使灌电流如果端口引脚为低电平,能使灌电流Id从单片机的从单片机的外部流入内部,则将大大增加流过的灌电流值,如图外部流入内部,则将大大增加流过的灌电流值,
5、如图5-1(b)所示。)所示。所以,所以,AT89S51单片机任何一个端口要想单片机任何一个端口要想获得较大的驱动能力,要采用低电平输出。获得较大的驱动能力,要采用低电平输出。如果一定要如果一定要高电平驱动,高电平驱动,可在单片机与发光二极管可在单片机与发光二极管之间之间加驱动电路,加驱动电路,如如74LS04、74LS244等。等。10115.1.2 单片机单片机I/O端口控制发光二极管的编程端口控制发光二极管的编程 发光二极管与单片机的发光二极管与单片机的I/O端口的连接,如图端口的连接,如图5-1(b)所示。如要点亮某发光二极管,只需该)所示。如要点亮某发光二极管,只需该I/O端口位端口
6、位写入写入“0”即可。下面通过一个例子介绍如何对即可。下面通过一个例子介绍如何对I/O端口端口编程实现对发光二极管亮灭的控制。编程实现对发光二极管亮灭的控制。【例例5-1】制作一个单片机控制的流水灯,原理电路制作一个单片机控制的流水灯,原理电路见图见图5-2,8个发光二极管个发光二极管LED0LED7经限流电阻分别经限流电阻分别接至接至P1口的口的P1.0P1.7引脚上,阳极共同接高电平。编引脚上,阳极共同接高电平。编写程序,每次点亮一个发光二极管,控制发光二极管由写程序,每次点亮一个发光二极管,控制发光二极管由上至下的反复循环流水点亮。上至下的反复循环流水点亮。说明:本例采用了说明:本例采用
7、了Proteus环境下的虚拟仿真,环境下的虚拟仿真,7.5版本元件库中没有版本元件库中没有AT89S51单片机,采用的是单片机,采用的是AT89C51来代替来代替AT89S51,以下同。,以下同。参考程序如下:参考程序如下:1213图图5-2 单片机控制的流水灯单片机控制的流水灯 ORG 0100HSTART:MOV R2,#8 MOV A,#0FEH;FEH为点亮为点亮P1.0脚发光二极管需写入脚发光二极管需写入 ;P1口的控制码口的控制码LOOP:MOV P1,A ;控制码写入;控制码写入P1口,点亮相应的口,点亮相应的LED LCALL DELAY;调用延时子程序;调用延时子程序 RL
8、A ;控制码循环左移,点亮下一位;控制码循环左移,点亮下一位 DJNZ R2,LOOP ;判断左移是否超过;判断左移是否超过8 位,未超过继续循位,未超过继续循环环 LJMP START ;左移循环已;左移循环已8次,再重新进行下一次循环次,再重新进行下一次循环点亮点亮1415DELAY:MOV R5,#20 ;延时子程序,延时约;延时子程序,延时约0.2sD1:MOV R6,#20D2:MOV R7,#248D3:DJNZ R7,D3 ;R7不为不为0则原地跳转则原地跳转 DJNZ R6,D2 DJNZ R5,D1 RET END5.2 开关状态检测开关状态检测 检测开关处于闭合状态还是打开
9、状态,只需把开关一检测开关处于闭合状态还是打开状态,只需把开关一端接到端接到I/O端口的引脚上,另一端接地,然后通过检测端口的引脚上,另一端接地,然后通过检测I/O端口引脚的电平来实现。端口引脚的电平来实现。【例例5-2】如图如图5-3所示,利用单片机、所示,利用单片机、1个开关个开关k和和1个个发光二极管发光二极管LED,构成一个简单的检测开关,构成一个简单的检测开关k是否闭合的是否闭合的系统。系统。图图5-3中,开关中,开关k的一端接到单片机的一端接到单片机P3.0引脚上,并通引脚上,并通过上拉电阻接到过上拉电阻接到+5V上,开关的另一端接地,当开关打开上,开关的另一端接地,当开关打开时,
10、时,P3.0引脚为高电平,当开关闭合时,引脚为高电平,当开关闭合时,P3.0引脚为低电引脚为低电平。平。16图图5-3 开关、开关、LED发光二极管与发光二极管与P1口的连接口的连接 单片机对开关状态的检测是由程序检测单片机对开关状态的检测是由程序检测P3.0引脚的引脚的输入电平是高还是低。当开关闭合,即输入电平是高还是低。当开关闭合,即P3.0脚为低电平脚为低电平;当开关打开,;当开关打开,P3.0引脚为高电平。引脚为高电平。P1.0引脚接发光二极管的阴极引脚接发光二极管的阴极LED,当开关,当开关k闭合闭合时,时,LED点亮;开关打开时,点亮;开关打开时,LED熄灭。开关熄灭。开关k与与L
11、ED没有任何电气上的联系。没有任何电气上的联系。19参考程序如下:参考程序如下:ORG 0100HSTART:JB P3.0,NOLIG;判;判P3.0高还是低,高还是低,P3.0高高;开关打开,跳;开关打开,跳NOLIG CLR P1.0 ;P3.0为低,开关闭合,则为低,开关闭合,则;P1.0输出输出0,点亮,点亮LED SJMP STARTNOLIG:SETB P1.0 ;开关为打开状态,;开关为打开状态,P1.0置置1 ;LED熄灭熄灭 SJMPSTART ;返回;返回 END5.3 单片机控制单片机控制LED数码管的显示数码管的显示5.3.1 LED数码管显示原理数码管显示原理 LE
12、D数码管是常见的显示器件。数码管是常见的显示器件。LED数码管为数码管为“8”字型的,共计字型的,共计8段段(包括(包括小数点段小数点段在内)或在内)或7段段(不包括不包括小数点段小数点段),),每一段对应一个发光二极管每一段对应一个发光二极管,有,有共阳极共阳极和和共阴极共阴极两种,如图两种,如图5-4所示。共阳极数码管的阳极连接所示。共阳极数码管的阳极连接在一起,公共阳极接到在一起,公共阳极接到+5V上;共阴极数码管的阴极连上;共阴极数码管的阴极连接在一起,通常此公共阴极接地。接在一起,通常此公共阴极接地。对于对于共阴极共阴极数码管,当某个发光二极管的阳极为数码管,当某个发光二极管的阳极为
13、高高电平电平时,发光二极管点时,发光二极管点亮亮,相应的段被显示。同样,相应的段被显示。同样,共阳极共阳极数码管的阳极连接在一起接数码管的阳极连接在一起接+5V,当某个发光二,当某个发光二极管的阴极接极管的阴极接低电平低电平时,该发光二极管被点时,该发光二极管被点亮亮,相应的,相应的段被显示。段被显示。2021图图5-4 8段段LED数码管结构及外形数码管结构及外形 为了使为了使LED数码管显示不同的字符,要把某些段点数码管显示不同的字符,要把某些段点亮,就要为数码管的各段提供一个字节的二进制代码,亮,就要为数码管的各段提供一个字节的二进制代码,即即段码段码。习惯上以。习惯上以“a”段段对应字
14、型码字节的对应字型码字节的最低位。最低位。各各种字符的段码如表种字符的段码如表5-1所示。所示。如要在数码管上显示某一字符,只需将该字符的段如要在数码管上显示某一字符,只需将该字符的段码加到各段上即可。码加到各段上即可。2223 例如某存储单元中的数为例如某存储单元中的数为“02H”,想在共阳极数,想在共阳极数码管上显示码管上显示“2”,需要把,需要把“2”的段码的段码“A4H”加到数码加到数码管各段。通常采用的方法是将欲显示的字符的段码作管各段。通常采用的方法是将欲显示的字符的段码作成一个表,根据显示的字符从表中查找到相应的段码成一个表,根据显示的字符从表中查找到相应的段码,然后单片机把该段
15、码输出到数码管的各个段上,同,然后单片机把该段码输出到数码管的各个段上,同时数码管的公共端接时数码管的公共端接+5V,此时在数码管上显示出字,此时在数码管上显示出字符符“2”。24【例例5-3】用单片机控制一个用单片机控制一个8段段LED数码管,如图数码管,如图5-5所示。要求数码管反复循环显示单个数字:所示。要求数码管反复循环显示单个数字:09。图图5-5 控制数码管循环显示单个数字控制数码管循环显示单个数字 图图5-5中,采用了共阳极数码管,中,采用了共阳极数码管,R1R7为限流电为限流电阻。单片机阻。单片机P0口输出段码,数码管的公共段接口输出段码,数码管的公共段接+5v。欲显示的数字欲
16、显示的数字09的字型码由于无规律可循,只能采用的字型码由于无规律可循,只能采用查表的方式来完成要求,这样可按着数字查表的方式来完成要求,这样可按着数字09的顺序,的顺序,把每个数字的字型码按顺序排好,形成一个段码表。把每个数字的字型码按顺序排好,形成一个段码表。根据要显示的数字,查找到相应的段码,从而控制根据要显示的数字,查找到相应的段码,从而控制LED数码管显示相应的字符。读者通过本例应掌握段数码管显示相应的字符。读者通过本例应掌握段码码查表程序查表程序的编写。的编写。26参考程序如下:参考程序如下:ORG 0100HSTART:MOV DPTR,#TABLE;指针指向表头地址;指针指向表头
17、地址S1:MOV A,#00H;设置地址偏移量;设置地址偏移量 MOVC A,A+DPTR;查表取得段码;查表取得段码,送送A CJNE A,#01H,S2 ;判断;判断A中段码是否中段码是否 为结束符为结束符01H,不是则跳,不是则跳S2继续显示继续显示 LJMPSTART;是结束符;是结束符01H,重新从,重新从;开始显示开始显示S2:MOV P0,A ;段码送;段码送LED显示显示LCALLDELAYINC DPTR;指针加;指针加1LJMPS1DELAY:MOV R5,#20;延时子程序;延时子程序D2:MOV R6,#20D1:MOV R7,#248D3:DJNZ R7,D3DJNZ
18、 R6,D1DJNZ R5,D2RET 28TABLE:DB 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h ;共阳极数码管共阳极数码管段码表段码表 DB 01H ;结束符;结束符 END 程序设计中,为达到反复循环显示数字程序设计中,为达到反复循环显示数字09的目的,在段的目的,在段码表中设置了一个结束符码表中设置了一个结束符01H,来控制反复循环显示。,来控制反复循环显示。295.3.2 LED数码管的显示方式数码管的显示方式1.静态显示方式静态显示方式 静态显示就是指无论多少位静态显示就是指无论多少位LED数码管数码管,都,都同时处同时处于显示状
19、态。于显示状态。多位多位LED数码管工作于静态显示方式时,各位的共数码管工作于静态显示方式时,各位的共阴极(或共阳极)连接在一起并接地(或接阴极(或共阳极)连接在一起并接地(或接+5V);每);每位数码管的段码线(位数码管的段码线(adp)分别与一个单片机控制的)分别与一个单片机控制的8位位I/O口锁存器输出相连。如果送往各个口锁存器输出相连。如果送往各个LED数码管所数码管所显示字符的段码一经确定,则相应显示字符的段码一经确定,则相应I/O口锁存器锁存的口锁存器锁存的段码输出将维持不变,直到送入下一个显示字符的段码段码输出将维持不变,直到送入下一个显示字符的段码。因此,静态显示方式的。因此,
20、静态显示方式的显示无闪烁,亮度较高,软件显示无闪烁,亮度较高,软件控制比较容易。控制比较容易。3031 图图5-6所示为所示为4位位LED数码管静态显示电路,各个数码数码管静态显示电路,各个数码管可独立显示,只要向控制各位管可独立显示,只要向控制各位I/O口锁存器写入相应的口锁存器写入相应的显示段码,该位就能保持相应的显示字符。这样在同一显示段码,该位就能保持相应的显示字符。这样在同一时间,每一位显示的字符可以各不相同。但是,静态显时间,每一位显示的字符可以各不相同。但是,静态显示方式示方式占用占用I/O口线较多。口线较多。对于对于图图5-6所示电路,要占用所示电路,要占用4个个8位位I/O口
21、(或锁存器口(或锁存器)。如果数码管数目增多,则还需要增加)。如果数码管数目增多,则还需要增加I/O口的数目。口的数目。在实际的系统设计中,如果在实际的系统设计中,如果显示位数较少显示位数较少,可采用,可采用静态静态显示方式显示方式。但。但显示位数较多显示位数较多时,为了降低成本,一般采时,为了降低成本,一般采用用动态显示动态显示方式。方式。图图5-6 4位位LED静态显示的示意图静态显示的示意图2.动态扫描显示方式动态扫描显示方式 显示位数较多时,静态显示所占用的显示位数较多时,静态显示所占用的I/O口多,为口多,为节省节省I/O口与驱动电路的数目,常采用动态扫描显示方口与驱动电路的数目,常
22、采用动态扫描显示方式。将所有式。将所有LED数码管显示器的数码管显示器的段码线段码线的相应段并联的相应段并联在一起,由在一起,由一个一个8位位I/O端口端口控制,而各显示位的控制,而各显示位的公共端公共端分别由分别由另一单独的另一单独的I/O端口端口线控制。线控制。34 图图5-7所示为一个所示为一个4位位8段段LED数码管动态扫描显示数码管动态扫描显示电路的示意图。其中单片机向电路的示意图。其中单片机向I/O(1)端口发出欲显示)端口发出欲显示字符的段码,而显示器的位点亮控制使用字符的段码,而显示器的位点亮控制使用I/O(2)端口)端口中的中的4位口线,位口线,来控制数码管公共端的电平,来控
23、制数码管公共端的电平,每一时刻每一时刻,只有,只有1位位选线有效,位位选线有效,即选中某一位显示,其他各位即选中某一位显示,其他各位位选线都无效,不显示。每位选线都无效,不显示。每隔一定时间逐位地轮流点亮隔一定时间逐位地轮流点亮各数码管(扫描),由于各数码管(扫描),由于数码管的余辉数码管的余辉和人眼的和人眼的“视觉视觉暂留暂留”作用,只要控制好每位数码管点亮显示的时间和作用,只要控制好每位数码管点亮显示的时间和间隔,则可造成间隔,则可造成“多位同时亮多位同时亮”的假象,达到的假象,达到4位同时位同时显示的效果。显示的效果。图图5-7 4位位LED数码管动态显示示意图数码管动态显示示意图 各位
24、数码管轮流点亮的时间间隔(扫描间隔)应各位数码管轮流点亮的时间间隔(扫描间隔)应根据实际情况而定。发光二极管从导通到发光有一定根据实际情况而定。发光二极管从导通到发光有一定的延时,如果的延时,如果点亮时间太短,发光太弱,人眼无法看点亮时间太短,发光太弱,人眼无法看清;清;时间太长,产生闪烁现象,时间太长,产生闪烁现象,而且此时间越长,占而且此时间越长,占用单片机时间也越多。另外,显示位数增多,也将占用单片机时间也越多。另外,显示位数增多,也将占用单片机的大量时间,因此动态显示的实质是以执行用单片机的大量时间,因此动态显示的实质是以执行程序的时间来换取程序的时间来换取I/O端口数目的减少。为克服
25、动态端口数目的减少。为克服动态显示的弊病,可采用显示的弊病,可采用5.6.4小节介绍的专用的键盘小节介绍的专用的键盘/显显示器芯片示器芯片,由芯片内部硬件扫描电路自动完成显示数由芯片内部硬件扫描电路自动完成显示数据的扫描刷新。据的扫描刷新。365.3.3 LED数码管静态显示设计数码管静态显示设计 【例例5-4】用用AT89S51设计一个设计一个2位位LED数码管显示的数码管显示的“秒表秒表”,显示时间为显示时间为0099秒,每秒自动加秒,每秒自动加1。原理。原理电路如图电路如图5-8所示。电路采用单片机的所示。电路采用单片机的P2口、口、P3口分别口分别控制两个控制两个LED数码管作为数码管
26、作为“秒表秒表”的时间显示。显示的时间显示。显示数字的段码采用查表方法。数字的段码采用查表方法。“秒秒”计时产生采用软件延计时产生采用软件延时的方法。时的方法。由本例可见,采用静态显示,需要一个数码管对应一由本例可见,采用静态显示,需要一个数码管对应一个个I/O端口。当数码管的数目较多时,需要占用较多的端口。当数码管的数目较多时,需要占用较多的I/O端口。但是软件编程比较简单,只需向端口。但是软件编程比较简单,只需向P2口、口、P3口口输出显示数字的段码即可,且显示不闪烁。输出显示数字的段码即可,且显示不闪烁。38图图5-8 2位位LED数码管静态显示的秒表数码管静态显示的秒表 3940425
27、.3.4 LED数码管动态显示设计数码管动态显示设计 下面介绍单片机控制数码管动态显示的案例。下面介绍单片机控制数码管动态显示的案例。【例例5-5】图图5-9所示的动态所示的动态扫描显示电路,由单片扫描显示电路,由单片机控制机控制8只只共阳极共阳极数码管,同时在数码管上同时显示数码管,同时在数码管上同时显示8个个数字数字18。电路中。电路中P0口输出显示字符的段码,口输出显示字符的段码,P2口输口输出点亮某位的位选码。由于出点亮某位的位选码。由于8位数码管的各段是并联的,位数码管的各段是并联的,P0端口一次只能送出一个显示段码,即一次只能点亮端口一次只能送出一个显示段码,即一次只能点亮1位数码
28、管。单片机先控制左边第位数码管。单片机先控制左边第1个数码管显示个数码管显示1,经过,经过延时后,再控制左边第延时后,再控制左边第2个数码管显示个数码管显示2,直至第,直至第8个数码管显示个数码管显示8,反复循环上述过程。,反复循环上述过程。图图5-9 数码管采用动态显示方式同时显示数字数码管采用动态显示方式同时显示数字18 单片机对单片机对8个数码管进行快速位选扫描,只个数码管进行快速位选扫描,只要位选扫描速度选择适当,虽然是每次只点亮一要位选扫描速度选择适当,虽然是每次只点亮一位数码管,但由于数码管的余辉和人眼的位数码管,但由于数码管的余辉和人眼的“视觉视觉暂留暂留”作用,只要控制好每位数
29、码管显示的时间作用,只要控制好每位数码管显示的时间和间隔,则可造成和间隔,则可造成“多位同时亮多位同时亮”的假象,达到的假象,达到8位数码管同时显示字符的效果。位数码管同时显示字符的效果。44455.4 单片机控制单片机控制LED点阵显示器显示点阵显示器显示 LED点阵显示器应用非常广泛,在许多公共场合,点阵显示器应用非常广泛,在许多公共场合,如商场、银行、车站、机场、医院随处可见。不仅能显如商场、银行、车站、机场、医院随处可见。不仅能显示文字、图形,还能播放动画、图像、视频等信号。示文字、图形,还能播放动画、图像、视频等信号。LED点阵显示器分为点阵显示器分为图文显示器图文显示器和和视频显示
30、器,视频显示器,有有单色显示,还有彩色显示。下面仅介绍单片机如何来控单色显示,还有彩色显示。下面仅介绍单片机如何来控制制单色单色LED点阵显示器点阵显示器的显示。的显示。5.4.1 LED点阵显示器结构与显示原理点阵显示器结构与显示原理 由若干个由若干个发光二极管发光二极管按按矩阵方式排列矩阵方式排列而成。阵列点而成。阵列点数可分为数可分为57、58、68、88点阵;按发光颜色可点阵;按发光颜色可分为分为单色、双色、三色单色、双色、三色;按极性排列可分为;按极性排列可分为共阴极共阴极和和共共阳极。阳极。471.LED点阵结构点阵结构 以以88LED点阵显示器为例,外形见图点阵显示器为例,外形见
31、图5-10,内部结,内部结构见图构见图5-11,由,由64个发光二极管组成,且每个发光二极管个发光二极管组成,且每个发光二极管是处于是处于行线行线(R0R7)和)和列线列线(C0C7)之间交叉点上)之间交叉点上.2.LED点阵显示原理点阵显示原理 LED点阵显示器显示的一个字符是由点阵中被点亮的点阵显示器显示的一个字符是由点阵中被点亮的LED所构成。下面以发光二极管所构成。下面以发光二极管阳极接行线,阴极接列阳极接行线,阴极接列线线的点阵显示器,即图的点阵显示器,即图5-11的结构来说明。可以看出,点的结构来说明。可以看出,点亮点阵中的一个亮点阵中的一个发光发光二极管的二极管的条件是:条件是:
32、所在行为高电平所在行为高电平,所在列为低电平。当然,行与列也是相对的,如把图,所在列为低电平。当然,行与列也是相对的,如把图5-11中的行列互换,则点亮点阵中的一个发光二极管的条中的行列互换,则点亮点阵中的一个发光二极管的条件是:对应的行为低电平,对应的列为高电平。件是:对应的行为低电平,对应的列为高电平。图图5-10 88 LED点阵显示器外形点阵显示器外形 图图5-11 88LED点阵显示器(共阴极)的结构点阵显示器(共阴极)的结构 如果在很短时间内如果在很短时间内依次点亮依次点亮很多个很多个发光二极管,发光二极管,LED点阵就可以点阵就可以显示一个稳定的字符、数字或其他图形显示一个稳定的
33、字符、数字或其他图形。因此。因此控制控制LED点阵显示,实质上就是控制加到行线和列线上的点阵显示,实质上就是控制加到行线和列线上的电平编码来控制点亮某些发光二极管(点),从而显示出电平编码来控制点亮某些发光二极管(点),从而显示出由不同发光的点组成的各种字符。由不同发光的点组成的各种字符。88 LED点阵显示模块中的每个发光二极管均放置点阵显示模块中的每个发光二极管均放置在行线和列线的交叉点上,当对应的某一行置在行线和列线的交叉点上,当对应的某一行置1电平,某电平,某一列为一列为0电平时,该发光二极管被点亮。电平时,该发光二极管被点亮。下面以下面以88 LED点阵显示器显示字符点阵显示器显示字
34、符“7”为例,见图为例,见图5-12。图图5-12 88 LED点阵显示器显示字符点阵显示器显示字符“7”显示过程如下:显示过程如下:先给先给88 LED点阵的第点阵的第1行送高电平(行线高电平有行送高电平(行线高电平有效),同时给所有列线送高电平(列线低电平有效),效),同时给所有列线送高电平(列线低电平有效),从而第从而第1行发光二极管全灭;行发光二极管全灭;延时一段时间,再给第延时一段时间,再给第2行送高电平,同时给所有列线行送高电平,同时给所有列线送送“1100 0001”,列线为,列线为0的发光二极管点亮,从而点亮的发光二极管点亮,从而点亮5个发光二极管,显示出字符个发光二极管,显示
35、出字符“7”的第一横;的第一横;延时一段时间后,再给第延时一段时间后,再给第3行送高电平,同时加到列线行送高电平,同时加到列线的编码为的编码为“1111 1101”,点亮,点亮1个发光二极管;个发光二极管;延时一段时间后,再给第延时一段时间后,再给第8行送高电平,同时给列线送行送高电平,同时给列线送“1111 1011”,显示出字符,显示出字符“7”的最下面的一行,点亮的最下面的一行,点亮1个发光二极管。然后再重新循环上述操作,利用个发光二极管。然后再重新循环上述操作,利用人眼的人眼的视觉暂留效应,视觉暂留效应,一个稳定的字符一个稳定的字符“7”就显示出来,如图就显示出来,如图5-12所示。所
36、示。1616 LED点阵显示器的结构与点阵显示器的结构与88 LED点阵点阵显示模块内部结构及显示原理是类似的,只不过行和显示模块内部结构及显示原理是类似的,只不过行和列均为列均为16。1616 LED点阵显示器是由点阵显示器是由4个个88 LED点阵显示器组成,且每个发光二极管也是放置在行线点阵显示器组成,且每个发光二极管也是放置在行线和列线的交叉点上,当对应的某一列置和列线的交叉点上,当对应的某一列置0电平,某一行电平,某一行置置1电平时,该发光二极管点亮。电平时,该发光二极管点亮。下面以下面以1616LED点阵显示器显示字符点阵显示器显示字符“子子”为为例,见图例,见图5-13。图图5-
37、13 1616 LED点阵显示器显示字符点阵显示器显示字符“子子”显示过程如下:显示过程如下:先给先给LED点阵的第点阵的第1行送高电平(行线高电平有效),行送高电平(行线高电平有效),同时给所有列线送高电平(列线低电平有效),从而第同时给所有列线送高电平(列线低电平有效),从而第1行发光二极管全灭;行发光二极管全灭;延时一段时间后,再给第延时一段时间后,再给第2行送高电平,同时给所有列行送高电平,同时给所有列线送线送“1100 0000 0000 1111”,列线为,列线为0的发光二极管点的发光二极管点亮,从而点亮亮,从而点亮10个发光二极管,显示出汉字个发光二极管,显示出汉字“子子”的第的
38、第一横;一横;延时一段时间后,再给第延时一段时间后,再给第3行送高电平,同时加到列线行送高电平,同时加到列线的编码为的编码为“1111 1111 1101 1111”,点亮,点亮1个发光二极管个发光二极管 ;延时一段时间后,再给第延时一段时间后,再给第16行送高电平,同时给列行送高电平,同时给列线送线送“1111 1101 1111 1111”,显示出汉字,显示出汉字“子子”的最下的最下面的一行,点亮面的一行,点亮1个发光二极管。然后再重新循环上述个发光二极管。然后再重新循环上述操作,利用人眼视觉暂留效应,一个稳定字符操作,利用人眼视觉暂留效应,一个稳定字符“子子”显示出来,见图显示出来,见图
39、5-13。5.4.2 控制控制1616 LED点阵显示屏的案例点阵显示屏的案例 单片机控制单片机控制1616点阵显示屏显示字符案例。点阵显示屏显示字符案例。【例例5-8】如图如图5-14,利用单片机及,利用单片机及 74LS154(4-16译译码器)、码器)、74LS07、1616 LED点阵显示屏来实现字符点阵显示屏来实现字符显示,编写程序,循环显示字符显示,编写程序,循环显示字符“电子技术电子技术”。图图5-14 控制控制1616LED点阵显示器(共阴极)显示字符点阵显示器(共阴极)显示字符 图中图中1616 LED点阵显示屏点阵显示屏16行行线行行线R0R15电平,电平,由由P1口低口低
40、4位经位经4-16译码器译码器74HC154的的16条译码输出线条译码输出线L0L15经驱动后的输出来控制。经驱动后的输出来控制。16列列线列列线C0C15的电的电平由平由P0口和口和P2口控制。剩下问题是如何确定显示字符的口控制。剩下问题是如何确定显示字符的点阵编码,以及控制好每一屏逐行显示的扫描速度(刷点阵编码,以及控制好每一屏逐行显示的扫描速度(刷新频率)。新频率)。66 扫描显示时,单片机通过扫描显示时,单片机通过P1口低口低4位经位经4-16译码器译码器74HC154的的16条译码输出线条译码输出线L0L15经驱动后的输出来经驱动后的输出来控制,逐行为高电平,来进行扫描。由控制,逐行
41、为高电平,来进行扫描。由P0口与口与P2口控口控制列码制列码C0C15的输出,从而显示出某行应当点亮的发的输出,从而显示出某行应当点亮的发光二极管。光二极管。下面以显示汉字下面以显示汉字“子子”为例,为例,说明其显示过程。由说明其显示过程。由程序可看出,汉字程序可看出,汉字“子子”的前的前3行发光二级管的列码为行发光二级管的列码为“FFH,FFH,03H,F0H,FFH,FBH,”,第一行的列码,第一行的列码为为“FFH,FFH”,由,由P0口与口与P2口输出,没有点亮的发口输出,没有点亮的发光二极管。第二行的列码为光二极管。第二行的列码为“03H,F0H”,通过,通过P0口与口与P2口输出后
42、,由图口输出后,由图5-14的电路可看出,的电路可看出,H03加到列线加到列线C7C0的二进制编码为的二进制编码为“0000 0011”,这里要注意加到,这里要注意加到8个发光二极管上的对应位置。个发光二极管上的对应位置。按照图按照图5-13和图和图5-14的连线关系,加到从左到右发的连线关系,加到从左到右发光二极管应为光二极管应为C0C7的二进制编码为的二进制编码为“1100 0000”,即即最左边的最左边的2个发光二极管不亮,其余的个发光二极管不亮,其余的6个发光二极管点个发光二极管点亮。同理,亮。同理,P2口输出的口输出的HF0加到列线加到列线C15C8的二进制的二进制编码为编码为“11
43、11 0000”,即加到,即加到C8C15的二进制编码为的二进制编码为“0000 1111”,所以第二行的最右边的,所以第二行的最右边的4个发光二极管个发光二极管不亮,如图不亮,如图5-13所示。对应通过所示。对应通过P0口与口与P2口输出加到第口输出加到第3行行16个发光二极管的列码为个发光二极管的列码为“FFH,FBH,”,对应于从,对应于从左到右的左到右的C0C15的二进制编码为的二进制编码为“1111 1111 1011 1111”,从而第,从而第3行左边数第行左边数第11个发光二极管被点亮,其个发光二极管被点亮,其余均熄灭,如图余均熄灭,如图5-14所示。其余各行点亮的发光二极管所示
44、。其余各行点亮的发光二极管,也是由,也是由1616点阵的列码来决定的。点阵的列码来决定的。5.5 单片机控制液晶显示模块单片机控制液晶显示模块1602 LCD的显示的显示 液晶显示器(液晶显示器(Liquid Crystal Display,LCD)具有)具有省电、体积小、抗干扰能力强等优点,省电、体积小、抗干扰能力强等优点,LCD显示器分显示器分为为字段型、字符型字段型、字符型和和点阵图形型。点阵图形型。(1)字段型)字段型。以长条状组成字符显示,主要用于数以长条状组成字符显示,主要用于数字显示,也可用于显示西文字母或某些字符,广泛用于字显示,也可用于显示西文字母或某些字符,广泛用于电子表、
45、计算器、数字仪表中。电子表、计算器、数字仪表中。(2)字符型)字符型。专门用于显示字母、数字、符号等。专门用于显示字母、数字、符号等。一个字符由一个字符由5 7或或5 10的点阵组成,的点阵组成,在单片机系统中已在单片机系统中已广泛使用。广泛使用。(3)点阵图形型。)点阵图形型。广泛用于图形显示,如笔记本电脑广泛用于图形显示,如笔记本电脑彩色电视和游戏机等。它是在平板上排列的多行列的矩彩色电视和游戏机等。它是在平板上排列的多行列的矩阵式的晶格点,点大小与多少决定了显示的清晰度。阵式的晶格点,点大小与多少决定了显示的清晰度。5.5.1 LCD 1602液晶显示模块简介液晶显示模块简介 最常见的字
46、符型液晶显示模块。单片机系统中常用。最常见的字符型液晶显示模块。单片机系统中常用。由于由于LCD显示面板较为脆弱,厂商已将显示面板较为脆弱,厂商已将LCD控制器、驱控制器、驱动器、动器、RAM、ROM和液晶显示器用和液晶显示器用PCB连接到一起,连接到一起,称为称为液晶显示模块(液晶显示模块(LCd Module,LCM),),用户只需用户只需购买现成的液晶显示模块即可。单片机只需向购买现成的液晶显示模块即可。单片机只需向LCD显示显示模块写入相应命令和数据就可显示需要的内容。模块写入相应命令和数据就可显示需要的内容。1字符型液晶显示模块字符型液晶显示模块LCD 1602特性与引脚特性与引脚
47、字符型字符型LCD模块常用的有模块常用的有16字字1行、行、16字字2行、行、20字字2行、行、20字字4行等模块,型号常用行等模块,型号常用1602、1604、2002、2004来表示,其中来表示,其中为商标名称,为商标名称,16代表代表液晶显示器液晶显示器每行可显示每行可显示16个个字符,字符,02表示表示显示显示2行。行。LCD1602内部具有字符库内部具有字符库ROM(CGROM),能显示出,能显示出192个字符个字符(57点阵),点阵),如图如图5-15所示。所示。图图5-15 ROM字符库的内容字符库的内容 由字符库可看出显示器显示的由字符库可看出显示器显示的数字和字母数字和字母部
48、分代码,恰部分代码,恰是是ASCII码表中编码。码表中编码。单片机控制单片机控制LCD 1602显示字符,只需显示字符,只需将待显示字符的将待显示字符的ASCII码写入内部的显示数据码写入内部的显示数据RAM(DDRAM),用内部控制电路就可将字符在显示器上显示出),用内部控制电路就可将字符在显示器上显示出来。来。例如,例如,显示字符显示字符“A”,单片机只需将字符,单片机只需将字符“A”的的ASCII码码41H写入写入DDRAM,控制电路就会将对应的字符库,控制电路就会将对应的字符库ROM(CGROM)中的字符)中的字符“A”的点阵数据找出来显示在的点阵数据找出来显示在LCD上。上。模块内有
49、模块内有80字节数据显示字节数据显示RAM(DDRAM),除显示,除显示192个个字符(字符(5 7点阵)的点阵)的字符库字符库ROM(CGROM)外,还有外,还有64字节字节的的自定义字符自定义字符RAM(CGRAM),用户可自行定义,用户可自行定义8个个57点阵点阵字符。字符。LCD 1602工作电压工作电压4.55.5V,典型,典型5V,工作电流,工作电流2mA。标准的标准的14引脚(无背光)引脚(无背光)或或16个引脚(有背光)个引脚(有背光)的外形及引的外形及引脚分布如图脚分布如图5-16所示。所示。(a)LCD 1602的外形的外形 (b)LCD 1602的引脚的引脚图图5-16
50、LCD 1602外形及引脚外形及引脚 引脚包括引脚包括8条数据线、条数据线、3条控制线条控制线和和3条电源线,条电源线,见表见表5-2。通过。通过单片机向模块写入命令和数据,就可对显示方式和显示内容做出单片机向模块写入命令和数据,就可对显示方式和显示内容做出选择。选择。2LCD1602字符的显示及命令字字符的显示及命令字 显示字符首先要解决待显示字符的显示字符首先要解决待显示字符的ASCII码产生。码产生。用户只需在用户只需在C51程序中程序中写入欲显示的字符常量写入欲显示的字符常量或或字符串常字符串常量量,C51程序在程序在编译后会自动生成其标准的编译后会自动生成其标准的ASCII码,码,然