历史上的今天
今天是: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();
史海拾趣
|
数字系统通常划分为信息处理单元和控制单元。信息单元主要进行信息的传输和运算, 而控制单元的主要任务是控制信息处理单元的微操作的顺序。控制单元的实现方式有: 有限状态机、控制寄存器和微代码控制器等。有限状态机在时间尺度上对其控制信号进行 ...… 查看全部问答> |
|
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 ...… 查看全部问答> |
|
wince6.0移植 ActiveSync连接不上 奉上100分!!! 首先说明:硬件是2440,wince5.0运行很好,即可以连接ActiveSync4.5 现象:当用USB连接PC机与设备时, 1.在PC机上的计算机管理器界面可以显示 Anchor USB EZ-Link Cable 驱动,这说明PC机 USB驱动没问题 wince6.0 下的USB驱动也是 ...… 查看全部问答> |
|
首先说下,我的WINCE系统是支持WinSock2的,可以用WinSock2库的函数,在我的程序中想要创建多址广播套接字 创建函数:SOCKET WSASocket( int af, int type, int protocol, LPWSAPROTOCOL_INF ...… 查看全部问答> |
|
随机生成的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下面.对话框等控件应该没有什么问题了,但是出现了下面的问题 pMyCtrlCard = new CMyCtrlcard; //这一行没有问题. //打 ...… 查看全部问答> |




