历史上的今天
返回首页

历史上的今天

今天是:2025年03月10日(星期一)

正在发生

2020年03月10日 | 单片机独立按钮防止连按

2020-03-10 来源:eefocus

近日学习单片机,做按键时加了防抖,但是一不小心就变成了连按,如果防抖时间再加长,又影响程序执行。最后加了个按钮释放检测,解决了不小心变成连按的问题。


//----------------------独立按键-------------------------------------------------------------------

//4位独立按钮测试,带防抖功能及防止长按功能

//--------------------------------------------------------------------------------------------------

 

#include

#include "Keyboard.h"

 

void Key_Init()

{

TRISC=0xF0;              //高4位输入,检测按键,低4位输出,输出声音

//Beep=0;

}

 

//---------------------------------------------------------------------------------------------------

//按键提示音

//n是响几声,l=0时响约50ms,l>0时响约500ms。

//---------------------------------------------------------------------------------------------------

void Beep_Beep(INT8U n,INT8U l)

{

do

{

Beep=1;

if(l>0)

__delay_ms(500);

else

__delay_ms(50);

Beep=0;

if(l>0)

__delay_ms(500);

else

__delay_ms(50);

}while(1}

 

//---------------------------------------------------------------------------------------------------

//检测按键,防止长按。长按也是只显示按一次。

//---------------------------------------------------------------------------------------------------

char Key()

{

if(Key1==0)                    //如果按键按下

{

__delay_ms(10);           //延时10ms

if(Key1==0)               //继续检测是否按下,如果是就是代表按钮按下了,如果否就是抖动

{

while(!Key1);         //等待按钮释放后返回按钮值,以防止释放不及时产生连按

return 1;

}

}

 

if(Key2==0)

{

__delay_ms(10);

if(Key2==0)

{

while(!Key2);

return 2;

}

}

 

if(Key3==0)

{

__delay_ms(10);

if(Key3==0)

{

while(!Key3);

return 3;

}

}

 

if(Key4==0)

{

__delay_ms(10);

if(Key4==0)

{

while(!Key4);

return 4;

}

}

return 0;

}

头文件 


//----------------------独立按键--------------------------------------------

//4位独立按钮测试,带防抖功能

//--------------------------------------------------------------------------

#define Beep RC3

#define Long_Beep 1

#define Short_Beep 0

 

#define Key1 RC4

#define Key2 RC5

#define Key3 RC6

#define Key4 RC7

 

#define _XTAL_FREQ        4000000UL

#define INT8U             unsigned char

 

 

//----------------------------------------------------------------------------

//函数申明

//----------------------------------------------------------------------------

void Beep_Beep(INT8U n,INT8U l);

void Key_Init();

 

char Key();


推荐阅读

史海拾趣

Aeroflex公司的发展小趣事

Aeroflex是一家提供高性能测试和测量解决方案的公司,在航空航天、国防、通信和工业等领域拥有广泛的应用。以下是Aeroflex公司发展的五个相关故事:

  1. 公司成立和早期发展: Aeroflex公司成立于1973年,最初是一家由David King在新泽西州创建的小型创业公司,专注于为航空航天和国防行业提供测试和测量设备。随着公司在测试领域的技术积累和市场认可,其业务逐渐扩大,开始在全球范围内提供解决方案。

  2. 技术创新和产品发展: Aeroflex致力于技术创新,不断推出符合行业标准和客户需求的新产品。公司在射频和微波测试领域取得了突破,推出了一系列高性能测试仪器和系统,包括信号发生器、频谱分析仪和网络分析仪等,为客户提供全面的测试解决方案。

  3. 全球扩张和市场拓展: 随着市场需求的增长和业务规模的扩大,Aeroflex逐步在全球范围内建立了广泛的销售和服务网络。公司在美国、欧洲、亚洲和其他地区设立了多个分支机构和办事处,以加强对客户的支持和服务,并拓展新的市场领域。

  4. 公司并购和战略合作: 为加速业务增长和拓展技术能力,Aeroflex通过并购和战略合作不断扩大业务范围。公司先后收购了多家具有先进技术和市场地位的企业,加强了在航空航天、国防和通信等领域的竞争实力。

  5. 成为关键行业供应商: 长期以来,Aeroflex凭借卓越的技术和服务,成为航空航天、国防、通信和工业等关键行业的重要供应商之一。公司在测试和测量领域的领先地位得到了进一步巩固,为客户提供了高品质、可靠的产品和解决方案,赢得了良好的声誉和市场口碑。

Hartmann Codier GmbH公司的发展小趣事

对于固态非易失性精密电位器构成的温度测量电路,网友可能关心的问题及其回答如下:

  1. 固态非易失性精密电位器的工作原理是什么?
    • 回答:固态非易失性精密电位器(如X9C102/103/104/503系列)包含有99个电阻单元的电阻阵列。滑动单元的位置由CS、U/D和INC三个输入端控制。滑动端的位置可以被存储在一个非易失性存储器中,因此在下一次上电工作时可以被重新调用。
  2. 这个电位器在温度测量中是如何应用的?
    • 回答:非易失性数控电位器在温度测量中的应用主要是通过其构成的记数式模数转换电路来实现的。这种电路能够将温度信号转换为数字信号,进而进行温度的测量和记录。
  3. 固态非易失性精密电位器的分辨率是多少?
    • 回答:分辨率取决于具体的电位器型号。例如,X9C503(50k Ω)的每个抽头间的阻值为505 Ω,这意味着其分辨率等于最大的电阻值被99除。
  4. 这个电位器的工作电压范围是多少?
    • 回答:工作电压范围通常为VCC=3V至5.5V。
  5. 固态非易失性精密电位器能否在长时间内保存数据?
    • 回答:是的,所有的Xicor非易失性存储器都设计成并经过测试能够用于持久地保存数据的应用场合。滑动端位置数据可保存100年。
  6. 这个电位器在温度测量中有什么特点或优势?
    • 回答:其特点包括低功耗、高分辨率、非易失性存储、长时间数据保存等。这些特点使得它在温度测量中具有高精度、高可靠性和长寿命的优势。
  7. 如何选择合适的固态非易失性精密电位器进行温度测量?
    • 回答:在选择电位器时,需要考虑其工作电压、电阻范围、分辨率、功耗以及数据保存能力等参数。同时,还需考虑电路设计的具体需求和限制条件。

以上回答基于参考文章中的相关信息进行整理和总结,旨在解答网友可能关心的问题。

DIALIGHT公司的发展小趣事

随着业务的不断发展和市场的不断扩大,DIALIGHT公司逐渐实现了全球化布局。他们在美国、英国、丹麦、德国、马来西亚、新加坡、澳大利亚、墨西哥和巴西等地设立了分支机构或办事处,为全球客户提供及时、高效的服务。此外,DIALIGHT还积极寻求与其他企业的合作与共赢,通过战略合作协议的签署,为双方带来新的业务机遇和合作空间。这些举措不仅增强了DIALIGHT的市场竞争力,也为其未来的发展奠定了坚实的基础。

请注意,由于篇幅限制,以上三个故事仅为DIALIGHT公司发展历程的简要概述。如需更详细的信息和更多故事,建议查阅相关资料或访问公司官网。

B&F Fastener Supply公司的发展小趣事

为了进一步完善电子供应链,B&F Fastener Supply公司积极寻求并购机会。经过多轮谈判和尽职调查,公司成功收购了某家专注于电子元器件供应的公司。这次并购使得B&F的产品线更加丰富,能够为客户提供一站式的电子供应链解决方案。

风华邦科(FH-BK)公司的发展小趣事

在电子科技领域,FlyWin集团不断投入研发资源,致力于新技术的开发与应用。公司成立了专门的研发团队,专注于人工智能、物联网等前沿技术的探索。通过不断的技术创新,FlyWin成功推出了一系列具有自主知识产权的电子产品,如智能传感器、物联网解决方案等。这些产品不仅提升了公司的市场竞争力,也为公司的长远发展提供了强大的技术支撑。

Frequency Devices公司的发展小趣事

为了保证产品质量,Frequency Devices公司建立了完善的质量管理体系。公司引入了先进的生产设备和检测技术,对原材料采购、生产加工、成品检验等各个环节进行严格把控。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这些措施有效保障了产品的质量和稳定性,赢得了客户的信赖和好评。

问答坊 | AI 解惑

EXG极限重力赛车

[:D]EXG极限重力赛车(Extreme Gravity Racer)沃尔沃“极限重力车”全部采用F-1赛车材料制造,没有发动机,驾驶座非常低,造价3万美元。它只能在陡峭的坡道上行驶,利用重力来获取前进的速度。“极限重力车”的设计者布莱尔·泰勒说,这款车的设计很 ...…

查看全部问答>

用STATECAD快速设计有限状态机

数字系统通常划分为信息处理单元和控制单元。信息单元主要进行信息的传输和运算, 而控制单元的主要任务是控制信息处理单元的微操作的顺序。控制单元的实现方式有: 有限状态机、控制寄存器和微代码控制器等。有限状态机在时间尺度上对其控制信号进行 ...…

查看全部问答>

单片机驱动蜂鸣器产生音乐

c语言程序代码都在里面。 可能有的单片机板子不一样,改一下端口就可以了…

查看全部问答>

SX1213 Receiver Ultra-Low Power Integrated UHF Receiver

The SX1213 is a low cost single-chip receiver operating in the frequency ranges from 300MHz to 510MHz. The SX1213 is optimized for very low power consumption (3mA). It incorporates a baseband demodulator with data rates up to 200 ...…

查看全部问答>

[求助] 求书:inductance: loop and partial

新书。渴求啊。。。。。。。。。。。…

查看全部问答>

wince6.0移植 ActiveSync连接不上 奉上100分!!!

首先说明:硬件是2440,wince5.0运行很好,即可以连接ActiveSync4.5 现象:当用USB连接PC机与设备时, 1.在PC机上的计算机管理器界面可以显示 Anchor USB EZ-Link Cable 驱动,这说明PC机 USB驱动没问题     wince6.0 下的USB驱动也是 ...…

查看全部问答>

WINCE5.0 多址广播WSASocket创建失败?

首先说下,我的WINCE系统是支持WinSock2的,可以用WinSock2库的函数,在我的程序中想要创建多址广播套接字 创建函数:SOCKET WSASocket(   int af,   int type,   int protocol,   LPWSAPROTOCOL_INF ...…

查看全部问答>

帮忙购台笔记本

我同学学MCU单片机,想再石家庄地区买个笔记本。 他的原话是: 不需要配置太好 要有串口和并口 一千五到二千的就可以,主要用他来做项目 由于本人对硬件方面不懂。 能帮忙推荐下吗?或者解释下什么叫 既有串口又有并口。…

查看全部问答>

串口通讯校验问题,在线等待,急急急!!!

随机生成的6位16进制的数据,产生的校验码,怎么推算出它的计算公式??? 已知的一组数据为 6位数据 校验码 1AC855 8C 524446 5B 7C6306 12 90CE32 67 BBD5E9 8C 38E29A 4B 3E0003 36 6A8F1D F3 D58651 09 132850 60 …

查看全部问答>

vc6.0到evc的移植的问题

我们前一段时间花了大力气在VC6.0上做了个程序,现在要把它移植到EVC下面.对话框等控件应该没有什么问题了,但是出现了下面的问题 pMyCtrlCard = new CMyCtrlcard;       //这一行没有问题.         //打 ...…

查看全部问答>