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(); //调用广告灯移动函数

}

}

相关推荐
沃普天科技4 小时前
TYPE C全功能10G数据放大延长PS8353 PS8780 PS8778 8K60HZ
驱动开发·游戏·计算机外设·电脑·ar·硬件工程·vr
SmartRadio5 小时前
STM32WLE5 LoRa 射频匹配优化(V1.1 版)
stm32·单片机·嵌入式硬件·阻抗匹配
wearegogog1236 小时前
三电平SVPWM逆变器仿真指南
单片机·算法
笨笨饿6 小时前
74_SysTick滴答定时器中断
c语言·开发语言·人工智能·单片机·嵌入式硬件·算法·学习方法
chao1898447 小时前
基于 STM32 的 Modbus RTU 串口通讯程序
stm32·单片机·嵌入式硬件
fie88897 小时前
基于 STC15F104E 的 T12 白光烙铁控制器方案
stm32·单片机
yuan199977 小时前
基于 STM32 的工程级扫地机器人方案
stm32·嵌入式硬件·机器人
kiramario8 小时前
华硕游侠2-RX键盘多功能滚轮自定义M失效的解决方案
计算机外设
绿竹-大地8 小时前
韦东山开发板imx6ull移植WS1-CBS-Kit
嵌入式硬件·wifi
qq_411262428 小时前
wifi自适应
stm32·单片机·嵌入式硬件