单片机键盘电路的上拉电阻一般加多大的?

核心提示51单片机I/O口都是开漏输出,P1~P4都内置弱上拉电阻,(为了输出1时能拉高输出电平),P0口没内置上拉,但用作普通I/O口时必须外接弱上拉电阻,单片机键盘都不一定要用上拉电阻,因为加的话性能也稳定不了多少,加的话就加4.7K/5.1K

51单片机I/O口都是开漏输出,P1~P4都内置弱上拉电阻,(为了输出1时能拉高输出电平),P0口没内置上拉,但用作普通I/O口时必须外接弱上拉电阻,

单片机键盘都不一定要用上拉电阻,因为加的话性能也稳定不了多少,加的话就加4.7K/5.1K/10K吧,不能太小,防止灌电流过大。

注:按键的程序上一般会有10MS左右的消抖。

51单片机3键键盘电路图[只有三个按键,链接pc的]

插件有个脚没有焊好。

在你的单片机的板子上找原因,一是这键盘是用一个接插件插到你的板子上的吧。

你的板子上的这个接插件有个脚没有焊好,或者板子连这个脚的导线有断的地方,用万用表测一下吧。

同学你好,我来帮你,你可以使用串口啊,比如:1:给你一个从PC发给单片机数据后,单片机再原样发给PC的参考代码:2:将51某一个(引脚)按键0,1状态,发给PC;

1::::::::::::::

#include <REG52.H>

bit Flag;

unsigned int R_D,S_D;

unsigned char i;

void usart_init(void); ///串口初始化

void main (void) {

usart_init(void); ///串口初始化

while(1)

{

if (Flag==1)

{

SBUF = S_D; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)

while(!TI);// 等特数据传送(TI发送中断标志)

TI = 0;// 清除数据传送标志

Flag=0;

}

}

}

}

void ser_int (void) interrupt 4 using 1

{

if(RI == 1) //RI接受中断标志

{

RI = 0; //清除RI接受中断标志

R_D = SBUF; //SUBF接受/发送缓冲器

S_D=R_D;///////返回PC发送

Flag=1;

}

}

void usart_init(void)///串口初始化

{

SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1

TMOD|= 0x20; //定时器工作方式2

PCON|= 0x80;

TH1 = 0xF3;// //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)

TL1 = 0xF3;

TR1 = 1;

ES = 1; //开串口中断

EA = 1; // 开总中断

}

2:::::::::::::

#include <REG52.H>

sbit p34=P3^4;////////定义一个按键

bit Flag=1;

unsigned int S_D;

unsigned char i;

void usart_init(void); ///串口初始化

void delay (unsigned int Z) ; //延时程序 Z倍 MS

void key_p34(void) ; /////按键检

void main (void) {

usart_init(void); ///串口初始化

key_p34(void) ; ////上电后检测一次按键的状态

if (Flag==1)//上电后发送一次按键的状态

{

SBUF =1; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)

while(!TI);// 等特数据传送(TI发送中断标志)

TI = 0;// 清除数据传送标志

}

else

{

SBUF =0; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)

while(!TI);// 等特数据传送(TI发送中断标志)

TI = 0;// 清除数据传送标志

}

while(1)

{

key_p34(void) ;

if (Flag==1)

{

SBUF =1; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)

while(!TI);// 等特数据传送(TI发送中断标志)

TI = 0;// 清除数据传送标志

}

else

{

SBUF =0; //SUBF接受/发送缓冲器(又叫串行通信特殊功能寄存器)

while(!TI);// 等特数据传送(TI发送中断标志)

TI = 0;// 清除数据传送标志

}

}

}

void usart_init(void)///串口初始化

{

SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1

TMOD|= 0x20; //定时器工作方式2

PCON|= 0x80;

TH1 = 0xF3;// //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M)

TL1 = 0xF3;

TR1 = 1;

ES = 1; //开串口中断

EA = 1; // 开总中断

}

void delay (unsigned int Z)//延时程序 Z倍 MS

{

unsigned int x,y;

for(x=Z;x>0;x--)

for(y=110;y>0;y--) ;

}

void key_p34(void) /////按键检测

{

if(p34==0)

{ delay(10);

if(p34==0)

{

while(!p34) ;/////等待按键松手

Flag=0;

}

}

}

 
友情链接
鄂ICP备19019357号-22