导航:首页 > 操作系统 > 单片机按键检测

单片机按键检测

发布时间:2022-04-19 03:05:04

‘壹’ 单片机按键松手检测

电机转
代码放
等待按键松手
while()


即松手
再进行电机控制
if(!KEY1)
//检测按键按
{
DelayMs(200);
//

if(!KEY1)
//检测按键确实按
进行按键处理
{
while(!KEY1);
//等待按键松手
Coil_A1
//遇
Coil_A1
用{A1=1;B1=0;C1=0;D1=0;}代替
DelayMs(Speed);
//改变
参数
调整电机转速
Coil_B1
DelayMs(Speed);
Coil_C1
DelayMs(Speed);
Coil_D1
DelayMs(Speed);
}
}

‘贰’ 51单片机按键检测问题

三个二极管、一个电阻,确实是一个与门。

电阻的计算公式,正确。
二极管的导通电压、电流,选择的基本合理。

可以进行实际电路的安装、测试。

实际上,现在的二极管,发光效率,逐年的提高,已经不用 6mA,就很醒目了。
不同颜色的二极管,导通电压,也有差异,选用较小的,才利于触发中断。
得进行反复实验,才能完成设计。

在程序中,注意不要使 P3.2 输出低电平,否则,会有较大的灌电流出现。

‘叁’ 单片机以查询方式检测按键和以中断方式检测按键在编程方法上的不同之处

查询方式对按键响应不及时,因此有时要在循环程序中多次对按键检测,如按下按键改变流水灯方式,如果正在执行流水灯程序,可能几秒后才能检测到按键,这时应加流水循环中加入按键检测,当检测到按键按下时,用break语句跳出循环,中断方式可以立即响应。

‘肆’ 如何检测一个按键是否被按下

在单片机系统里,按键是常见的输入设备,在本文将介绍几种按键硬件、软件设计方面的技巧。一般的在按键的设计上,一般有三种方案:

一是GPIO口直接检测单个按键,如图1.1所示;

二是按键较多则使用矩阵键盘,如图1.2所示;

三是将按键接到外部中断引脚上,利用按键按下产生的边沿信号进行按键检测,如图1.3所示;

图1.1方案一

图1.2方案二

图1.3方案三

在以上三种设计上,各有优点和不足。

第一种是最简单和最基础的,对于单片机初学者很容易理解和使用,但是缺点是,需要在主循环中不断检测按键是否按下,并且需要做消抖处理。若主循环中某个函数任务占用时间较长,则按键会有不同程度的“失灵”。

第二种,优点是能够在有限的GPIO情况下,扩展尽可能多的按键。但缺点同上,需要不停检测按键是否按下。

第三种方式是效率最高,不需要循环检测按键是否按下,但是缺点是,需要单片机有足够的外部中断接口以供使用;

在以上的三种常见按键设计的基础上,现在分享我学习和工作中总结的按键方案。

改进一:在原方案一的基础上,加上与门电路,使得任何一个按键按下,都能产生中断,然后在中断里面识别是哪个按键被按下。因此不需要循环扫描,大大提高了效率。方案如图1.5所示。

只需要每个按键对应地增加一个二极管,利用二极管的线与特性,可以实现按下任何按键,都能产生中断信号,但是按键之间互不影响。二极管选用普通整流二极管即可,本人亲测可行。

图1.5 改进一

图1.6 改进二

改进二:在原有的ADC按键的基础上,也可用增加二极管的方式,实现按键中断,并在中断服务程序里进行AD转换,从而识别按键。电路如图1.6所示。

改进三:因为按键不可避免的有抖动,因此按键消抖可以通过硬件消抖和软件消抖。现在分享一个十分简单且有效的硬件消抖方法:给按键并联一个104左右的电容。软件上基本不用处理即可避免抖动。

改进四:在按键扫描检测的方案下,如果主循环中有某个函数占用时间较长,则按键会发生或长或短的“失灵”,现分享我的一个解决方案。将按键扫描放到定时器中断里面,这样就可周期性地检测按键按下情况,不受主循环的影响。并且,能解析出按键的不同状态,即按下、按住、弹起、为按下这四种状态,用以实现更丰富的功能。

但需注意两点,一是定时器的定时时间,不可过长也不可过短,过长容易检测不到按下,过短会占用大量时间资源。二是中断服务程序需简单明了,只做检测用,通过全局变量传递,在主循环内完成按键响应,中断服务函数内尽量不要占用太多时间。

‘伍’ 单片机引脚检测按键的问题

保护作用,限流电阻,防止IO设置为0,按键按下大电流灌入IO口造成IO损坏,
还有在外部特殊情况下,上电到程序IO初始化这段时间的IO的不确定性,如这个时候外部因素造成按键时被按下的,也会有大电流灌入。

‘陆’ 在单片机中怎样检测一个按键的击键次数

楼上讲得很对,就是先设一个变量,比如a,然后检测是否有按键按下,当有键按下时,就跳到相应的程序,执行a++,但是要注意一点,就是在按键按下的时候要加个延时函数去抖,在加一个语句判断按键是否按下(比如C语言的while语句),只有这样,才能正确判断按键按下的次数。

‘柒’ 单片机按键检测程序

P3=0xfe; //P3=0b1111 1110,令P3.0=0,同时令高四位为高电平,作好读端口准备(51IO特点)
temp=P3; //读回P3口的状态
temp=temp&0xf0; //temp&1111 0000,0与任何数结果为0,把temp变量的低四位屏蔽了,高四位因为任何数与1等于它本身,所以把高四位对应的端口状态读进来。
while(temp!=0xf0) //上步处理后,高四为不全为1,说明有按键按下(结合矩阵键盘的电路结构才能理解,这里不方便上图)
{
delay(5);
temp=P3;
temp=temp&0xf0;//这三句跟上面重复,功能是软件消抖
while(temp!=0xf0) //延时一段时间后判断还有按键按下,说明是真有按键按下,进入按键扫描与键值的判断,否则可能是意外抖动引起的,就不进行按键扫描。
{
temp=P3;
switch(temp).....

我想注释完应该能读懂,关键是要理解矩阵键盘的扫描原理。

‘捌’ 检测按键是否按下,应注意什么问题(单片机)

检测按键是否按下,一要注意是”消抖“;二要注意按键的”抬起“和按下状态。前者一般加几十毫秒延时。后者看程序要求,是确定按下后,等待抬起才退出键盘检测,还是直接退出。

‘玖’ 单片机怎样识别按键值

你的这个问题问的太没有水平了,我本来不想回答的我是实在看不下去了,这个问题对没有接触单片机的人是很有难度的,对于了解单片机的人简直是1+1=2就这么简单,单片机统称处理器内部结构操作非常简单,单片机IO可以做输出、和输入简单一点说,写程序就是控制单片机的IO端口输出高电平或者低电平来控制外围电路,但是单片机也可以检测外围电路的输入电平,下面我来给你做个详细介绍:


例如:单片机P2.4脚接了一个按键,按键另一端接GND,当按键按下后P2.4接直和GND连接到了一起,这时候单片机P2.4脚就低电平,那么我们就利用单片机的内部程序来判断P2.4脚是否为低电平,如果为低电平那么说明就有按键按下,这样说你能理解吗!

intmain(void)

{

while(1)

{

if(P2.4==0)//判断按键是否按下


{

延时去抖动,//判断这里加个延时,看看是不是干扰


if(P2.4==0)//在判断一次按键是否按下

{

//按键确实按下在这里只需相应的程序

}

}

}

}

阅读全文

与单片机按键检测相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:962
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:144
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:736
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:302
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:143
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:892
app转账是什么 浏览:163