单片机与键盘接口

合集下载

《单片机应用技术》000-9(周君芝)课件 项目四 显示器与键盘接口技术的应用

《单片机应用技术》000-9(周君芝)课件 项目四  显示器与键盘接口技术的应用
单片机应用技术
(第 2 版)
目录
项目1 项目2 项目3 项目4 项目5 项目6 项目7
C语言基础知识 单片机开发软件及硬件系统的认识
中断系统与定时/计数器的应用 显示器与键盘接口技术的应用
串行接口技术的应用 A/D与D/A转换技术的应用
单片机综合实践
显示器与键盘接口技术 的应用
项目导读
单片机应用系统在运行时需要与外部设备交换 信息,其中显示器与键盘是实现人机交互不可或 缺的设备。
共阳极LED数码管显示器的结构 原理如图所示,由于所有段的阳 极均连接高电平,因此在使用时, 需要在相应段上加低电平,才能 使其发光。
bit 变量名 = 变量值;
4.1.1 LED数码管显示器
如果说我们国家是块闪闪发光的显示器,那么我们 每个人都是属于这块显示器的一个“数码管”,是 这块显示器不可缺少的部分。所谓“天生我材必有 用”,随着国家的蓬勃发展,各行各业都亟须专业 人才。我们作为新时代的青年,应当正视自己,发 挥自己的优势,学成一技之长,为祖国的发展贡献 自己的力量。
4.1.1 LED数码管显示器
2.LED数码管显示器的字形码
LED数码管显示器只要控制LED段的亮与灭即可显示相应的字符。当LED数码管显 示器的连接方式确定时,若要显示某一特定字符,其控制字形是固定不变的。控制字 形控制的是LED数码管显示器上要显示的字符形状,称为字形代码,简称为字形码。
LED数码管显示器八段的各代码位与显示段的对应关系如表所示。
【确定方法】
➢ 在共阴极连接中,要点亮的段为高电平, 不点亮的段为低电平,则各显示段的状态 如表所示。
显示段 dp g f e d c b a 各段状态 0 1 1 1 1 1 0 1

单片机的输入输出设备接口详述

单片机的输入输出设备接口详述

Dispaly(key); } }
} void delay10ms(unsigned char time)
{ unsigned char i; while(time--)
{ for(i=0;i<120;i++) ; } } void Dispaly(unsigned char k) { P0=table[k];
void main() { LABA=0; while(1) { KeyScan(); } } void KeyScan() { P0=0xFF; P0_0=0; temp=P0; temp&=0xF0; if(temp !=0xF0) { buzzer(); delay10ms(20);
temp=P0; key=13;break;
图12-8码拨盘开关
12.1.7 旋转拨码开关 旋转拨码开关常用于示波器手持电台等电子仪器设备
的输入,既具有数字输入的特点,又有电位器模拟操作方 便的优点。通过旋转拨码调节输入,旋转拨码开关是由 装在同一轴上的两个机械开关组成,转动转轴开关通断 可以完成输入,顺逆转动时两个开关的通断顺序不同, 可区分出增加还是减小输入量。旋转拨码开关的原理及 应用见图12-9。
BCD码盘拨盘后面有5个接点,其中A为输入控制线,另外4 根是BCD码输出信号。拨盘拨到不同位置时,输入控制线A分别 与4根BCD码输出线中的某根或几根接通,且拨盘的BCD码输出 线的状态正好是拨盘指示的十进制数码的8421码。
拨码开关可以直接接到口线上,由口线直接读入,但这样 需要较多的输入口线,可以采用动态的输入方法,实现拨码开 关与口线的连接,此方法与动态数码管相似。
temp&=0xF0; if(temp !=0xF0) {

单片机实现PS_2键盘的接口设计及模块化编程

单片机实现PS_2键盘的接口设计及模块化编程

本栏目责任编辑:谢媛媛开发研究与设计技术1PS/2通讯简述PS/2接口有4个有效管脚:电源地、5V、数据和时钟,见图1。

主机提供5V,并且外设的地连接到主机的电源地上。

数据和时钟都是集电极开路的。

PS/2外设履行一种双向同步串行协议。

换句话说,每次数据线上发送一位数据并且每在时钟线上发一个脉冲就被读入。

外设可以发送数据到主机而主机也可以发送数据到外设,但主机总是在总线上有优先权,它可以在任何时候抑制来自于外设的通讯,只要把时钟拉低即可。

2键盘构成及其硬件设计键盘由按键阵列和识键、通讯电路构成。

键盘按键构成的电路原理如图2。

按键设置在行列线交叉点上,行列线分别连接到按键开关的两端。

行线通过上拉电阻接到+5V上。

平时无按键动作时,行线处于高电平状态,当有按键按下时,行线电平状态将由与此行线相连的列线电平决定。

如果列线为低电平,则行线为低电平;如果列线为高电平,则行线也为高电平。

这是识别矩阵键盘按键是否被按下的关键。

图2键盘按键构成的电路原理本设计以AT89C52为例,对键盘按键阵列的扫描以及与PC机的通讯电路进行设计,见图3。

其中KEY_CLK和KEY_DAT对应PS/2接口的时钟线和数据线,负责键盘与PC机之间的通讯对话。

3模块化编程设计键盘程序需要按PS/2协议要求跟主机PS/2接口进行正常的通讯,同时对键盘按键进行扫描及去抖,并向主机发送按键相应的扫描码(包括通码和断码)。

其模块流程如图4。

3.1PS/2协议接口通讯模块主机和外设通过PS/2接口进行双向通讯。

从外设发送到主机的数据在时钟信号的下降沿(当时钟从高变到低的时候)被读取;从主机发送到外设的数据在上升沿(当时钟从低变到高的时候)被读取。

不管通讯的方向怎样,外设总是产生时钟信号。

图3键盘控制电路图3.1.1设备到主机的通讯过程当键盘想要发送数据时它首先检查时钟以确认它是否是高电平;如果不是,那么是主机抑制了通讯,设备必须缓冲任何要发送的数据,直到重新获得总线的控制权(键盘有16字节的缓冲区)。

1-单片机键盘与显示电路设计

1-单片机键盘与显示电路设计

独立式按键 单片机控制系统中,往往只需要几个 功能键,此时,可采用独立式按键结构。 1.独立式按键结构 独立式按键是直接用I/O口线构成的单 个按键电路,其特点是每个按键单独占 用一根I/O口线,每个按键的工作不会影 响其它I/O口线的状态。独立式按键的典 型应用如图9-3所示。
V CC
P 1.0 P 1.1 P 1.2 P 1.3 P 1.4 P 1.5 P 1.6 P 1.7
P1口某位结构

P1口电路中包含有一个数据输出锁存器、一个三态数据输入缓冲器 、一个数据输出的驱动电路。 P1口的功能和驱动能力

P1口只可以作为通用的I/O口使用;
P1可以驱动4个标准的TTL负载电路; 注意在P1口作为通用的I/O口使用时,在从I/O端口读入数据时,应 该首先向相应的I/O口内部锁存器写“1”。 举例:从P1口的低四位输入数据 MOV MOV P1,#00001111b ;;先给P1口底四位写1 A,P1 ;;再读P1口的底四位
依此规律循环,即可使各位数码管显 示将要显示的字符。虽然这些字符是在不 同的时刻分别显示,但由于人眼存在视觉 暂留效应,只要每位显示间隔足够短就可 以给人以同时显示的感觉。 采用动态显示方式比较节省I/O口,硬 件电路也较静态显示方式简单,但其亮度 不如静态显示方式,而且在显示位数较多 时,CPU要依次扫描,占用CPU较多的时 间。
矩阵式按键 单片机系统中,若使用按键较多时,通 常采用矩阵式(也称行列式)键盘 1.矩阵式键盘的结构及原理 矩阵式键盘由行线和列线组成,按键位 于行、列线的交叉点上,其结构如下图9-4 所示。
+5 V 0 4 8 12 0 1 5 9 13 1 2 6 10 14 2 3 7 11 15 3 0 1 2 3

单片机原理及接口技术单片机的开关检测键盘输入与显示的接口设计

单片机原理及接口技术单片机的开关检测键盘输入与显示的接口设计

单片机原理及接口技术单片机的开关检测键盘输入与显示的接口设计单片机是一种集成了中央处理器、存储器和输入/输出接口的微型电子计算机,其核心是一个集成电路芯片。

它简单、灵活,用于控制电子设备和执行各种任务。

单片机有很多种,其中C51单片机是一种非常常用的型号。

在C51编程中,开关检测、键盘输入和显示是非常常见的接口设计。

接下来,将分别介绍它们的原理和实现方法。

1.开关检测:开关检测是指通过单片机检测开关的状态,以实现对开关的控制。

常见的开关检测方法有两种,一种是使用外部电阻和开关,通过检测电流或电压来判断开关状态;另一种是使用内部电阻和开关,通过检测电阻的值来判断开关状态。

具体实现方法如下:a.外部电阻和开关:检测开关状态的方法是连接一个电阻到开关,并将另一端连接到单片机的输入引脚。

当开关打开时,电阻与单片机输入引脚之间形成一条路径,使得输入引脚接收到高电平信号;当开关关闭时,电阻与单片机输入引脚之间断开,使得输入引脚接收到低电平信号。

b.内部电阻和开关:单片机的引脚通常具有内部上拉或下拉电阻。

当引脚配置为输入模式时,可以选择使能内部上拉或下拉电阻。

通过连接一个开关到引脚,并将另一端连接到电源或地,从而完成开关状态的检测。

当开关打开时,引脚被拉高,输入引脚接收到高电平信号;当开关关闭时,引脚被拉低,输入引脚接收到低电平信号。

2.键盘输入:键盘输入是指通过单片机接收和处理来自键盘的输入信息。

键盘通常是一种矩阵按键结构,可以通过多行多列的方式进行编码。

键盘输入的实现需要通过接口电路将键盘连接到单片机,并在程序中编写相应的扫描算法。

具体实现方法如下:a.键盘连接方式:键盘的行和列线分别连接到单片机的输出和输入引脚上。

行线和列线可以使用独立的引脚,也可以使用矩阵开关编码的方式进行连接。

b.扫描算法:扫描算法是通过逐行扫描和逐列检测的方式来实现键盘输入的。

具体步骤如下:1)将所有行引脚置为高电平,所有列引脚配置为输入模式。

单片机 键盘接口实验

单片机 键盘接口实验

实验六键盘接口实验一、实验目的1、掌握Keil C51软件与Protues软件联合仿真调试的方法;2、掌握单片机的键盘接口电路;3、掌握单片机的键盘扫描原理;4、掌握键盘的去抖原理及处理方法。

二、实验仪器与设备1、微机一台2、Keil C51集成开发环境3、Protues仿真软件三、实验内容1、用Protues设计一矩阵键盘接口电路。

要求利用P1口接一4×4矩阵键盘。

串行口通过一74LS164接一共阴极数码管。

用线反转法编写矩阵键盘识别程序,用中断方式,并将按键的键值0-F通过串行口输出,显示在数码管上。

2、将P1口矩阵键盘改成8个独立按键,重新编写识别和显示程序。

四、实验说明矩阵键盘识别一般包括以下内容:⑴判别有无键按下。

⑵键盘扫描取得闭合键的行、列号。

⑶用计算法或查表发的到键值;⑷判断闭合键是否释放,如没释放则继续等待。

⑸将闭合键的键值保存,同时转去执行该闭合键的功能。

五、实验步骤1、用Protues设计键盘接口电路;2、在Keil C51中编写键盘识别程序,编译通过后,与Protues联合调试;3、按动任意键,观察键值是否能正确显示。

六、实验电路仿真图矩阵键盘电路图见附录1。

独立按键电路图见附录2。

七、实验程序实验程序见附录3、4。

八、实验总结1、矩阵键盘常用的检测方法有线反转法、逐行扫描法。

线反转法较简单且高效。

在矩阵键盘的列线上接一与门,利用中断方式查询按键,可提高CPU的运行效率。

2、注意用线反转法扫描按键时,得到的键值不要再赋给temp,最好再设一新变量接收键值,否则再按下按键显示数字的过程中,再按按键会出现乱码。

3、学会常用与门、与非门的使用方法。

附录1:矩阵键盘实验电路图附录2:独立按键实验电路图附录3:矩阵键盘实验程序#include <REG51.H>char code LED_TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};char code KEY_TABLE[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};char code tab1[10]={0xfe,0xde,0x9e,0x9a,0x92,0x82,0x82,0x80,0xff};char temp,num,i,m;int t;bit flag=0;void Delay_ms(t){int i;for(;t>0;t--)for(i=0;i<124;i++);}void main(void){TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;ET0=1; PT0=1; SCON=0;EX0=1; IT0=1; EA=1;P1=0xf0;while(1){SBUF=tab1[m];while(TI==0); TI=0;Delay_ms(400); //500msm++;if(m==9) m=0;}}void int_1() interrupt 0{P1=0xf0;if(P1!=0xf0){Delay_ms(10);if(P1!=0xf0){temp=P1;P1=0x0f;temp=temp|P1;for(i=0;i<16;i++){if(temp==KEY_TABLE[i]){temp=i; break;}}SBUF=LED_TAB[temp];while(TI==0); TI=0; TR0=1;while(flag==0); flag=0;} } P1=0xf0;}void timer_0() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;t++;if(t==300){t=0; flag=1; TR0=0;}}附录4:独立按键实验#include <REG51.H>char code LED_TAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};char code KEY_TABLE2[]={ 0xfe,0xfd,0xfb,0x f7, 0xef,0xdf,0xbf,0x7f,} ;char code tab1[10]={0xfe,0xde,0x9e,0x9a,0x 92, 0x82,0x82,0x80,0xff};char temp,i,m;int t;bit ff;bit flag=0;void Delay_ms(t){int i;for(;t>0;t--)for(i=0;i<124;i++);}void main(void){TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;ET0=1; SCON=0; EX0=1;IT0=1; PT0=1; EA=1;P1=0xff;while(1){ff=IE0;SBUF=tab1[m];while(TI==0); TI=0;Delay_ms(400);m++;if(m==9) m=0;}}void timer_0() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;t++;ff=IE0;if(t==300){t=0;flag=1;}}void int_0() interrupt 0{EX0=0;Delay_ms(10);temp=P1;if(temp!=0xff){for(i=0;i<8;i++){if(temp==KEY_TABLE2[i]){temp=i; break;}}SBUF=LED_TAB[temp];while(TI==0); TI=0;TR0=1; while(flag==0);flag=0; TR0=0;P1=0xff; EX0=1;}}。

4.3 单片机键盘接口电路设计

4.3 单片机键盘接口电路设计
}
//函数功能:键盘扫描 //检测到有键按下 //延时10ms再去检测 //按键k1被按下 //按键k2被按下 //按键k3被按下 //按键k4被按下
▲▲▲
独立式键盘接口设计案例
void forward(void) { P3=0xfe; led_delay(); P3=0xfd; led_delay(); P3=0xfb; led_delay(); P3=0xf7; led_delay(); P3=0xef; led_delay(); P3=0xdf; led_delay(); P3=0xbf; led_delay(); P3=0x7f; led_delay(); }
break;
}
}
}
▲▲▲
独立式键盘接口设计案例
void key_scan(void) { P1=0xff; if((P1&0x0f )!=0x0f ) { delay10ms(); if(S1==0) keyval=1; if(S2==0) keyval=2; if(S3==0) keyval=3; if(S4==0) keyval=4; }
//处理按下的k1键,“……”为处理程序 //跳出switch语句 //处理按下的k2键 //跳出switch语句 //处理按下的k3键 //跳出switch语句 //处理按下的k4键 //跳出switch语句 //处理按下的k5键 //跳出switch语句
独立式键盘接口设计案例
1.独立式键盘的查询工作方式
{
case 1:forward(); //键值为1,调用正向流水点亮函数
break;
case 2:backward(); //键值为2,调用反向流水点亮函数
break;
case 3:Alter(); //键值为3,调用高、低4位交替点亮函数

单片机指令的硬件接口与外设控制

单片机指令的硬件接口与外设控制

单片机指令的硬件接口与外设控制在现代电子技术领域中,单片机(Microcontroller)已经成为不可或缺的一部分。

它通过内部集成的控制器、存储器和输入/输出(I/O)设备,能够满足各种应用需求。

而其中最为重要的一部分就是单片机的指令集,通过指令的执行,单片机可以与外部硬件设备进行有效的交互和控制。

一、单片机硬件接口单片机通过具备不同数目和类型的引脚来实现与外设的硬件接口。

这些引脚包括供电脚、地脚和I/O口等。

供电脚提供电源给单片机及其外设,地脚用于接地,而I/O口用于与外设进行数据传输和控制。

1. I/O口单片机的I/O口通过读写特定的寄存器来实现对引脚的控制。

通过设定寄存器中的位的状态,单片机可以将引脚设置为输入模式或输出模式,并可对输入的信号进行读取或输出指定的信号。

这样,单片机就能与各种不同类型的外设进行数据交互。

2. 串行口串行口是单片机与计算机或其他外部设备进行数据通信的重要接口。

常见的串行接口包括UART、SPI和I2C等。

通过串行口,单片机可以通过一根线来进行数据的发送和接收,从而实现与其他设备的数据通信。

3. 定时器/计数器定时器/计数器是单片机中用于测量时间和计数的重要模块,通常包括一个计数器和一个预分频器。

计数器可以通过计算时钟脉冲的数量来测量时间,而预分频器用于分频时钟信号以得到不同的计数频率。

通过定时器/计数器,单片机可以对外设进行精确的时间控制。

二、外设控制单片机可以通过硬件接口与各种不同类型的外设进行控制,包括LED、LCD、键盘、电机、传感器等。

不同的外设有着不同的控制方式和接口。

1. LED控制LED是一种常见的输出设备,广泛应用于显示和指示任务。

通过单片机的I/O口,可以直接控制LED的亮灭状态。

通过设置I/O口的输出位,单片机可以将高电平或低电平信号传送到LED引脚,从而控制LED的亮度或闪烁状态。

2. LCD控制LCD(Liquid Crystal Display)是一种常见的显示设备,广泛应用于各种电子产品中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机与键盘接口键盘是由一组规则排列的按键组成,一个按键实际上是一个开关元件,也就是说键盘是一组规则排列的开关。

键盘工作原理1.按键的分类按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点开关按键,如电气式按键,磁感应按键等。

前者造价低,后者寿命长。

目前,微机系统中最常见的是触点式开关按键。

按键按照接口原理可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。

编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的定义与识别。

全编码键盘能够由硬件逻辑自动提供与键对应的编码,此外,一般还具有去抖动和多键、窜键保护电路,这种键盘使用方便,但需要较多的硬件,价格较贵,一般的单片机应用系统较少采用。

非编码键盘只简单地提供行和列的矩阵,其它工作均由软件完成。

由于其经济实用,较多地应用于单片机系统中。

下面将重点介绍非编码键盘接口。

2.键输入原理在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。

当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入是与软件结构密切相关的过程。

对于一组键或一个键盘,总有一个接口电路与CPU相连。

CPU可以采用查询或中断方式了解有无将键输入并检查是哪一个键按下,将该键号送入累加器A CC,然后通过跳转指令转入执行该键的功能程序,执行完后再返回主程序。

3.按键结构与特点微机键盘通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。

也就是说,它能提供标准的TTL逻辑电平,以便与通用数字系统的逻辑电平相容。

机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。

其抖动过程如图7.2所示,抖动时间的长短与开关的机械特性有关,一般为5 10ms。

左图按键触点的机械抖动在触点抖动期间检测按键的通与断状态,可能导致判断出错。

即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。

为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施,可从硬件、软件两方面予以考虑。

在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。

在硬件上可采用在键输出端加R-S触发器(双稳态触发器)或单稳态触发器构成去抖动电路,图7.3是一种由R-S触发器构成的去抖动电路,当触发器一旦翻转,触点抖动不会对其产生任何影响。

电路工作过程如下:按键未按下时,a = 0,b = 1,输出Q = 1,按键按下时,因按键的机械弹性作用的影响,使按键产生抖动,当开关没有稳定到达b端时,因与非门2输出为0反馈到与非门1的输入端,封锁了与非门1,双稳态电路的状态不会改变,输出保持为1,输出Q不会产生抖动的波形。

当开关稳定到达b端时,因a = 1,b = 0,使Q = 0,双稳态电路状态发生翻转。

当释放按键时,在开关未稳定到达a端时,因Q = 0,封锁了与非门2,双稳态电路的状态不变,输出Q保持不变,消除了后沿的抖动波形。

当开关稳定到达b端时,因a = 0,b = 0,使Q = 1,双稳态电路状态发生翻转,输出Q重新返回原状态。

由此右图双稳态去抖电路可见,键盘输出经双稳态电路之后,输出已变为规范的矩形方波。

软件上采取的措施是:在检测到有按键按下时,执行一个10ms左右(具体时间应视所使用的按键进行调整)的延时程序后,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电平,则确认该键处于闭合状态;同理,在检测到该键释放后,也应采用相同的步骤进行确认,从而可消除抖动的影响。

4.按键编码一组按键或键盘都要通过I/O口线查询按键的开关状态。

根据键盘结构的不同,采用不同的编码。

无论有无编码,以及采用什么编码,最后都要转换成为与累加器中数值相对应的键值,以实现按键功能程序的跳转。

5.编制键盘程序一个完善的键盘控制程序应具备以下功能:(1)检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。

(2)有可靠的逻辑处理办法。

每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。

(3)准确输出按键值(或键号),以满足跳转指令要求。

独立式按键单片机控制系统中,往往只需要几个功能键,此时,可采用独立式按键结构。

1.独立式按键结构独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O左图独立式按键电路口线,每个按键的工作不会影响其它I/O口线的状态。

独立式按键的典型应用如图7.4所示。

独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。

图7.4中按键输入均采用低电平有效,此外,上拉电阻保证了按键断开时,I/O口线有确定的高电平。

当I/O口线内部有上拉电阻时,外电路可不接上拉电阻。

2.独立式按键的软件结构独立式按键软件常采用查询式结构。

先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。

图7.4中的I/O口采用P1口,请读者自行编制相应的软件。

7.1.3 矩阵式按键单片机系统中,若使按键较多时,通常采用矩阵式(也称行列式)键盘。

1.矩阵式键盘的结构及原理矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上,其结构如下图所示。

由图可知,一个4×4的行、列结构可以构成一个含有16个按键的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。

矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V上。

当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。

这是识别按键是否按下的关键。

然而,矩阵键盘中的行线、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。

2.矩阵式键盘按键的识别识别按键的方法很多,其中,最常见的方法是扫描法。

下面以图7.5中8号键的识别为例来说明扫描法识别按键的过程。

按键按下时,与此键相连的行线与列线导通,行线在无键按下时处在高电平,显然,如果让所有的列线也处在高电平,那么,按键按下与否不会引起行线电平的变化,因此,必须使所有列线处在低电平,只有这样,当有键按下时,该键所在的行电平才会由高电平变为低电平。

CPU根据行电平的变化,便能判定相应的行有键按下。

8号键按下时,第2行一定为低电平,然而,第2行为低电平时,能否肯定是8号键按下呢?回答是否定的,因为9、10、11号键按下同样使第2行为低电平。

为进一步确定具体键,不能使所有列线在同一时刻都处在低电平,可在某一时刻只让一条列线处于低电平,其余列线均处于高电平,另一时刻,让下一列处在低电平,依此循环,这种依次轮流每次选通一列的工作方式称为键盘扫描。

采用键盘扫描后,再来观察8号键按下时的工作过程,当第0列处于低电平时,第2行处于低电平,而第1、2、3列处于低电平时,第2行却处在高电平,由此可判定按下的键应是第2行与第0列的交叉点,即8号键。

3.键盘的编码对于独立式按键键盘,因按键数量少,可根据实际需要灵活编码。

对于矩阵式键盘,按键的位置由行号和列号唯一确定,因此可分别对行号和列号进行二进制编码,然后将两值合成一个字节,高4位是行号,低4位是列号。

如图7.5中的8号键,它位于第2行,第0列,因此,其键盘编码应为20H。

采用上述编码对于不同行的键离散性较大,不利于散转指令对按键进行处理。

因此,可采用依次排列键号的方式对安排进行编码。

以图7.5中的4×4键盘为例,可将键号编码为:01H、02H、03H…0EH、0FH、10H等16个键号。

编码相互转换可通过计算或查表的方法实现。

4.键盘的工作方式在单片机应用系统中,键盘扫描只是CPU的工作内容之一。

CPU对键盘的响应取决于键盘的工作方式,键盘的工作方式应根据实际应用系统中CPU的工作状况而定,其选取的原则是既要保证CPU能及时响应按键操作,又不要过多占用CPU的工作时间。

通常,键盘的工作方式有三种,即编程扫描、定时扫描和中断扫描。

1)编程扫描方式编程扫描方式是利用CPU完成其它工作的空余调用键盘扫描子程序来响应键盘输入的要求。

在执行键功能程序时,CPU不再响应键输入要求,直到CPU 重新扫描键盘为止。

键盘扫描程序一般应包括以下内容:(1)判别有无键按下。

(2)键盘扫描取得闭合键的行、列值。

(3)用计算法或查表法得到键值。

(4)判断闭合键是否释放,如没释放则继续等待。

(5)将闭合键键号保存,同时转去执行该闭合键的功能。

图7.6 8155扩展I/O口组成的矩阵键盘图7.6是一个4×8矩阵键盘电路,由图可知,其与单片机的接口采用8155扩展I/O芯片,键盘采用编程扫描方式工作,8155C口的低4位输入行扫描信号,A口输出8位列扫描信号,二者均为低电平有效。

8155的IO/与P2.0相连,与P2.1相连,、分别与单片机的、相连。

由此可确定8155的口地址为:命令/状态口:0100H(P2未用口线规定为0)A口:0101HB口:0102HC口:0103H图7.6中,A口为基本输出口,C口为基本输入口,因此,方式命令控制字应设置为43H。

在编程扫描方式下,键盘扫描子程序应完成如下几个功能:(1)判断有无键按下。

其方法为:A口输出全为0,读C口状态,若PC0 PC3全为1,则说明无键按下;若不全为1,则说明有键按下。

(2)消除按键抖动的影响。

其方法为:在判断有键按下后,用软件延时的方法延时10ms后,再判断键盘状态,如果仍为有键按下状态,则认为有一个按键按下,否则当作按键抖动来处理。

(3)求按键位置。

根据前述键盘扫描法,进行逐列置0扫描。

图7.6中,3 2个键的键值分布如下(键值由4位16进制数码组成,前两位是列的值,即A 口数据,后两位是行的值,即C口数据,X为任意值):FEXE FDXE FBXE F7XE EFXE DFXE BFXE 7FXEFEXD FDXD FBXD F7XD EFXD DFXD BFXD 7FXDFEXB FDXB FBXB F7XB EFXB DFXB BFXB 7FXBFEX7 FDX7 FBX7 F7X7 EFX7 DFX7 BFX7 7FX7按键键值确定后,即可确定按键位置。

相应的键号可根据下述公式进行计算:键号=行首键号+列号。

相关文档
最新文档