单片机的独立按键

对于51单片机外接独立按键的时候,我的设想是按键的一端接地,另一端与I/O引脚相连,当按键按下的时候,引脚输入的是低电平,而按键未按下的时候,引脚输入的是高电平,问一下我... 对于51单片机外接独立按键的时候,我的设想是按键的一端接地,另一端与I/O引脚相连,当按键按下的时候,引脚输入的是低电平,而按键未按下的时候,引脚输入的是高电平,问一下我这样的设想是否成立?请给出解释; 展开
 我来答
362xSo
推荐于2018-03-26 · TA获得超过382个赞
知道答主
回答量:131
采纳率:0%
帮助的人:68.6万
展开全部
51单片机接按键,按键一端接地,另一端与I/O引脚相连,按键按下为低电平,未按下为高电平。 思路正确,如果用P0口需要加上拉电阻(10k),其他端口可以 不加 上拉电阻, 现在的 STC 10、11、12、15系列单片机 都可以 不加 上拉电阻。 编程 时 只要用 检测 高低 电平 来判断是否 有 按键 按下 就可以了。
敖英发卿愫
2020-01-23 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:28%
帮助的人:842万
展开全部
这种方法是可以的。我们检测IO口的时候是判断它现在是什么电平。作为输入IO口,它平时都是高阻态,检测的时候是高电平。所以当按键按下的时候,引脚被拉低。检测的时候就是低电平。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
GUEL86
2018-12-01 · TA获得超过5855个赞
知道大有可为答主
回答量:5538
采纳率:86%
帮助的人:2729万
展开全部

#include<reg51.h>  // 4*4 按键+数码管仿真,可以参考。

#define uchar unsigned char

uchar temp;

int key1,key,disbuf;// 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f

unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

unsigned char ledx[8];

bit  s0,s1;

void delay(uchar z)

{

uchar i,j;

for(i=0;i<120;i++)

for(j=0;j<z;j++);

}

void scan()   //要是按键了,扫描键盘编码值

{

P1=0xF0;

delay(1);

temp=P1;

switch(temp)

{

case 0xe0: key1=0;

break;

case 0xd0: key1=1;

break;

case 0xb0: key1=2;

break;

case 0x70: key1=3;

break;

}

P1=0x0f;

delay(1);

temp=P1;

switch(temp)

{

case 0x0E: key=key1+0;

break;

case 0x0D: key=key1+4;

break;

case 0x0B: key=key1+8;

break;

case 0x07: key=key1+12;

break;

default : key=-1; 

}

if((key1+1)&&(key+1)) disbuf=key;

}

void ejjc()  //判断是否按键

{

P1=0xF0;

if(P1!=0xF0) { scan();s0=1;}

else { s0=0; s1=1;}

}

void main()

{

uchar i;

while(1)

{

ejjc();

if(s0==1  && s1==1)

{

s0=0;s1=0;

for(i=0;i<8;i++)

{ ledx[i]=ledx[i+1]; ledx[8]=disbuf; }

}

P0=0xff;

P2=LED7Code[ledx[0]];

P0=0xfe;

delay(5);

P0=0xff;

P2=LED7Code[ledx[1]];

P0=0xfd;

delay(5);

P0=0xff;

P2=LED7Code[ledx[2]];

P0=0xfb;

delay(5);

P0=0xff;

P2=LED7Code[ledx[3]];

P0=0xf7;

delay(5);

P0=0xff;

P2=LED7Code[ledx[4]];

P0=0xef;

delay(5);

P0=0xff;

P2=LED7Code[ledx[5]];

P0=0xdf;

delay(5);

P0=0xff;

P2=LED7Code[ledx[6]];

P0=0xbf;

delay(5);

P0=0xff;

P2=LED7Code[ledx[7]];

P0=0x7f;

delay(5);

}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
瑞博实凌玄
2020-04-07 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:35%
帮助的人:749万
展开全部
靠近IO口的一端要接上拉电阻,一般4.7K就可以了。
按键时IO口是低电平,无按键时是高电平。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式