单片机2个端口控制4个按键怎样实现

单片机能否用2个I/O端口实现控制4个按键,如何连接,编程思路怎样实现?... 单片机能否用2个I/O端口实现控制4个按键,如何连接,编程思路怎样实现? 展开
 我来答
单片机嵌入式爱好者
2019-01-12 · TA获得超过520个赞
知道小有建树答主
回答量:276
采纳率:100%
帮助的人:59.3万
展开全部

2个IO检测6个按键的方法

单片机IO口如果识别更多的按键,简单的方法就是通过控制按键按下,识别电流的流向。这说可能不是很理解,下面就来介绍下,如下图按键识别电路:

按键S1按下,电流是从R1流向GND的,S2按下是从R2流向GND,S3按下是从R1和R2共同流向GND。

S4按下是从IO1流向IO2,也可以从IO2流向IO1,S5按下是从IO1流向IO2,S6按下是从IO2流向IO1。按键按下和电流流向关系如下:

那么这6个按键单片机要怎么识别呢,下面就说下识别思路流程:

1. 先配置IO1和IO2都为1,然后读IO1和IO2,若读到IO1为0,那么S1按下,若读到IO2为0,那么S2按下,若读到IO1和IO2都为0,那么S3按下,若IO1和IO2都没读到0,那么进行下一步;

2. 配置IO1为0,IO2为1,读IO2,若读IO2为1,进入下一步,若IO2读为0,那么可以判断是S4或S6按下,然后再配置IO2为0,IO1为1,读IO1,若IO1读为0,那么就是S4按下,若IO1读为1就是S6按下了。

3. 配置IO2为0,IO1为1,读IO1,若IO1读为0,那么就是S5按下了。

将上面的电路图再精简下就是下面的图形了,是不是很有美感,下图还比上图省2个二极管哦。

欢迎评论交流,也欢迎大家关注我:单片机嵌入式爱好者。会有源源不断的干货分享,能真正快速帮大家解决实际工作中遇到的问题哦!

superwolfsc
推荐于2017-12-15 · TA获得超过1129个赞
知道小有建树答主
回答量:225
采纳率:100%
帮助的人:414万
展开全部

单片机可以实现用2个I/O口实现4个按键的检测,电路见附图。详细的描述请进入我的空间查看,给出了程序流程图。

http://hi.baidu.com/superwolfsc/blog/item/a3fd57f0bcfbcfc70b46e051.html

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友52e979a1a
2010-05-14 · TA获得超过3588个赞
知道小有建树答主
回答量:1355
采纳率:100%
帮助的人:1061万
展开全部

4个按键有16种组合,不过很多都用不上,但用得上的组合起码有5种:只有一个按键按下的有4种,加上4个都没按下一共5种,而2个IO只有4种组合,所以是没法实现你的要求

但你可以用一个并行转串行的芯片74165或者I2C的接口扩展芯片来扩展接口,比如PCF8574,见下图

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
低调侃大山
推荐于2018-05-11 · 家事,国事,天下事,关注所有事。
低调侃大山
采纳数:67731 获赞数:374614

向TA提问 私信TA
展开全部
单片机2个端口控制4个按键实现代码:
/*************************************
P0和P1口全是灯,P2.0到P2.3是按键(用不是自动恢复的按键)控制
***************************************/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
bit change_led;
/*
void delay(uint ms)//延时子程序
{
uint i,
for(;ms>0;ms--)
{for(i=500;i>0;i--){;}}
}
*/
void delay(unsigned ms)
{
uint a;
for(;ms>0;ms--)
{
for(a=500;a>0;a--)
{;}
}
}
void key(void)//按键扫描程序
{
uchar j;
j=P2&0x0f;
delay(100);
if((P2&0x0f)!=j)
{
change_led=1;
}
else
{
change_led=0;
}
}
main(void)
{
uchar led=1;
change_led=0;
while(1)
{
key();
if(change_led==1)
{
if((P2&0x0f)>7)
{
led=0x01<<((P2&0x0f)%8);
P0=0;
P1=led;
}
else
{
led=0x01<<(P2&0x0f);
P1=0;
P0=led;
}
}
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
音乐飘渺迷人
2010-05-14 · TA获得超过3262个赞
知道大有可为答主
回答量:1719
采纳率:0%
帮助的人:1638万
展开全部

2条IO线可以实现5个按键.见下图:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式