- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单片机原理及应用在线开放课程
键盘接口技术:独立按键
CONTENTS
目录
道艺兼修
敬业乐群
Part
键盘简介
01
键盘简介
键盘是电子系统中人机对话的重要组成部分,是人向机器发出指令、输入信息的必须设备,也是在单片机应用系统中使用最广泛的一种数据输入设备。
键盘是由多个按键组成的。
Part
独立按键
02
独立按键
按键通常是一种常开型开关,常态下按键的两个触点处于断开状态,按下按键时它们才闭合。
A
B
C
B
A
D
按键1
按键2
02
独立按键与单片机的接口原理
330
P1.6
P1.7
VCC
GND
按键不按下时,P1.7通过一个电阻接到VCC上,P1.7为高电平状态,
按键按下时
按键抬起时,又接到VCC上,P1.7再次回到高电平状态。
P1.7接到了GND上,P1.7被拉低为低电平
02
多个独立按键的单片机接口电路
图2-20 独立式连接的非编码键盘
P1.0
1
P1.1
1
P1.2
1
P1.3
1
P1.4
1
P1.5
1
P1.6
1
P1.7
1
0
0
P1
1111,1111
P1
1111,1110
P1
1101,1111
02
实际按键的抖动问题
实际按键的按下与释放是通过机械触点的闭合与断开来实现的,因机械触点的弹性作用,在闭合与断开的瞬间均有一个抖动的过程,抖动必须清除。
02
常用消抖方法
1.硬件方法
硬件方法是设计一个滤波延时电路或单稳态电路、RS触发器等硬件电路来避开按键的抖动时间。每个按键一套电路。
02
常用消抖方法
2.软件方法
软件方法是指编制一段时间大于20ms的延时程序,在第一次检测到有键按下时,执行延时子程序,使键的前沿抖动消失后再检测该键状态,如果该键仍保持闭合状态电平,则确认为该键已稳定按下,否则无键按下,从而消除了抖动的影响。
同理,在检测到按键释放后,也同样要延迟一段时间,以消除后沿抖动,然后转入对该按键的处理
02
软件消抖流程图
Part
简单独立按键实例
03
任务显示电路图如下,用第一个数码管
将独立按键接于单片机P3.0引脚
独立按键接于单片机P3.0,
当每按下一次按键数码管的值加1,初始值为0,加到9后归零。
03
程序代码
#includereg52.h
#define uchar unsigned char
#define uint unsigned int
sbit wei = P2^7; //数码管位选
sbit duan = P2^6; //数码管段选
sbit key_s2 = P3^0;//S2按键位定义
uchar code leddata[]={
0x3F, 0x06, 0x5B, 0x4F, 0x66,
0x6D, 0x7D, 0x07, 0x7F, 0x6F, };//0-9显示码
void delay(uint z)
{ uint x,y;
for(x = z; x 0; x--)
for(y = 114; y 0 ; y--);
}
void main()
{ uchar num;
we = 1;
P0 = 0xfe; //选通第一个数码管
wei = 0;
while(1)
{ duan = 1;
P0 = leddata[num]; //显示S2按下次数
duan = 0;
if(key_s2 == 0)//判断S2是否按键
{delay(20);//软件延时
if(key_s2 == 0)
{num++; //计数加1
}
while(!key_s2); //松手检测
}
if(num == 10) //当数值为超过9时归零
{num = 0;
}
}
}
谢谢收看!
文档评论(0)