1、模块5 显示和键盘接口技术模块5 显示和键盘接口技术任务7 LED数码管显示的简易秒表倒计时设计任务8 编制数码管动态显示程序任务9 字符型LCD液晶显示欢迎界面任务10 用矩阵键盘控制8路跑马灯模块5 显示和键盘接口技术任务7 LED数码管显示的简易秒表倒计时设计模块5 显示和键盘接口技术1.任务目的通过对由LED数码管显示一位数09简易倒计时秒表的制作,熟悉单片机与LED数码管的接口技术,进一步了解数组的定义、赋值、初始化等操作方法。2.任务要求用单片机实现一位数简易秒表倒计时控制,计时范围为09 s,并将计时时间在一位数码管上显示出来。3.电路设计用单片机控制LED数码管显示的简易秒表硬
2、件电路如图5.1所示,单片机的P0口8个引脚接到数码管的8个段控制端。图5.1中采用的是共阳极数码管,所以COM端(公共端)接P2.7作为选通端。如果是共阴极数码管,则须将COM端接地。模块5 显示和键盘接口技术4.程序设计/*功能:数码管显示10秒倒计时*/*数码管硬件结构选择为:三极管驱动8位共阳型数码管*/#include#define uchar unsigned char#define uint unsigned int#define sm_data P0 /P0选择段sbit p2_7=P27;void delay1s()uchar i;for(i=0;i=0;i-)sm_data
3、=zki;delay1s();模块5 显示和键盘接口技术5.程序运行测试编译、链接过程参见任务2,将二进制文档ex5_1.hex下载到单片机的程序存储器中,接通电路板电源,即可观察到一位简易秒表按照90的顺序显示。模块5 显示和键盘接口技术5.1 数 组模块5 显示和键盘接口技术5.1.1 一维数组1.一维数组的定义定义格式如下:类型说明符 数组名 常量表达式;类型说明符是数组中各个元素的数据类型;数组名是用户定义的数组标识符;常量表达式表示数组元素的个数。如:int a4;/定义整型数组a,有4个元素,a0、a1、a2、a3char b5;/定义字符数组b,有5个元素定义数组时,应注意以下几
4、点:(1)对于同一数组,所有元素的数据类型都必须是相同的。模块5 显示和键盘接口技术(2)数组名的书写规则应符合标识符的书写规定。(3)数组名不能与其他变量名相同。(4)方括号中的常量表达式不可以是变量,但可以是符号常数和常量表达式。如:#define NUM 4main()int aNUM,b4-2;(5)可以在一个类型说明中,定义多个数组和变量。2.数组元素数组元素也是一种变量,其标识方法为数组名后跟一个下标,它只能为整型数或整型表达式。定义形式:数组名下标如:zk7,ai等都是合法的。下标表示该数组元素在数值中的位置,其值从0开始,下标为0的数组元素是数组中的第一个数组元素,zk7为该数
5、组中的第8个元素。模块5 显示和键盘接口技术在程序中不能一次引用整个数组,只能逐个使用数组元素。如任务7秒表倒计时程序中程序段:for(i=9;i=0;i-)sm_data=zki;3.数组赋值给数组赋值的方法有赋值语句和初始化赋值两种。(1)在程序执行过程中,可用赋值语句对数组元素逐个赋值,如:for(i-0;i10;i+)Numi=i;(2)数组初始化赋值是指在数组定义时给数组元素赋予初值,如:int num10=0,1,2,3,4,5,6,7,8,9;这种赋值方式是在编译阶段完成的,可以减少程序运行时间,提高程序执行效率。模块5 显示和键盘接口技术5.1.2 字符数组前面介绍的数组是数值
6、型的数组,数组中的每一个元素都是用来存放数值型的数据。数组不仅可以是数值型的,也可以是字符型的或其他类型的(如指针型、结构体型)。字符数组的定义格式与一维数组定义类似,用来存放字符数据的数组是字符数组。字符数组中的一个元素就是一个字符。可以在定义字符数组时对各元素赋初值,即初始化。例如:char c10=I,a,m,h,a,p,p,y;把10个字符分别赋给c0c9这10个元素。如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预知的。如果大括号中提供的初值个数大于数组长度,则按语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定义为空字符(即0
7、)。模块5 显示和键盘接口技术任务8 编制数码管动态显示程序模块5 显示和键盘接口技术1.任务目的根据电路编写在4个数码管上稳定显示“1234”的程序,了解数码管的动态显示的驱动。2.任务要求采用动态显示方式,用单片机实现4位数码管稳定显示“1234”。3.电路设计用动态显示方式点亮4个共阳极数码管的电路图如图5.2所示。图中将各个共阳极数码管相应的段选控制端并联在一起,仅用一个P0口控制。各位数码管的公共端,也称为“位选端”,由P2口高四位控制,用4个PNP型三极管驱动。模块5 显示和键盘接口技术4.程序设计4位数码管动态显示“1234”的程序如下。/*功能:让4个数码管依次显示1到4,调整
8、delay函数中的数值,可使数码管全亮或每次只亮一个。*/*数码管硬件结构选择为:三极管驱动8位共阳型数码管*/#include#define uchar unsigned char#define uint unsigned int#define sm_data P0 /P0选择段#define sm_dp P2 /P2选择位void delay(uint x);void main()uchar i;uint zk10=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x98;/共阳型数码管对应的 /1到9十六进制编码 while(
9、1)模块5 显示和键盘接口技术 for(i=0;i4;i+)sm_dp=(i=0)?0 xEF:(sm_dp1)+1;/(sm_dp1)+1保证每次只点亮一个数码管 sm_data=zki;delay(5);/延时时间决定只亮一个数码管,还是所有数码管均有显示 /改变delay函数中的数值,可观察到不同的视觉暂留效果 /根据实践所得,当delay函数中的数值为15时,数码管全亮效果最佳 /当delay函数中的数值为80以上时,清楚可见每次只有一个数码管有显示 void delay(uint n)uchar i;while(n-)for(i=0;i125;i+);模块5 显示和键盘接口技术5.2
10、 单片机与LED数码管接口模块5 显示和键盘接口技术5.2.1 LED数码管的结构及原理1.LED数码管的结构在单片机系统中,经常采用LED数码管来显示单片机系统的工作状态、运算结果等各种信息,LED数码管是单片机人机对话的一种重要输出设备。单个LED数码管的外形如图5.3所示,外部引脚如图5.4所示。LED数码管由8个发光二极管组成,通过不同的发光字段组合可用来显示数字09、字符AF、H、L、P、R、U、Y、符号“”及小数点“.”等。按照内部8个发光二极管连接方式的不同,LED数码管可分为共阳极型LED数码管和共阴极型LED数码管两种,其内部结构如图5.5所示。模块5 显示和键盘接口技术5.
11、程序运行测试编译、链接过程参见任务2,将二进制文档ex5_1.hex下载到单片机的程序存储器中,接通电路板电源,即可观察到一位简易秒表按照90的顺序显示。2.LED数码管的工作原理这里以共阳极型为例说明LED数码管的工作原理。从任务7中我们知道,若将数值0送至单片机的P0口,数码管上不会显示数字“0”。显然,要使数码管显示出数字或字符,直接将相应的数字或字符送至数码管的段控制端是不行的,必须使段控制端输出相应的字型编码。如图5.5(a)所示,共阳极数码管的8个发光二极管的阳极连接在一起,作为公共控制端(com),阴极作为“段”控制端。模块5 显示和键盘接口技术(1)当公共端接低电平时,每个发光
12、二极管都是截止的状态,无法发光。(2)当公共端接高电平时,当某段控制端为低电平时,该段对应的发光二极管导通并点亮。通过点亮不同的段,显示出不同的字符。如显示数字1时,b、c两端接低电平,其他各端接高电平。在任务7中,单片机P0口的八个引脚依次与数码管的a、b、f、dp八个段控制引脚相连接。要显示数字“0”,则数码管的a、b、c、d、e、f六个段应点亮,其他段熄灭,需向P0口传送数据11000000(C0H),该数据就是与字符“0”相对应的共阳极字型编码。5.2.2 LED数码管静态显示1.静态显示的概念静态显示是指当数码管显示某一字符时,相应的某段发光二极管恒定导通或恒定截止。这种显示方式的各
13、位数码管的公共端恒定接地(共阴极)或+5 V电源(共阳极)。每个数码管的8个段位控制引脚分别与一个8位I/O端口相连。只要I/O端口有显示字型码输出,数码管就显示给定字符,并保持不变,直到I/O端口输出新的段码。任务7采用的就是一位数码管的静态显示方式。2.静态显示的接口采用静态显示方式,较小的电流就可获得较高的亮度,且占用CPU时间少,编程简单,显示便于监测和控制,但占用单片机的I/O端口线多,n位数码管的静态显示需占用8n个I/O端口,所以限制了单片机连接数码管的个数。同时,硬件电路复杂,成本高,只适合显示位数较少的场合。模块5 显示和键盘接口技术静态显示电路和实例见任务7。5.2.3 L
14、ED数码管动态显示1.动态显示的概念动态显示是一种按位轮流点亮各位数码管的显示方式,即在某一时段,只让其中一位数码管的“位选端”有效,并送出相应的字型显示编码。此时,其他位的数码管因“位选端”无效而都处于熄灭状态。下一时段按顺序选通另外一位数码管,并送出相应的字型显示编码,按此规律循环下去,即可使各位数码管分别间断的显示出相应的字符。虽然在同一时刻只有一位数码管在点亮,但利用人眼的视觉暂留效应和发光二极管熄灭时的余辉效应,看到的却是多位数码“同时”显示。这一过程称为动态扫描显示。2.动态显示的接口动态显示方式下,数码管的所有段选口共用一个8位I/O口,而每个数码管显示位要占用一根I/O线,因此
15、,n位动态显示的数码管只占用一个8位I/O端口和n根I/O线。显示n位数码时,连接段选的8位I/O端口依次送出n位数码的段码数据。同时,依次控制相应位公共端,当公共端电平为“0”(共阴极)或“1”(共阳极)时,该位数码管点亮。模块5 显示和键盘接口技术任务9 字符型LCD液晶显示欢迎界面模块5 显示和键盘接口技术1.任务目的通过对字符型LCD液晶欢迎界面的显示,让读者了解LCD显示器与单片机的接口方法,理解LCD显示程序的设计思路。2.任务要求实现在1602液晶的第一行显示“WELCOME!”,第二行显示“WWW.WTC.EDU.CN”。3.电路设计LCD液晶显示电路如图5.6所示,现对接口做
16、简要说明:液晶1、2端为电源端,15、16为背光电源端,为防止直接加5 V电压会烧坏背光灯,在15脚串入一个10 k电阻限流。3端为液晶对比度调节端,通过一个1 k的可调电阻来调节显示对比度。模块5 显示和键盘接口技术4端为向液晶的控制器写数据或写命令的选择端,接单片机的P3.5端口。5端为读/写选择端,此任务中,只向液晶写入命令和显示数据,所以此端始终为“写”状态,即低电平状态。6端为使能信号,是操作时必需的信号,接P3.4口。4.程序设计#include#define uchar unsigned char#define uint unsigned intuchar code table=
17、WELCOME!;uchar code table1=WWW.WTC.EDU.CN;sbit lcden=P35;/液晶使能端sbit lcdrs=P34;/液晶数据命令选择端uchar num;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);模块5 显示和键盘接口技术void write_command(uchar com)lcdrs=0;/选择写命令模式 P0=com;/将要写的命令字送到数据总线上 delay(5);/稍做延时以待数据稳定 lcden=1;/使能端给一高电平,因为初始化函数中已将lcden置为0 dela
18、y(5);lcden=0;/将使能端置0以完成高脉冲void write_data(uchar dat)lcdrs=1;P0=dat;delay(5);lcden=1;delay(5);lcden=0;模块5 显示和键盘接口技术void init()lcden=0;write_command(0 x38);/设置16*2显示,5*7点阵,8位数据接口 write_command(0 x0c);/设置开显示,不显示光标 write_command(0 x06);/写一个字符后地址指针加1 write_command(0 x01);/显示清0,数据指针清0void main()init();wri
19、te_command(0 x80);for(num=0;num8;num+)write_data(tablenum);delay(5);模块5 显示和键盘接口技术 write_command(0 x80+0 x40);for(num=0;num14;num+)write_data(table1num);delay(5);while(1);模块5 显示和键盘接口技术5.3 单片机与LCD液晶显示器接口模块5 显示和键盘接口技术5.3.1 LCD芯片介绍液晶是一种高分子材料,因为其特殊的物理、化学、光学特性,20世纪中叶开始广泛应用在轻薄型显示器上。液晶显示器(Liquid Crystal Dis
20、play,LCD)的主要原理是以电流刺激液晶分子产生点、线、面并配合背部灯管构成画面。通常,我们把各种液晶显示器都直接叫做液晶。各种型号的液晶通常是按照现实字符的行数或液晶点阵的行、列数来命名的。比如:1602的意思是每行显示16个字符,一共可以显示两行,类似的命名还有0801,0802,1601等。这类液晶通常都是字符型液晶,只能显示ASCII码字符,如数字、大小写字母、各种符号等。12232液晶属于图形型液晶,它是由122列、32行组成,即共有12232个点来显示各种图形,类似的命名还有12864、19264、192128等。根据客户需求,厂家还可以设计出任意数组合的点阵液晶。模块5 显示
21、和键盘接口技术所谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。字符型点阵液晶显示模块LCD1602如图5.7所示。通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其引脚排列如图5.8所示,引脚定义如表5.2所示。模块5 显示和键盘接口技术5.3.2 LCD1602中的存储器LCD1602内置了DDRAM、CGROM和CGR
22、AM。1.DDRAM模块5 显示和键盘接口技术DDRAM就是显示数据RAM,用来寄存待显示的字符代码,共80个字节,其地址和屏幕的对应关系如表5.3所示。也就是说想要在LCD1602屏幕的第一行第一列显示一个“A”字,就要向DDRAM的00H地址写入“A”字的代码。但具体的写入是要按LCD模块的指令格式来进行的。一行有40个地址,在1602中我们就用前16个就行了。第二行也一样,用前16个地址。对应关系如表5.4所示。模块5 显示和键盘接口技术2.CGROM1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如表5.5所示。这些字符有:阿拉伯数字、英文字母的
23、大小写、常用的符号和日文假名等。每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。模块5 显示和键盘接口技术3.CGRAM字符代码0 x000 x0F为用户自定义的字符图形RAM,就是CGRAM了。0 x200 x7F为标准的ASCII码,0 xA00 xFF为日文字符和希腊文字符,其余字符码(0 x100 x1F及0 x800 x9F)没有定义。5.3.3 LCD1602指令说明LCD1602 模块内部有11条控制指令,见表5.6。模块5 显示和键盘接口技术1.清屏指令功能:(1
24、)清除液晶显示器,即将DDRAM的内容全部填入“空白”的ASCII码20H。(2)光标归位,即将光标撤回液晶显示屏的左上方。(3)将地址计数器(AC)的值设为0。2.光标归位指令 功能:(1)把光标撤回到显示器的左上方。(2)把地址计数器(AC)的值设置为0。(3)保持DDRAM的内容不变。模块5 显示和键盘接口技术3.进入模式设置指令功能:设定每次写入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的情况如下所示:位名 设置 I/D 0=写入新数据后光标左移 1=写入新数据后光标右移 S 0=写入新数据后显示屏不移动 1=写入新数据后显示屏整体右移1个字 模块5 显示和
25、键盘接口技术4.显示开关控制指令 功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下:位名 设置 D 0=显示功能关 1=显示功能开 C 0=无光标 1=有光标 B 0=光标闪烁 1=光标不闪烁 模块5 显示和键盘接口技术5.设定显示屏或光标移动方向指令 功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下:S/C R/L 设定情况 0 0 光标左移1格,且AC值减1 0 1 光标右移1格,且AC值加1 1 0 显示器上字符全部左移一格,但光标不动 1 1 显示器上字符全部右移一格,但光标不动 模块5 显示和键盘接口技术6.功能设定指令 功能:设定数据总线位数、显示
26、的行数及字型。参数设定的情况如下:位名 设置 DL 0=数据总线为4位 1=数据总线为8位 N 0=显示1行 1=显示2行 F 0=57点阵/每字符 1=510点阵/每字符 模块5 显示和键盘接口技术7.设定CGRAM地址指令 功能:设定下一个要存入数据的CGRAM的地址。8.设定DDRAM地址指令 功能:设定下一个要存入数据的DDRAM的地址。注意:这里我们送地址的时候应该是0 x80+Address,这也是前面说到写地址命令的时候要加上0 x80的原因。模块5 显示和键盘接口技术9.读取忙信号或AC地址指令功能:(1)读取忙碌信号FB的内容,FB=1表示液晶显示器忙,暂时无法接收单片机送来
27、的数据或指令;当FB=0时,液晶显示器可以接收单片机送来的数据或指令。(2)读取地址计数器(AC)的内容。10.数据写入DDRAM或CGRAM指令一览 功能:(1)将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符。(2)将使用者自己设计的图形存入CGRAM。模块5 显示和键盘接口技术11.从CGRAM或DDRAM读出数据的指令一览 功能:读取DDRAM或CGRAM中的内容。5.3.4 字符型LCD1602的基本操作及时序LCD1602的基本操作有四种:写命令、写数据、读状态和读数据。基本操作时序见表5.7。模块5 显示和键盘接口技术任务10 用矩阵键盘控制8路跑马灯模块5 显示和键盘接
28、口技术1.任务目的通过本任务,掌握矩阵键盘按键的识别方法。2.任务要求采用列扫描法,按下S0时,第1位灯亮;按下S1时,第2位灯亮;按下S2时,第3位灯亮;按下S3时,第4位灯亮;按下S4时,第5位灯亮;按下S5时,第6位灯亮;按下S6时,第7位灯亮;按下S7时,第8位灯亮;按下S8时,第1、2位灯亮;按下S9时,第2、3位灯亮;按下S10时,第3、4位灯亮;按下S11时,第4、5位灯亮;按下S12时,第5、6位灯亮;按下S13时,第6、7位灯亮;按下S14时,第7、8位灯亮;按下S15时,8位灯全亮。3.电路设计采用矩阵键盘控制8路跑马灯的电路如图5.9所示,16个矩阵按键由P2口的8根I/
29、O线联合控制,8路跑马灯由P1口控制。模块5 显示和键盘接口技术4.程序设计/功能:采用列扫描法,每按下一个按键,则由对应的1位或2位灯亮。/这种方法基于了单片机输出断口未被置0或1时,均保持高电平(端口为1)的特性/P2.0控制第1行,P2.1控制第2行,P2.2控制第3行,P2.3控制第4行;/P2.4控制第1列,P2.5控制第2列,P2.6控制第3列,P2.7控制第4列。#include#include#define uchar unsigned char#define uint unsigned int#define sm_data P1 /P1控制8路跑马灯sbit c0=P20;s
30、bit c1=P21;sbit c2=P22;sbit c3=P23;sbit c4=P24;sbit c5=P25;sbit c6=P26;sbit c7=P27;模块5 显示和键盘接口技术void delay1(uchar time);uchar jianpanzhi();/确定按键编号,返回的a值表示按键的编号。这是一个通用的程序,若想按下 /某个按键,实现某个功能,只要传递a值即可void display(uchar b);void main()uchar x;while(1)x=jianpanzhi();delay1(50);/按键释放后,去抖 display(x);模块5 显示和键
31、盘接口技术uchar jianpanzhi()uint i,a;c4=0;/初始化P2口,使P2_4-P2_7均为0,创造出判断是否有键按下的初试条件 c5=0;c6=0;c7=0;if(P2!=0 x0f)/判断是否有键按下 delay1(50);/按下按键时,去抖 if(P2!=0 x0f)/再次判断是否有键按下 for(i=0;i4;i+)switch(i)/列扫描 case 0:/只将P2.4置0,如果第一列有键按下,则P2.0P2.3某个端口为0;模块5 显示和键盘接口技术 /其余端口保持高电平 c4=0;c5=1;c6=1;c7=1;break;case 1:/只将P2.5置0,如
32、果第二列有键按下,则P2.0P2.3某个端口为0;/其余端口保持高电平 c4=1;c5=0;c6=1;c7=1;break;case 2:/只将P2.6置0,如果第三列有键按下,则P2.0P2.3某个端口为0;/其余端口保持高电平 c4=1;模块5 显示和键盘接口技术 c5=1;c6=0;c7=1;break;case 3:/只将P2.7置0,如果第四列有键按下,则P2.0P2.3某个端口为0;/其余端口保持高电平 c4=1;c5=1;c6=1;c7=0;break;default:break;模块5 显示和键盘接口技术 /计算法得到键值即确定a值,即被按下的按键编号,S0:a=1,S1:a=
33、2S15:a=16 if(!c0)/若P2.0=0,则表示s0(i为0时)或s1(i为1时)或s2(i为2时)或s3(i为3 /时)被按下 a=i+1;break;if(!c1)/若P2.1=0,则表示s4(i为0时)或s5(i为1时)或s6(i为2时)或s7(i为3时)被按下。a=i+5;break;if(!c2)/若P2.2=0,则表示s8(i为0时)或s9(i为1时)或s10(i为2时)或s11(i为3时)/被按下 模块5 显示和键盘接口技术 a=i+9;break;if(!c3)/若P2.3=0,则表示s12(i为0时)或s13(i为1时)或s14(i为2时)或s15(i为3时)/被按
34、下 a=i+13;break;/若在此处加上else a=0;则当键盘按下时,有数值显示;按键释放后,数值消失。return a;模块5 显示和键盘接口技术/显示程序,按下S0时,第1位灯亮;按下S1时,第2位灯亮;按下S2时,第3位灯亮;按下S3时,第4位灯亮/*按下S4时,第5位灯亮;按下S5时,第6位灯亮;按下S6时,第7位灯亮;按下S7时,第8位灯亮/*按下S8时,第1、2位灯亮;按下S9时,第2、3位灯亮;按下S10时,第3、4位灯亮;按下S11时,第4、5位灯亮/*按下S12时,第5、6位灯亮;按下S13时,第6、7位灯亮;按下S14时,第7、8位灯亮;按下S15时,8位灯全亮vo
35、id display(uchar b)switch(b)case 1:sm_data=0 xFE;break;case 2:sm_data=0 xFD;模块5 显示和键盘接口技术 break;case 3:sm_data=0 xFB;break;case 4:sm_data=0 xF7;break;case 5:sm_data=0 xEF;break;case 6:sm_data=0 xDF;break;模块5 显示和键盘接口技术 case 7:sm_data=0 xBF;break;case 8:sm_data=0 x7F;break;case 9:sm_data=0 xFC;break;c
36、ase 10:sm_data=0 xF9;break;case 11:sm_data=0 xF3;模块5 显示和键盘接口技术 break;case 12:sm_data=0 xE7;break;case 13:sm_data=0 xCF;break;case 14:sm_data=0 x9F;break;case 15:sm_data=0 x3F;break;模块5 显示和键盘接口技术 case 16:sm_data=0 x00;break;default:sm_data=0 xff;break;void delay1(uchar time)while(time-)_nop_();模块5 显示
37、和键盘接口技术5.4 单片机与键盘接口模块5 显示和键盘接口技术5.4.1 按键的去抖1.按键抖动的原理机械式按键在按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,如图5.11所示,然后其触点再稳定下来,抖动时间一般为510 ms。在触点抖动期间监测按键的通与断的状态,可能会导致判断出错。模块5 显示和键盘接口技术2.按键去抖的方法(1)硬件去抖。在键数较少时可用硬件方法消除键抖动。如图5.12所示的RS触发器为常用的硬件去抖。图中两个“与非”门构成一个RS触发器。当按键未按下时,输出为1;当键按下时,输出为0。此时即使用按键的机械性能,使按键因弹性抖动而产生瞬时断开(
38、抖动跳开B),只要按键不返回原始状态A,双稳态电路的状态就不改变,输出保持为0,则不会产生抖动的波形。也就是说,即使B点的电压波形是抖动的,但经双稳态电路之后,其输出为正规的矩形波。模块5 显示和键盘接口技术(2)软件去抖。如果按键较多,常用软件方法去抖,即检测出键闭合后执行一个延时程序,产生510ms的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。当检测到按键释放后,也要给510ms的延时,待后沿抖动消失后才能转入该键的处理程序。5.4.2 独立式按键1.独立式按键介绍如图5.13所示电路为单片机与独立式按键的接口电路,直接用单片机的I/O端口线P3
39、.2P3.5控制按键。每个按键单独占用一根I/O端口线,相互独立,每个按键工作不会影响其他I/O端口线的状态。独立式按键的电路配置灵活,软件结构简单,但每个按键必须占用一根I/O端口线。因此,在按键较多时,I/O端口线浪费较大,不宜采用。模块5 显示和键盘接口技术5.4.3 矩阵式键盘1.矩阵式键盘的结构矩阵式键盘最大的特点是减少了对单片机I/O端口的占用,适用于按键数较多的系统。矩阵式键盘种的按键实际上与独立式键盘种的按键原理相同,都是一个机械开关,只不过在矩阵式键盘种按键位于行线和列线的交汇处。如图5.15所示为矩阵式键盘的结构,由4根行线和4根列线组成,按键位于行、列线的交叉点上,行线和
40、列线分别连接到按键的两端,且行线通过上拉电阻接到+5 V电源上,构成了一个44(16个按键)的矩阵式键盘。通常,矩阵式键盘的列线由单片机输出口控制,行线连接单片机的输入口。模块5 显示和键盘接口技术2.矩阵式键盘按键的识别最常用的矩阵式键盘识别按键方法是编程行列扫描法,这里采用列扫描法。按键的识别可以分为以下两个步骤。(1)判断有无按键按下。向所有的列线上输出低电平,再读入所有的行信号。如果16个按键中任意一个被按下,那么读入的行电平则不全为高;如果16个按键中无按键被按下,则读入的行电平全为高。如图5.15所示。如果S10键被按下,则S10键所在的第2行与第2列导通,第2行被拉低,读入的行信号为低电平,表示有键被按下。(2)判断具体的按键。方法是往列线上逐列送低电平,查询对应行线是否为0,若为0,则对应行列按键被按下。具体做法如下:先送第0列为低电平,第1、2、3列为高电平,读入的行电平的状态就显示了位于第0列的S0、S4、S8、S12 这4个按键的状态,若读入的行值为全高,则表示没有按键被按下;再送第1列为低电平,第0、2、3列为高电平,读入的行电平状态则显示了S1、S5、S9、S13这4个按键的状态,以此类推,直至4列全部扫描完,再重新从第0列开始。模块5 显示和键盘接口技术感感 谢谢模块5 显示和键盘接口技术谢谢,精品课件资料搜集