单片机与键盘的连接.
用单片机实现PC键盘输入

ACALL DELA10
RRC A RET
与主控机的异步串行通讯基于RS-232总线标准。为了使接口具有更好的兼容性和工作稳定性,我们用MAX232E作为数据传送器。MAX232E是专为RS-232通讯而设计,低功耗,外接电容小,抗干扰能力强,管脚有ESD保护并且能支持到120k波特率的数据传输,能很好地解决PC机和单片机电平不匹配问题。同时它增强了数据驱动能力,能支持12米的串行线。
CLR CLOCK ;同步信号产生一个脉冲
CLR KEY ;数据线置0 ACALL DELAY30
PC机复位键盘过程:先发复位命令FFH,单片机收到以FAH应答,PC机收到后,置时钟线和数据线为高电平,单片机检测到此状态开始内部自测试,测试完成发送AAH表示自检结束,否则发FDH表自检出错。
3.编码格式
实际的标准键盘在有按键按下时,键盘向PC机发送两行编码,一组为键稳定闭合时的扫描码,一组为闭合健断开时的断开码。具体各键的扫描码可以查询有关资料,断开码为两个字节,等于F0H+该键的扫描码。主控机通过通讯接口向受控机进行模拟键盘输入时,向串行口发送的编码单片机提取后发送给受控机的PS/2口,因此主控机向串行口发送的编码应符合下列格式:
摘 要:在某些特殊控制场合,需要通过主控机的串行口和受控机的PS/2键盘口,实现主控机对受控机的模拟键盘输入。本文介绍了串行口和键盘口的通讯接口的软、硬件设计方法。
关键词:串行口 PS/2键盘口 通讯 单片机
键盘作为微机的基本输入设备,是微机不可缺的一部分。但在某些特殊的场合,我们要对受控机进行程序设计的特殊输入控制,则需要一接口实现串行口和PS/2键盘口通讯,这样在主控机上通过对串行口的编程就能实现对受控机的模拟键盘输入。笔者开发的该接口以MCS-51单片机为核心,原理图如图1所示,利用MCS-51的全双工异步串行I/O口实现与主控机的异步串行通讯,而和受控机PS/2键盘口的同步串行通讯则通过双向数据I/O口控制同步时钟和数据位。
键盘扫描程序实验报告

一、实验目的1. 理解键盘扫描的基本原理。
2. 掌握使用C语言进行键盘扫描程序设计。
3. 学习键盘矩阵扫描的编程方法。
4. 提高单片机应用系统的编程能力。
二、实验原理键盘扫描是指通过检测键盘矩阵的行列状态,判断按键是否被按下,并获取按键的值。
常见的键盘扫描方法有独立键盘扫描和矩阵键盘扫描。
独立键盘扫描是将每个按键连接到单片机的独立引脚上,通过读取引脚状态来判断按键是否被按下。
矩阵键盘扫描是将多个按键排列成矩阵形式,通过扫描行列线来判断按键是否被按下。
这种方法可以大大减少引脚数量,降低成本。
本实验采用矩阵键盘扫描方法,使用单片机的并行口进行行列扫描。
三、实验设备1. 单片机开发板(如51单片机开发板)2. 键盘(4x4矩阵键盘)3. 连接线4. 调试软件(如Keil)四、实验步骤1. 连接键盘和单片机:将键盘的行列线分别连接到单片机的并行口引脚上。
2. 编写键盘扫描程序:(1)初始化并行口:将并行口设置为输入模式。
(2)编写行列扫描函数:逐行扫描行列线,判断按键是否被按下。
(3)获取按键值:根据行列状态,确定按键值。
(4)主函数:调用行列扫描函数,读取按键值,并根据按键值执行相应的操作。
3. 调试程序:将程序下载到单片机,观察键盘扫描效果。
五、实验程序```c#include <reg51.h>#define ROW P2#define COL P3void delay(unsigned int ms) {unsigned int i, j;for (i = 0; i < ms; i++)for (j = 0; j < 123; j++);}void scan_key() {unsigned char key_val = 0xFF;ROW = 0xFF; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值ROW = 0x00; // 初始化行delay(1); // 延时消抖key_val = ROW & COL; // 获取按键值}void main() {while (1) {scan_key();if (key_val != 0xFF) {// 执行按键对应的操作}}}```六、实验结果与分析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
单片机按键电路的原理

单片机按键电路的原理
单片机按键电路的原理是基于按键的开关原理实现的,通过按下按键来控制电路的开关状态。
按键电路主要由按键和电路两部分组成。
按键是一种机械开关,当按下按键时,按键上的金属触点会接通电路,从而改变电路的状态。
电路包括输入端、输出端和电源。
在按键电路中,输入端通过一个外部上拉或下拉电阻与电源相连,起到稳定电压的作用。
当按下按键时,金属触点会接通电路,将电源的电压传递到输入端,产生一个高电平状态。
否则,按键未按下时,输入端会通过上拉电阻连接到地,形成一个低电平状态。
单片机通过输入端检测电路的状态来判断按键是否按下。
当电路为低电平时,判定为按键未按下;而电路为高电平时,就会识别为按键按下。
为了减少按键电路带来的抖动和干扰,可以在按键和单片机之间添加电容器进行滤波处理。
电容器会对输入端的电压进行平滑滤波,使其稳定在一个较低的值上,从而减少按键可能带来的干扰。
此外,还可以在按键电路中使用独立按键编码芯片,将按键的信号编码成数字信号,然后通过数码管、液晶屏等方式显示出来。
总结来说,单片机按键电路的原理是通过机械开关将电源电压传递到输入端,通过单片机检测输入端的电平状态来判断按键是否按下,从而实现对电路的控制。
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位交替点亮函数
第5章 MCS–51单片机的接口与应用 99页 5.8M

(1) 用键盘连接的I/O线的二进制组合表示键码。例如用4行、
4列线构成的16个键的键盘,可使用一个8位I/O口线的高、低4 位口线的二进制数的组合表示16个键的编码,如图5.4(a)所示。 各键相应的键值为88H、84H、82H、81H、48H、44H、42H、 41H、28H、24H、22H、21H、18H、14H、12H、11H。这种键 值编码软件较为简单直观,但离散性大,不便安排散转程序的 入口地址。
第5章 MCS–51单片机的接口与应用 JNB ACC.2,K2 JNB ACC.3,K3 JNB ACC.4,K4 JNB ACC.5,K5 JNB ACC.6,K6 ;检测2号键是否按下,按下转 ;检测3号键是否按下,按下转 ;检测4号键是否按下,按下转 ;检测5号键是否按下,按下转 ;检测6号键是否按下,按下转
;0号键功能程序
;0号键功能程序执行完返回 ;0号键功能程序
JMP START
……………………… PROM7: ……………………… JMP START …
;1号键功能程序执行完返回
;7号键功能程序 ;7号键功能程序执行完返回
第5章 MCS–51单片机的接口与应用
5.1.4 行列式键盘
行列式键盘又叫矩阵式键盘。用I/O口线组成行、列结构, 按键设置在行列的交点上。例如4×4的行列结构可组成16个键 的键盘。因此,在按键数量较多时,可以节省I/O口线。 1.行列式键盘的接口 行列式键盘的接口方法有许多,例如直接接口于单片机的 I/O口上;利用扩展的并行I/O接口;用串行口扩展并行I/O口接 口;利用一种可编程的键盘、显示接口芯片8279进行接口等。 其中,利用扩展的并行I/O接口方法方便灵活,在单片机应用系
MOVX @DPTR,A
单片机按键连接方法

单片机按键连接方法总结单片机在各种领域运用相当广泛,而作为人机交流的按键设计也有很多种。
不同的设计方法,有着不同的优缺点。
而又由于单片机I/O资源有限,如何用最少的I/O口扩展更多的按键是我所研究的问题。
接下来我给大家展示几种自己觉得比较好的按键扩展方案,大家可以在以后的单片机电路设计中灵活运用。
1)、第一种是最为常见的,也就是一个I/O口对应一个按钮开关。
这种方案是一对一的,一个I/O口对应一个按键。
这里P00到P04,都外接了一个上拉电阻,在没有开关按下的时候,是高电平,一旦有按键按下,就被拉成低电平。
这种方案优点是电路简单可靠,程序设计也很简单。
缺点是占用I/O资源多。
如果单片机资源够多,不紧缺,推荐使用这种方案。
2)、第二种方案也比较常见,但是比第一种的资源利用率要高,硬件电路也不复杂。
这是一种矩阵式键盘,用8个I/O控制了16个按钮开关,优点显而易见。
当然这种电路的程序设计相对也还是很简单的。
由P00到P03循环输出低电平,然后检测P04到P07的状态。
比方说这里P00到P03口输出1000,然后检测P04到P07,如果P04为1则说明按下的键为s1,如果P05为1则说明按下的是s2等等。
为了电路的可靠,也可以和第一种方案一样加上上拉电阻。
3)、第三种是我自己搞的一种方案,可以使用4个I/O控制8个按键,电路多了一些二极管,稍微复杂了一点。
这个电路的原理很简单,就是利用二极管的单向导电性。
也是和上面的方案一样,程序需要采用轮训的方法。
比方说,先置P00到P03都为低电平,然后把P00置为高电平,接着查询P02和P03的状态,如果P02为高则说明按下的是s5,若P03为高则说明按下的是s6,然后再让P00为低,P01为高,同样检测P02和P03的状态。
接下来分别让P02和P03为高,其他为低,分别检测P00和P01的状态,然后再做判断。
这种方案的程序其实也不难。
4)这是我在一本书上看到的,感觉设计的非常巧妙,同样它也用到了二极管,不过比我的上一种方案的I/O利用率更高,他用4个I/O口控制了12个按键。
单片机原理及接口技术第5章 IO口应用-显示与开关键盘输入

图5-1
发光二极管与单片机并行口的连接
5
如果端口引脚为低电平,能使灌电流Id从单片机的外部流入内部,则将
大大增加流过的灌电流值,如图5-1(b)所示。所以,AT89S51单片机任 何一个端口要想获得较大的驱动能力,要采用低电平输出。 如果一定要高电平驱动,可在单片机与发光二极管之间加驱动电路,如 74LS04、74LS244等。 5.1.2 单片机I/O端口控制发光二极管的编程 发光二极管与单片机的I/O端口的连接,如图5-1(b)所示。如要点亮 某发光二极管,只需该I/O端口位写入“0”即可。下面通过一个例子介绍如
21
图5-6 4位LED静态显示的示意图
示字符。这样在同一时间,每一位显示的字符可以各不相同。但是,静态
显示方式占用I/O口线较多。 对于图5-6所示电路,要占用4个8位I/O口(或锁存器)。如果数码管 数目增多,则还需要增加I/O口的数目。在实际的系统设计中,如果显示位 数较少,可采用静态显示方式。但显示位数较多时,为了降低成本,一般 采用动态显示方式。 2. 动态扫描显示方式 显示位数较多时,静态显示所占用的I/O口多,为节省I/O口与驱动电路
单片机控制的8位I/O口锁存器输出相连。如果送往各个LED数码管所显示字 符的段码一经确定,则相应I/O口锁存器锁存的段码输出将维持不变,直到
送入下一个显示字符的段码。因此,静态显示方式的显示无闪烁,亮度较
高,软件控制比较容易。 图5-6所示为4位LED数码管静态显示电路,各个数码管可独立显示,
只要向控制各位I/O口锁存器写入相应的显示段码,该位就能保持相应的显
闭合时,P3.0引脚为低电平。单片机对开关状态的检测是由程序检测
10
图5-3
开关、LED发光二极管与P1口的连接
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
for(i=t;i>0;i--) for(j=200;j>0;j--);
}
case 2:P0=~P0;delay(250);break;
case 3:P0=0xff;break;
}
}
}
模块7 系统扩展与接口技术
中断服务函数
void isr_int0() interrupt 0
{
unsigned char kdata;
kdata=P1;kdata=kdata^0xff;
kdata>>=1;
if(kdata!=0)
{
kdata>>=1;
if(kdata!=0) flag=3;
else
flag=2;
}else
flag=1;
}
模块7 系统扩展与接口技术
二、矩阵式键盘接口技术
1、矩阵式键盘的结构
在键盘中按键数量较多时,为了减少I/O口的占用 ,通常将按键排列成矩阵形式。在矩阵式键盘中, 每条水平线和垂直线在交叉处不直接连通,而是通 过一个按键加以连接。这样,一个端口(如P1口) 就可以构成4*4=16个按键,在需要的键数比较多时 ,采用矩阵法来做键盘是合理的。
模块七 系统扩展与接口技术
7.2 单片机与键盘的连接
模块7 系统扩展与接口技术
7.2.1 键盘及其抖动问题
键盘是由若干按键组成的开关矩阵,它是微型计算 机最常用的输入设备,用户可以通过键盘向计算机 输入指令、地址和数据。一般单片机系统中采用非 编码键盘,非编码键盘是由软件来识别键盘上的闭 合键,它具有结构简单,使用灵活等特点,因此被 广泛应用于单片机系统。
模块7 系统扩展与接口技术
1、矩阵式键盘的结构
当按键没有按下时, VCC 所有的输入端都是高 电平,代表无键按下 。一旦有键按下,则 输入线就会被拉低, 这样,通过读入输入 线的状态就可判断是 否有键按下了。
模块7 系统扩展与接口技术
2、矩阵式键盘的按键识别方法——行扫描法
1)判断键盘中有无键按下。将全部行线置低电平, 然后检测列线的状态。只要有一列的电平为低,则表 示键盘中有键被按下,而且闭合的键位于低电平线与 4根行线相交叉的4个按键之中。若所有列线均为高电 平,则键盘中无键按下。
模块7 系统扩展与接口技术
7.2.1 键盘及其抖动问题
组成键盘的按键有触点式和非触点式两种,单片机 中应用的一般是由机械触点构成的。当开关S断开时 ,P1.0输入为高电平,S闭合时,P1.0输入为低电平 。由于按键是机械触点,当机械触点断开、闭合时 ,会有抖动。
模块7 系统扩展与接口技术
消除抖动的方法
void delay(unsigned char t) { unsigned char i,j; for(i=t;i>0;i--)
for(j=200;j>0;j--); }
模块7 系统扩展与接口技术
源程序(判断是否有键按下函数)
bit key() { unsemp=temp|0xfc; temp=temp^0xff; if(temp==0)
if(key()) {
if(vkey==1) start_end=1; else start_end=0; } if(start_end) { ldata=~ldata; delay(250); } else ldata=0xff; P0=ldata;
模块7 系统扩展与接口技术
源程序(延时函数delay())
#include<reg51.h> void delay(unsigned char); unsigned char flag;
void delay(unsigned char t) {
void main()
unsigned char i,j;
{ IT0=1;EA=1;EX0=1; while(1) {switch(flag) { case 1:P0=0x00;break;
2)判断闭合键所在的位置。在确认有键按下后,即 可进入确定具体闭合键的过程。其方法是:依次将行 线置为低电平,即在置某根行线为低电平时,其它线 为高电平。在确定某根行线位置为低电平后,再逐行 检测各列线的电平状态。若某列为低,则该列线与置 为低电平的行线交叉处的按键就是闭合的按键。
模块7 系统扩展与接口技术
7.2.2 单片机与键盘的连接
一、独立式按键接口技术 1、通过I/O口连接:
将每个按键的一端接到单片 机的I/O口,另一端接地。
模块7 系统扩展与接口技术
实例
如下图所示,采用不断查询的方法,即检测是否有键闭合,如 有键闭合,则去除键抖动,判断键号并转入相应的键处理。假 设两个键定义如下:
• P3.0:开始执行某种操作(假设让8只发光二极管闪 烁) 。
• P3.1:停止执行。
模块7 系统扩展与接口技术
源程序
void delay(unsigned char); bit key(); void lsd(unsigned char); unsigned char vkey; bit start_end=0; void main() {unsigned char ldata; while(1) { } }
return flag; else { } }
delay(25); temp=P3|0xfc; temp=temp^0xff; if(temp==0)
return flag; else { vkey=temp; flag=1;
while(temp) { temp=P3|0xfc;
temp=temp^0xff; } } return flag;
模块7 系统扩展与接口技术
2、采用中断方式
各个按键都接到一 个与非门上,当有 任何一个按键按下 时,都会使与门输 出为低电平,从而 引起单片机的中断 ,它的好处是不用 在主程序中不断地 循环查询,如果有 键按下,单片机再 去做相应的处理。
模块7 系统扩展与接口技术
实例 试编程实现由3个按键控制发光二极管的全亮 、闪烁或全灭。
硬件方法:一般不常用。 软件方法:单片机设计中常用软件法,软件去除抖动其实很
简单,就是在单片机获得P1.0口为低的信息后,不是立即认 定S已被按下,而是延时10毫秒或更长一段时间后再次检测 P1.0口,如果仍为低,说明S的确按下了,这实际上是避开 了按键按下时的抖动时间。而在检测到按键释放后(P1.0为 高),再延时5~10个毫秒,消除后沿的抖动,然后再对键 值处理。