去抖动函数c语言 抖动表达式( 二 )


单片机键盘去抖动c语言程序?。。?/h2>使用这个到板子里面:
#include reg52.h
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
sbit KEY1 = P2^4;
sbit KEY2 = P2^5;
sbit KEY3 = P2^6;
sbit KEY4 = P2^7;
unsigned char code LedChar[] = { //数码管显示字符转换表0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E};
void delay();
void main(){
bit keybuf = 1; //按键值暂存 , 临时保存按键的扫描值
bit backup = 1; //按键值备份,保存前一次的扫描值
unsigned char cnt = 0; //按键计数,记录按键按下的次数
ENLED = 0;//选择数码管 DS1 进行显示
ADDR3 = 1;
ADDR2 = 0;
ADDR1 = 0;
ADDR0 = 0;
P2 = 0xF7;//P2.3 置 0,即 KeyOut1 输出低电平
P0 = LedChar[cnt];//显示按键次数初值
while (1){
keybuf = KEY4;//把当前扫描值暂存
if (keybuf != backup){//当前值与前次值不相等说明此时按键有动作
delay();//延时大约 10ms
if (keybuf == KEY4){//判断扫描值有没有发生改变 , 即按键抖动
if (backup == 0){//如果前次值为 0,则说明当前是弹起动作
cnt++;//按键次数+1
//只用 1 个数码管显示,所以加到 10 就清零重新开始
if (cnt = 10){
cnt = 0;
}
P0 = LedChar[cnt]; //计数值显示到数码管上
}
backup = keybuf; //更新备份为当前值,以备进行下次比较
}
}
}
}
/* 软件延时函数 , 延时约 10ms */
void delay(){
unsigned int i = 1000;
while (i--);
}
C语言问题解答 。为什么这样可以说检测按键是否松开?while((i50)(K1==0))//检测按键是否松开
{
Delay10ms();
i++;
}
分析:
按键K1一直按着的时候 , 循环执行50次退出 。
按键K1松开时,循环马上退出 。
所以,是检测按键在500ms(50*10ms)内,按键是否松开 。
【去抖动函数c语言 抖动表达式】关于去抖动函数c语言和抖动表达式的介绍到此就结束了 , 不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读