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

}

}

相关推荐
eng八戒几秒前
【RA-Eco-RA2L1开发板评测】基于 FSP 实现串口打印功能
单片机·嵌入式硬件
0X789 分钟前
金乌 Codex 桌宠 v0.1:一只会盯着鼠标看的小太阳神鸟
计算机外设
嵌入式ZYXC27 分钟前
第2篇:《面试题:LDO和DC-DC的区别?分别用在什么场景?》
stm32·单片机·嵌入式硬件·面试·职场和发展
开开心心就好1 小时前
无弹窗不更新的PC本地播放工具
运维·科技·macos·docker·计算机外设·ocr·powerpoint
HAPPY酷1 小时前
单片机OLED进阶:打造赛博朋克风“碎片化消散”文字特效
单片机·嵌入式硬件·microsoft
czhaii1 小时前
GB2312简体中文编码表
单片机·算法
玩转单片机与嵌入式1 小时前
AI 推理会不会堵住实时任务?MCU 上跑模型时,RTOS 和 DMA 该怎么配合?
人工智能·单片机·嵌入式硬件
清风6666662 小时前
基于单片机的超声波人体感应PWM自动调光灯设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
fffzd2 小时前
STM32:IIC与温湿度传感器(轮询模式)
stm32·单片机·嵌入式硬件·iic·通信·嵌入式软件·i2c
项目題供诗2 小时前
STM32-编码器接口测速(十七)
stm32·单片机·嵌入式硬件