C51单片机-单按键输入识别,键盘消抖

【实验目的】

独立按键的识别方法、键盘消抖等。

【实验现象】

每按一次独立键盘的S2键,与P1口相连的八个发光二极管中点亮的一个往下移动一位。

【实验说明】

关于按键去抖动的解释,我们在手动按键的时候,由于机械抖动或是其它一些非人为的因素很有可能会造成误识别,一般手动按下一次键然后接着释放,按键两片金属膜接触的时间大约为50ms左右,在按下瞬间到稳定的时间为5-10ms,在松开的瞬间到稳定的时间也为5-10ms,如果我们在首次检测到键被按下后延时10ms左右再去检测,这时如果是干扰信号将不会被检测到,如果确实是有键被按下,则可确认,以上为按键识别去抖动的原理。

【硬件电路】

【程序代码】(程序源码在本博客资源里边,可自行下载使用)

//独立按键的识别方法、键盘消抖等。

//现象:每按一次独立键盘的S2键,与P1口相连的八个发光二极管中点亮的一个往下移动一位。

#include <reg52.h>

sbit BY1=P3^5; //定义按键的输入端S2键

unsigned char count; //按键计数,每按一下,count 加1

unsigned char temp;

unsigned char a,b;

void delay10ms(void) //延时程序

{

unsigned char i,j;

for(i=40;i>0;i--)

for(j=248;j>0;j--);

}

key() //按键判断程序

{

if(BY1=0)

//此处实际代码为if()判断P3^4口的状态 是否为0 (此编译器不支持)

//判断是否按下键盘,当单片机上电时所有IO 口为高电平,

//S2键一端接地另一端接P3.4,所以当键被按下时P3.4口直接接地,

//此时检测P3.4肯定为低电平

{

delay10ms(); //延时,软件去抖动干扰

if(BY1=0) //此处实际代码为if()判断P3^4口的状态 是否为0 (此编译器不支持)//再次检测确认按键按下

{

count++; //按键计数加1

if(count=8) //计8次重新计数 //此处实际代码为判断count变量是否为8

{

count=0; //将count清零

}

}

while(BY1==0); //等待按键释放,如果键未释放则一直在此等待。

}

}

move() //广告灯向下移动移动函数

{

a=temp<<count; //这三句为一个循环移位

b=temp>>(8-count);

P1=a|b;

}

main()

{

count=0; //初始化参数设置

temp=0xfe;

P1=0xff;

P1=temp;

while(1) //永远循环,扫描判断按键是否按下

{

key(); //调用按键识别函数

move(); //调用广告灯移动函数

}

}

相关推荐
up向上up1 小时前
【普中】基于普中51开发板单片机的8_8点阵滚动显示设计
单片机·51单片机·proteus
Bona Sun2 小时前
单片机手搓掌上游戏机(十二)—esp8266运行gameboy模拟器之编译上传
c语言·c++·单片机·游戏机
伍六星2 小时前
电脑重启壁纸黑屏,缓一会之后鼠标在哪里划过,该部分就显示该单元壁纸
计算机外设·电脑
恒锐丰小吕3 小时前
晶准 RB302B 内置MOSFET锂电池保护芯片技术解析
嵌入式硬件·硬件工程
TangDuoduo00054 小时前
【电感基础与特性】
stm32·单片机·嵌入式硬件
许商4 小时前
【stm32】【SD】SDIO fatfs
stm32·单片机·嵌入式硬件
就是蠢啊4 小时前
51单片机——独立按钮、矩阵按键
单片机·嵌入式硬件·51单片机
云山工作室5 小时前
多传感器融合的办公室智能门禁系统(论文+源码)
stm32·单片机·嵌入式硬件·物联网·毕业设计·课程设计
天天爱吃肉82186 小时前
智能网联汽车信息安全深度解析:从UN-R155与GB44495标准到OBD/UDS技术实践
网络·嵌入式硬件·汽车
小曹要微笑9 小时前
STM32H7系列全面解析:嵌入式性能的巅峰之作
c语言·stm32·单片机·嵌入式硬件·算法