课件第10章-键盘接口
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
项目四 数字万年历的设计
• 要求:设计一单片机控制的数字万年历。 它采用液晶显示,可以显示年、月、日、 星期,小时、分钟、秒及当前的温度等信 息。
1、项目介绍:
• 此项目涉及键盘、显示接口的问题,还要 用到数字温度传感器DS18B20及时间芯片 DS1302。所涉及的知识广泛,综合性也很 强。 • 只要认真、耐心地去边做边学,一定会提 高综合编程能力及调试能力,达到单片机 助理工程师甚至是工程师的水平。
图10.4 4×4行列式键盘仿真电路
程序流程图
图 10.5 行列式键盘程序流程图
线反转法
• #include<reg51.h> • char led_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d ,0x07,0x7f, • 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71} • ;//共阴段码表 • char key_buf[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xb d,0x7d, • 0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};//键 盘编码表
图 10.1 键盘抖动示意图
后沿抖动
• 抖动时间一般为5~10ms。抖动会引起一 次按键被误读多次。为确保CPU对键的一 次闭合仅做一次处理,必须去除键抖动。 • 抖动的去除可以采用硬件的办法,也可以 软件的办法。硬件去抖动的方法这里不予 介绍,可参考数字电路相关的书籍。软件 去抖动的方法其实就是利用延时来去掉这 一抖动时间,在具体程序设计中再讨论
22pF
RP1 U1
1 2 3 4 5 6 7 8 9 10K +5V P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17 p23 XTAL1
仿真电路图
line0 19
U1
XTAL1 P0.0/AD0 P0.1/AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7 P2.0/A8 P2.1/A9 P2.2/A10 P2.3/A11 P2.4/A12 P2.5/A13 P2.6/A14 P2.7/A15 P3.0/RXD P3.1/TXD P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD 39 38 37 36 35 34 33 32 21 22 23 24 25 26 27 28 10 11 12 13 14 15 16 17
18 line1
XTAL2
9 line2
RST
29 30 31 line3
PSEN ALE EA
row0
row1
row2
row3
line0 line1 line2 line3 row0 row1 row2 row3
1 2 3 4 5 6 7 8
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 AT89C51
独立式键盘
图 10.2 独立键盘电路图
• 独立式按键是指各按键相互独立地接通一 条输入数据线。当任何一个键按下时,与 之相连的输入数据线即可读入数据0,而没 有按下时读入1。图 10.2 独立键盘电路图 • 独立式键盘的电路简单,易于编程,但占 用的IO口线较多,当需要较多按键时可能 产生IO资源紧张问题。
2、电路图
• 如图13.22所示。实际连接中要将DS18B20 的中间一个引脚通过4.7K的电阻上拉到电 源正极。
LM016L
GND
LCD1
VSS VDD VEE
RS RW E
C1
22pF +5V
C2
GND
D0 D1 D2 D3 D4 D5 D6 D7
1 2 3
4 5 6
7 8 9 10 11 12 13 14 +5V
键盘接口
1 2 3 4 键盘工作原理 独立键盘 行列式键盘
举例
第十章 键盘接口
• 知识目标:掌握独立式与行列式键盘的工 作原是,理解键盘接口程序的编制方法; 掌握按键抖动的原因及处理方法。 • 技能目标:能设计两种键盘电路,会编写 简单的独立式键盘程序。 • 素质目标:养成扩展嵌入式系统芯片外围 相关知识的习惯。
4、利用查表比对法求出闭合按键的 键模。
• 将各键的键值依次存放在一个数组中,其 顺序号就是键模。 • char key_buf[]={0xee,0xde,0xbe,0x7e,0xed,0xd d,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0 xd7,0xb7,0x77}; • 利用循环变量i控制比对过程,两者相等时 的i就是闭合键的键模。
• • • • • • • •
0 ee 4 ed 8 eb C e7
1 de 5 dd 9 db D d7
2 be 6 bd A bb E b7
3 7e 7 7d B 7b F 77
行列式键盘扫描流程及程序
• 要求:4×4行列式键盘按下任意按键后, LED显示器上显示该键的键模(0~F)。 图10.4 4×4行列式键盘仿真电路
X1
19 12MHz
18
XTAL2
C3
GND
9
RST
20uF 1k
AT89C52
R1
+5V 1.5V 1.5V
10k
GND
GND
+5V
29 30 31
PSEN ALE EA
p23
U3 RV1
p10 3 2 1 VCC DQ GND DS18B20 27.0
U2
2
32768
p10 8 1 +5V
X1 VCC1 VCC2
二、线反转法
• 1、判断哪一列有键压下 • 写端口(0xf0):行线电平=0;列线电平 =1。 • 读端口进行判断:若P3 = 0xf0→没有按键 压下; • 若P3≠0xf0→某列有键 压下→K1
• 2、判断哪一行有键压下 • 写端口(0x0f):行线电平=1;列线电平 =0。 • 读端口进行判断:若P3 = 0x0f→没有按键 压下; • 若P3≠ 0x0f→某行有键压下→K2 • 3、 将K1与K2相“或” 并存于K2(形成键 值)——闭合键所在行、列的状态均为0, 其余皆为1。
• • • • • • • • • • •
//输入时P0口置全1 //读取按键状态 //无键按下,返回
//有键按下,延时去抖
//确认键按下 //抖动引起,返回 //等待键释放
ຫໍສະໝຸດ Baidu
• switch(k) • { • case:0xfe • … • break; • case:0xfd • … • break; • … • • case:0x7f • … • break; • }
• 第一行的键值: • 11101110、11011110、10111110、 01111110 • 整个键盘的键值(对应为0-F): • 0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7 d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0 x77
矩阵式键盘按键的识别 :行 扫描法及线反转法工作原理
1. 扫描法 2. 线反转法
图 10.3 矩阵键盘电路图
一、扫描法
• 判别键盘中有无键按下。向行线输出全0,读入列 线状态。如果有键按下,总有一列线被拉至低电 平,从而使列输入不全为1。 • 查找按下键所在位置。依次给行线送低电平,查 列线状态。全为1,则所按下的键不在此行;否则 所按下的键必在此行且是在与零电平列线相交的 交点上的那个键。图 10.3 矩阵键盘电路图 • 对按键位置进行编码。找到所按下按键的行列位 置后,对按键进行编码,即求得按键键值。
• • • • • • •
char getKey(void); void delay(unsigned int time) { unsigned int j=0; for(;time>0;time--) for(j=0;j<125;j++); }
• • • • • • • • •
void main(void) { char key=0; P2=0x00; while(1) { key=getKey();//获取键盘键值 if(key!=-1) //如果有键按下
X2
3
RST SCLK X2 I/O DS1302
5 7 6
1 2 3 4 5 6 7 8
P1.0/T2 P1.1/T2EX P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
3、元件清单
• • • • • • • • • 单片机-AT89S52 LCD-SMC1602A LCM 数字温度传感器-18B20(或1820)TO封装 时间芯片-DS1302 晶振-12MHZ、32.768KHZ 电阻:10K、10K可调、10K排阻、4.7K各一个 电容:10uF、30pF*2、 电池:1.5V*2(或3V)可充电(带电池座) 按键*5
• 设计一个独立式按键的键盘接口,并编写 键扫描程序,电路原理图如图10.2所示,键 号从上到下分别为0~7。
C语言程序清单:
• • • • • • • • • • • • • #include<reg52.h> void key() { unsigned char k; P0=0xff; k=P0; if(k==0xff) return; delay20ms(); k=P0; if(k==0xff) return; while(P0!=0xff);
项目四任务1万年历键盘的设计
• 要求设计4个输入键的键盘,它能调整日期、 时间。 • 任务分析:万年历中的时间或日期要经常 进行效正,这里就牵涉到从外部输入到单 片机信息的问题,即人要输入接口。
键盘基本问题
• 键盘分编码键盘和非编码键盘。键盘上闭 合键的识别由专用的硬件编码器实现,并 产生键编码号或键值的称为编码键盘,如 BCD码键盘、ASCLL码键盘等;而靠软件 来识别的称为非编码键盘;非编码键盘有 分为:独立式非编码键盘和行列式非编码 键盘。 • 在单片机组成的测控系统及智能化仪器 中,用的最多的是非编码键盘。
键的识别
• 即如何识别键盘的问题。
按键
键盘由一组规则排列的按键组成,一个按键实际上是一个开关元件, 也就是说键盘是一组规则排列的开关。单片机使用的按键是一种常开型 的开关,平时按键的两个触点处于断开状态,按下键时它们才闭合。
键的抖动
按键在闭合和断开时,触点会存在抖动现象:
键按下 键释放 闭合稳定 释放稳定 前沿抖动
• {P2=led_mod[key];//在P2口显示相应的键 值(0-F) • delay(10); • } • else • P2=0x00;//如果没有键按下,则不显示。 • } • }
• • • • • • • • • • • • • •
char getKey(void) { char k1=0,k2=0,i=0; P1=0xf0;//输出行扫描码 delay(10); if(P1!=0xf0)//如果有键按下 { k1=P1;//读取列键值 delay(10); if(P1==k1)//如果值不变 { P1=0x0f;//输出列扫描码 delay(10);
//0号键按下时执行程序段
//1号键按下时执行程序段
//2~6号键程序省略
//7号键按下时执行程序段
行列式键盘
• 为了减少键盘与单片机接口时所占用I/O线的数目, 在键数较多时,通常都将键盘排列成行列矩阵形 式。每一水平线(行线)与垂直线(列线)的交 叉处通过一个按键来连通。将IO口分为行线和列 线,按键跨接在行线和列线上,列线通过上拉电 阻接正电源。 利用这种结构只需N条行线和M条 列线,即可组成具有N×M个按键的键盘。 • 键值:按键闭合时的数值,键模:按键代表的数 值。 • 特点:占用IO口线较少,但软件将较为复杂。