独立按键BTN

本文详细介绍了51单片机独立按键BTN的使用,包括基础知识、独立按键编程、状态机法和三行按键法。强调了按键消抖处理、状态机设计以及模块化编程的重要性,并提供了编程注意事项和示例。
摘要由CSDN通过智能技术生成

一、基础知识

独立按键位于整个矩阵键盘的最左侧,4、5、6、7.

        左下角,跳帽选择2、3,选择的是独立按键,S4、S5、S6、S7起作用。

        按下对应按键之后,p30~p33分别和地相连,置0.

        P30/TXD,P31/RXD两个管脚同时和串口服务,用于串口通信以及给单片机下载程序用。

        通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动,如图所示。

        按键稳定闭合时间长短是由操作人员决定的,通常都会在100ms以上,刻意快速按的话能达到40-50ms左右,很难再低了。
        抖动时间是由按键的机械特性决定的,一般都会在10ms以内,为了确保程序对按键的一次闭合或者一次断开只响应一次,必须进行按键的消抖处理

        通常而言,抖动时间在1

以下是基于51单片机独立按键按钮计数1到4的代码: ```c #include <reg52.h> // 51单片机头文件 #define uchar unsigned char // 定义uchar为unsigned char类型 sbit btn1 = P3^0; // 定义按键1引脚 sbit btn2 = P3^1; // 定义按键2引脚 sbit btn3 = P3^2; // 定义按键3引脚 sbit btn4 = P3^3; // 定义按键4引脚 void delay(unsigned int xms) // 延时函数 { unsigned int i, j; for (i = xms; i > 0; i--) for (j = 110; j > 0; j--); } void main() { uchar cnt = 0; // 计数器初始化为0 while (1) // 无限循环 { if (btn1 == 0) // 检测按键1状态 { delay(10); // 延时去抖 if (btn1 == 0) // 再次检测按键1状态 { cnt = 1; // 计数器加1 while (!btn1); // 等待按键1释放 } } else if (btn2 == 0) // 检测按键2状态 { delay(10); // 延时去抖 if (btn2 == 0) // 再次检测按键2状态 { cnt = 2; // 计数器加2 while (!btn2); // 等待按键2释放 } } else if (btn3 == 0) // 检测按键3状态 { delay(10); // 延时去抖 if (btn3 == 0) // 再次检测按键3状态 { cnt = 3; // 计数器加3 while (!btn3); // 等待按键3释放 } } else if (btn4 == 0) // 检测按键4状态 { delay(10); // 延时去抖 if (btn4 == 0) // 再次检测按键4状态 { cnt = 4; // 计数器加4 while (!btn4); // 等待按键4释放 } } P1 = cnt; // 将计数器值显示在P1口 } } ``` 以上代码实现了独立按键按钮计数1到4的功能。在主函数中,使用while循环不断检测按键状态,如果检测到按键按下,就将计数器加1/2/3/4,并等待按键释放。最后将计数器值显示在P1口。需要注意的是,为了防止按键抖动,需要在检测到按键按下时加一个延时去抖的操作,具体实现可以根据实际情况调整延时时间。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值