第8章+单片机与键盘接口设计
单片机实现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字节的缓冲区)。
单片机原理及接口技术单片机的开关检测键盘输入与显示的接口设计

单片机原理及接口技术单片机的开关检测键盘输入与显示的接口设计单片机是一种集成了中央处理器、存储器和输入/输出接口的微型电子计算机,其核心是一个集成电路芯片。
它简单、灵活,用于控制电子设备和执行各种任务。
单片机有很多种,其中C51单片机是一种非常常用的型号。
在C51编程中,开关检测、键盘输入和显示是非常常见的接口设计。
接下来,将分别介绍它们的原理和实现方法。
1.开关检测:开关检测是指通过单片机检测开关的状态,以实现对开关的控制。
常见的开关检测方法有两种,一种是使用外部电阻和开关,通过检测电流或电压来判断开关状态;另一种是使用内部电阻和开关,通过检测电阻的值来判断开关状态。
具体实现方法如下:a.外部电阻和开关:检测开关状态的方法是连接一个电阻到开关,并将另一端连接到单片机的输入引脚。
当开关打开时,电阻与单片机输入引脚之间形成一条路径,使得输入引脚接收到高电平信号;当开关关闭时,电阻与单片机输入引脚之间断开,使得输入引脚接收到低电平信号。
b.内部电阻和开关:单片机的引脚通常具有内部上拉或下拉电阻。
当引脚配置为输入模式时,可以选择使能内部上拉或下拉电阻。
通过连接一个开关到引脚,并将另一端连接到电源或地,从而完成开关状态的检测。
当开关打开时,引脚被拉高,输入引脚接收到高电平信号;当开关关闭时,引脚被拉低,输入引脚接收到低电平信号。
2.键盘输入:键盘输入是指通过单片机接收和处理来自键盘的输入信息。
键盘通常是一种矩阵按键结构,可以通过多行多列的方式进行编码。
键盘输入的实现需要通过接口电路将键盘连接到单片机,并在程序中编写相应的扫描算法。
具体实现方法如下:a.键盘连接方式:键盘的行和列线分别连接到单片机的输出和输入引脚上。
行线和列线可以使用独立的引脚,也可以使用矩阵开关编码的方式进行连接。
b.扫描算法:扫描算法是通过逐行扫描和逐列检测的方式来实现键盘输入的。
具体步骤如下:1)将所有行引脚置为高电平,所有列引脚配置为输入模式。
单片机矩阵键盘接口设计

在单片机 应用系 统中通 常都要 有 人 —机 对话功能 。人—机 对话的 中间桥梁 是键盘 , 盘就 是一组按 键 的集 合 , 人 员可 以通过 键盘 输 键 操作 入数 据或 命令 , 现简单 的人机 通讯 。键 盘分 编码键 盘和非 编码键 盘 , 实 键盘上闭合键的识别由专用的硬件译码器实现并产生编号或键值的称 为编码 键 盘 , : S 码键 盘 、C 如 A CⅡ B D码键 盘 等 ; 靠软 r识 别的称 为非 编 牛 码键盘 。 本文侧 重讨论键 盘接 口处 理的 内容 、 三种控制方 式和— 个典 型 矩阵键 盘接 口程 序设计 。 1键 盘接 口处理 的内容 1 . 键扫描 1按 键盘 大都采 用按 行 、 列的矩 阵开 关结 构, 结构 可 以减少硬 列排 这种 件 和连线 。常 用按键 扫描识 别方 法有 行扫描 法 ( r cnig ̄ R - ann) S
0班 {
1畦 0 0HLeabharlann 1H 1 0 衄
1H 2
0I E' I
l 疆
H
lH 唾
0H D
1} 5I
娅H
1H 6
oH F
1l l 7
湃誊 薷丽
图 1
1 朗
1H 9
1H A
1H B
1H C
IH D
1H E
1H F
表 1
R1 R2 R3
向下的顺序编排的, 这样安排, 使键码可以根据行号列号 以查表求得 ,
也可 以通过计算得 到 。 按下表 所示 的键 码编排规律 , 行的首号依 次是 各 OH、8 IH、8 如列 号按 O O 0H、O 1H, 一 _ 顺 序 , 键码 的计 算公 式 为 : 7 则 键 码=亍 彳首号+ 列号 4键释放 计算 键码之后 , 以延时后进 行 扫描 的方法等待 释放 。 再 等待键 释放 是为 了保证键 的一 次闭合 仅进 行一次 处理 。 2键盘 工作 方式 键盘接 口。 一般采 用行列 式键盘 主 要有 编程 扫描 ' 定时扫 描和 中断 扫描方 式有三种 : 21编程 扫描方 式: C U空 闲时’ 键盘判 断有无 键按 下. 般 当 P 扫描 一 应具备 以下几个功 能 :1判断键 盘上有无键 按下 。() () 2去除键 抖动 的影 响。( ) 描键盘 。() 3扫 4别闭合 的键是 否十放 。
微机原理与接口技术课件全 (9)

(2)键的识别 通常有两种方法可识别被按之键:一种是“行扫描”法; 一种是“反转”法。 1)行扫描法 依次对每一行进行扫描,选使被扫描的行为低电平,其它 所有的行均为高电平,接着检测各列线的状态(称为“列”)。 若各列码均为高电平(即列码为全1),则被按之键不在这行。 继续扫描下一行;若列线不全为高电平(即列码为非全1),则 被按之在此行。根据行扫描码及列码就可知被按之键的坐标值 (即位置码)。再根据位置码通过查表可得到它的键值。查表 法的扫描子程序流程图如图7-6所示。
四、输入/输出寻址方式
当主机执行I/O操作时,应先对I/O接口中的端口进行寻址, 其寻址方式有如下两种: 此时,I/O端口单独编址。CPU指令系统中有专门用于I/O操 作的指令——I/O指令,CPU访问I/O端口时发出I/O读命令或写 命令,访问内存时发存储器读或写命令。因此,端口地址与存 储单元地址可重叠。此时,I/O端口不占用存储空间且与访问 I/O设备指令有别。 这种寻址方式中,将I/O端口与存储单元统一编址,即CPU 把I/O端口作为存储单元对待,I/O端口占用一定的存储空间。 采用这种寻址方式的CPU指令系统中没有专门的I/O指令,
微型机中常外设有LED显示器、CRT显示器、键盘、打印机、软 磁盘存储器等。单片机应用系统中常设置LED显示器、拔盘、键 盘、点阵式打印机等外设。
§8-2 键盘及其接口
返回
在微型机系统中,键盘是最常用的输入设备,键盘通常由 数字键和功能键组成,其规模取决于系统的要求。
键盘可分为编码键盘和非编码键盘两种,前者有检测键闭 合,去抖动及产生相应键编码的硬件电路,而后者则没有这些 硬件,上述功能在有少量的硬件支持下由软件来完成。由此可 见编码键盘产生键编码的速度快且基本上不占用CPU时间,但硬 件开销大,电路复杂,成本高;非编码键盘则硬件开销省,电 路简单,成本低,但占用CPU时间较长。
第8章作业-单片机原理与应用及C51程序设计(第4版)-谢维成-清华大学出版社

;查表取得段选码
3
MOV P0,A
;字段码从 P0 口输出
ACALL DL1
;调用 1ms 延时子程序
DEC R0
;指向缓冲区下一单元
MOV A,R3
;位选码送累加器 A
JNB ACC.0,LD1 ;判断 8 位是否显示完毕,显示完返回
RR A
;未显示完,把位选字变为下一位选字
MOV R3,A
;修改后的位选字送 R3
LOOP: MOV @R0,A
INC R0
INC A
DJNZ R2,LOOP
MOV TMOD , #10H
MOV TH1 , #(65536-20000)/256
MOV TL1 , #(65536-20000)%256
SETB EA
SETB ET1
SETB TR1
LOOP1作于方式 1 实现 20ms 周期性定时,20ms 定时到调用显示函数一 遍,定时器方式控制字为 10H,系统时钟为 12MHz,初值为:65536-20000
;设 8 个数码管的从左到右显示缓冲区为片内 RAM 的 50H~57H 单元)
ORG 0000H LJMP MAIN
2
工作过程可分为两步:第一步是 CPU 首先检测键盘上是否有键按下;第二步是识别哪 一个键按下。
(1) 检测键盘上是否有键按下的处理方法是:将列线送入全扫描字,读入行线的状态 来判别。
(2) 识别键盘中哪一个键按下的处理方法是:将列线逐列置成低电平,检查行输入状 态,称为逐列扫描。
10. 对于数码管动态显示,在很多实际的单片机应用系统中,为了实现较好的显示效 果,通常是把动态显示过程用定时扫描方式来实现,处理思想如下:用定时器实现 20ms 周 期性定时,定时时间到动态显示一遍。参照书上图 8.9 的电路和内容,把数码管显示改成 定时扫描方式,用汇编语言编写相应程序。
单片机原理及其接口技术--第8章 MCS-51单片机系统接口技术

第二步是再识别是哪一个键按下。
键盘中哪一个键按下是由列线逐列置低电平后,检查行输 入状态,称为逐列扫描。其方法是:从列口第0位开始,依次输出
“0”,置对应的列线为低电平,然后读入行线状态,如果全为"1", 则所按下之键不在此列;如果不全为"1",则所按下的键必在此列, 而且是与0电平行线相交的交点上的那个键。
除抖动、排除多次执行键功能操作等功
能,可参考查询工作方式键盘程序。
主目录 上一页 下一页 结 束
单片机原理及其接口技术
8.1.4 键盘接口应用实例 例8.1 独立式键盘接口应用实例:电路原 理图如图所示,要求编程实现当按下任一键时,
数码管显示对应的键值。
主目录
上一页
下一页
结
束
单片机原理及其接口技术
的办法计算。
主目录
上一页
下一页
结
束
单片机原理及其接口技术 2) 定时扫描工作方式
开 始
定时扫描方式程序框图
键盘上有键闭合否
Y N KM=1 0 → KM 0 → KP Y N
Y 1 → KM
KP=1 N 查询键码 1 → KP
做两次查询,都有 键后进行键码计算。 主目录 上一页
返 回
下一页
结
束
3) 中断工作方式 单片机原理及其接口技术
1.独立式按键 2.行列式键盘
主目录
上一页
下一页
结
束
1. 独立式按键 单片机原理及其接口技术
(1).独立式按键接口结 构 一般用排阻进行上拉。
独立式按键的接口电路示意图 主目录 下一页 (b) 查询方式 结 束 (a) 中断方式 上一页
2.独立式按键的软件结构 单片机原理及其接口技术 下面是查询方式的键盘程序。 K0~K7为功能程序入口地址标号 PROM0~PROM7分别为每个按键的功能程序
单片机原理及接口技术(C51编程)单片机的开关检测、键盘输入 与显示的接口设计

5.2.1 开关检测案例1
图5-3 开关、LED发光二极管与P1口的连接
5.2.1 开关检测案例1
参考程序如下: #include <reg51.h> #define uchar unsigned char void delay( ) {
uchar i,j; for(i=0; i<255; i++) for(j=0; j<255; j++); }
5.1.2 I/O端口的编程举例
03 用循环左、右移位函数实现
OPTION
使用C51提供的库函数,即循环左移n位函数和循环右
移n位函数,控制发光二极管点亮。参考程序:
#include <reg51.h> #include <intrins.h> 函数的头文件 #define uchar unsigned char void delay( ) {
5.1.2 I/O端口的编程举例
#include <reg51.h> #define uchar unsigned char uchar tab[ ]={ 0xfe , 0xfd , 0xfb , 0xf7 , 0xef , 0xdf , 0xbf , 0x7f , 0x7f , 0xbf , 0xdf , 0xef , 0xf7 , 0xfb , 0xfd , 0xfe }; /*前8个数据为左移点亮 数据,后8个为右移点亮数据*/ void delay( ) {
// P1口为输入 // 读入P1口的状态,送入state // 屏蔽P1口的高6位
5.2.2 开关检测案例2
switch (state) {
// 判P1口低2位开关状态
8 键盘接口技术

按键输入原理
在单片机应用系统中,除了复位按键有专门的复位电路及专一的 复位功能外,其他按键都是以开关状态来设置控制功能或输入数据。 当所设置的功能键或数字键按下时,单片机系统应完成该按键所设定
的功能,按键信息输入是与软件结构密切相关的过程。
对于一个键盘或一组按键,单片机系统中总有一个接口电路与 CPU相连。CPU可以采用查询或中断方式了解有无按键输入并检查是 哪一个键按下,将该键号送入累加器ACC,然后通过跳转指令转入执 行该键的功能程序,执行完后再返回主程序。
• 矩阵键盘的接口实例
• 实践与思考
矩阵式键盘的结构与工作原理
矩阵式键盘中,行、列线分别连接到 按键开关的两端,行线通过上拉电阻接到 +5V上。当无键按下时,行线处于高电平状 态;当有键按下时,行、列线将导通,此 时,行线电平将由与此行线相连的列线电 平决定。这一点是识别矩阵按键是否被按
下的关键。然而,矩阵键盘中的行线、列
这种电路每个按键需要
占用一根I/O线,在按
键数量较多时,输入口 浪费大且电路结构很烦
琐,因此这种键盘接口
电路只适用于按键较少 或要求较高操作速度的
场合。
简单键盘的接口电路与编程
下面以图 (a)为例进行编程。 (1)程序实现的功能 (2)程序采用的方法
(3)程序中用到的变量和常量的定义
(4)程序中调用的子程序 (5)程序清单 (6)程序分析与思考
第2章 键盘接口技术
1. 按键
2. 简单键盘接口
3. 矩阵式键盘接口 4. 可编程键盘接口
按键
键盘由一组规则排列的按键组成,一个按键实际上是一个开关元件, 也就是说键盘是一组规则排列的开关。单片机使用的按键是一种常开型 的开关,平时按键的两个触点处于断开状态,按下键时它们才闭合。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8.2.1 独立式键盘接口设计
因此,只需读入I/O口线状态,判别是否为低电平,就 很容易识别出哪个键被按下。可见独立式键盘优点是电路简 单,各条检测线独立,识别按键号的软件编写简单。
缺点:独立式键盘适于按键数目较少场合,如按键数目 较多,要占用较多I/O口线。
8.2.2 独立式键盘接口设计案例
图8-4 独立式键盘的接口电路
8.2.2 独立式键盘接口设计案例
1.独立式键盘的查询工作方式
(2)按键去抖动。当判别有键按下时,调用软件延时子 程序,延时约10ms后再进行判别,若按键确实按下,则执 行相应的按键功能,否则重新开始进行扫描。
(3)获得键值。确认有键按下时,可采用扫描方法,来 判哪个键按下,并获取键值。
8.2.2 独立式键盘接口设计案例
【例8-4】设计一采用中断扫描方式独立式键盘,只有 在键盘有按键按下时,才进行处理,接口电路见图8-8。当 键盘中有键按下时,8输入与非门84LS30输出经过84LS04 反相后向单片机外中断请求输入引脚INT0*发出低电平中断 请求信号,单片机响应中断,进入外部中断的中断函数,在 中断函数中,判断按键是否真按下。如确实按下,则把标志 keyflag置1,并得到按下按键键值,然后从中断返回,根据 键值跳向该键的处理程序。
unsigned char keyval; //定义键值储存变量单元
void main(void)//主函数
{ keyval=0;
//键值初始化为0
while(1)
8.2.2 独立式键盘接口设计案例
{
key_scan();
//调用键盘扫描函数
switch(keyval)
{
case 1:forward(); //键值为1,调用正向流水点亮函数
// P1口为输入
keyval=P1;
//从P1口读入键盘状态
keyval=~ keyval; //键盘状态求反
8.2.2 独立式键盘接口设计案例
1.独立式键盘的查询工作方式
switch(keyval) { case 1: ……; break; case 2: ……; break; case 4: ……; break; case 8: ……; break; case 16: ……; break;
P3=0xfd;
//LED1亮
led_delay();
P3=0xfb;
//LED2亮
led_delay();
P3=0xf7;
//LED3亮
led_delay();
P3=0xef;
//LED4亮
led_delay();
P3=0xdf;
//LED5亮
led_delay();
P3=0xbf;
//LED6亮
须消除抖动期t1和t3的影响。
7
8.1 键盘概述 8.2 独式键盘
目
录
8.4 非编码键盘扫描方式选择
5.6 键盘接口设计
8.2.1 独立式键盘接口设计 特点:一键一线,键相互独立,每个按键各接一条I/O口 线,通过检测I/O输入线的电平状态,可很容易判断哪个按键 被按下。
//无按下键处理
8.2.2 独立式键盘接口设计案例
下面看用Proteus虚拟仿真独立式键盘实际案例。 【例8-2】单灯控制:独立按键1按下,LED1亮,独立 按键2按下,LED1灭。
8.2.2 独立式键盘接口设计案例
软件检测流程图:
START
初始化
N 是否有键按下
Y 延时10ms
N 是否有键按下
自锁式按键
弹性按键:按下时闭合,松手自动断开;
自锁式按键:按下时闭合且会自动锁住,只有再次按下时才弹起断开。 比如电源开关。
3
8.1 键盘概述
2.键盘分类 分类:非编码键盘和编码键盘
非编码键盘:靠软件编程来识别的键盘 编码键盘:键盘上闭合键的识别由专用的硬件编码器实现, 并产生键编码号或键值。 非编码键盘特点:按键直接与单片机相连,通常使用在按 键数量较少的场合。
//函数:反向流水点亮LED //LED8亮 //LED6亮 //LED5亮 //LED4亮 //LED3亮 //LED2亮 //LED1亮 //LED0亮
▲▲▲
8.2.2 独立式键盘接口设计案例
void Alter(void)//函数:交替点亮高4位与低4位LED {
P3=0x0f; led_delay(); P3=0xf0; led_delay(); } void blink (void) //函数:闪烁点亮LED { P3=0xff; led_delay(); P3=0x00; led_delay(); }
▲▲▲
8.2.2 独立式键盘接口设计案例
void led_delay(void) {
unsigned char i,j; for(i=110;i>0;i--)
for( j=1000;j>0;j--) ;
//函数:延时
} void delay10ms(void)//函数:软件消抖延时10ms {
unsigned char i,j; for(i=11;i>0;i--) for( j=1000;j>0;j--) ; }
//函数功能:键盘扫描 //检测到有键按下 //延时10ms再去检测 //按键k1被按下 //按键k2被按下 //按键k3被按下 //按键k4被按下
▲▲▲
8.2.2 独立式键盘接口设计案例
void forward(void) {
//函数功能:正向流水点亮LED
P3=0xfe;
//LED0亮
led_delay();
8.2.2 独立式键盘接口设计案例
1.独立式键盘的查询工作方式
【例8-1】对图8-4所示独立式键盘,用查询方式实现键
盘扫描,根据按下不同按键,对其进行处理。扫描程序如下: #include<reg51.h>
void key_scan( )
{
unsigned char keyval
do {
P1=0xff;
▲▲▲
1.独立式键盘的查询工作方式
参考程序:
#include<reg51.h>
sbit S1=P1^0;
//将S1位定义为P1.0引脚
sbit S2=P1^1;
//将S2位定义为P1.1引脚
sbit S3=P1^2;
//将S3位定义为P1.2引脚
sbit S4=P1^3;
//将S4位定义为P1.3引脚
8.2.2 独立式键盘接口设计案例
1.独立式键盘的查询工作方式
图8-6 虚拟仿真的独立式键盘的接口电路
8.2.2 独立式键盘接口设计案例
1.独立式键盘的查询工作方式(二) 由于本案例中的4个按键分别对应4个不同的点亮功能,
且具有不同的按键值“keyval”,具体如下: 按下K1键时,keyval=1 按下K2键时,keyval=2 按下K3键时,keyval=3 按下K4键时,keyval=4
另一种是采用专用的键盘/显示器接口芯片,这类芯片中都有 自动去抖动的硬件电路。
8-2 RS触发器
8-3 电容并联法
6
8.1 键盘概述 5.按键的识别
键的闭合与否,反映在输出电压上的高电平或低电平。通 过对电平的高低状态的检测,便可确认按键是否按下以及是否 释放。为确保单片机对一次按键动作只确认一次按键有效,必
【例8-3】单片机与4个独立按键k1~k4及8个LED指示 灯的一个独立式键盘。4个按键接在P1.0~P1.3引脚,P3口 接8个LED指示灯,控制LED指示灯亮与灭,原理电路见图 8-6。
按下k1键,P3口8个LED正向(由上至下)流水点亮; 按下k2键,P3口8个LED反向(由下而上)流水点亮; 按下k3键,高、低4个LED交替点亮; 按下k4键,P3口8个LED闪烁点亮。
8.2.2 独立式键盘接口设计案例
1.独立式键盘的查询工作方式
本独立式键盘工作原理如下: (1)首先判断是否有按键按下。将接有4个按键的P1 口低4位(P1.0~P1.3)写入“1”,使P1口低4位为输入状 态。然后读入低4位的电平,只要有一位不为“1”,则说 明有键按下。读取方法:
P1=0xff; if((P1&0x0f )!=0x0f ); //读P1口低4位按键值,按位“与”运算后结果非 // 0x0f,表明低4位必有1位是“0”, 说明有键按下
▲▲▲
8.2.2 独立式键盘接口设计案例
2.独立式键盘的中断扫描方式
前面介绍查询方式独立式键盘接口设计与程序设计。为 提高单片机扫描键盘的工作效率,可采用中断扫描方式,只 有在键盘有键按下时,才进行扫描与处理。可见中断扫描方 式的键盘实时性强,工作效率高。
8.2.2 独立式键盘接口设计案例
2.独立式键盘的中断扫描方式
//处理按下的k1键,“……”为处理程序 //跳出switch语句 //处理按下的k2键 //跳出switch语句 //处理按下的k3键 //跳出switch语句 //处理按下的k4键 //跳出switch语句 //处理按下的k5键 //跳出switch语句
8.2.2 独立式键盘接口设计案例
1.独立式键盘的查询工作方式
break;
case 2:backward(); //键值为2,调用反向流水点亮函数
break;
case 3:Alter(); //键值为3,调用高、低4位交替点亮函数
break;
case 4:blink (); //键值为4,调用闪烁点亮函数
break;
}
}
}
▲▲▲
8.2.2 独立式键盘接口设计案例
第8章
单片机与键盘接口设计
单片机原理及接口技术(C51编程)(第3版)