4.3.认识按键抖动并消除抖动
来源:互联网 发布:澳大利亚学生签证知乎 编辑:程序博客网 时间:2024/06/06 00:31
实验目的:认识按键抖动并消除抖动
预备知识:
(1)什么是抖动:按键的内部结构是一个弹簧,当按键被按下的时候,弹簧可能会抖动好几次,而CPU轮训读取按键的IO端口的速度是很快的,可在抖动期间可能会多次读取IO口的电平值造成“按一次按键增加多次的现象”
(2)通过延时一段时间来“错过抖动期”
(3)全局变量:全局变量定义在函数外面,其作用与为整个程序,生命周期为从程序开始到程序结束。
实验过程分析:
(1)通过“按键一次使数码管增加1”实验,了解什么是抖动
(2)如何消除抖动
(3)测试代码
第一步:通过上节课代码进行改造成按键一次使数码管增加1
第二步:发现现象:按一次可能会增加好多数,而非只增加1
第三步:分析现象发现按键抖动
实验代码:
/******************** 按键一次使数码管增加1实验的代码************************/
#include<reg51.h>sbit key1 = P1^0; // 按键1接在P1^0 // P0端口接数码管unsigned char dnum = 0;int dm[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc7,0xa1,0x86,0x8e}; //独立数码管的段码表void display(void);void delay(void);void main(void){ while(1) { if(key1==0) //如果按键1被按下,则数码管就显示增加1 { display(); } delay(); //延时函数 }}//数码管显示函数void display(void){ //只有按键被按下,此函数才被执行 dnum = dnum +1 //display函数每被执行一次,dnum 就 + 1 P0 =dm[dnum]; //P0端口接到数码管上}void delay(){ unsigned char i = 0,j = 0; for(i=0;i<200;i++) for(j=0;j<200;j++);}
上面的代码会导致一个问题,当按下一个按键时,数码管不是增加1,而是增加很多次,考虑其中的原理就是按键的抖动
/**************************** 按键消抖代码****************************/
#include<reg51.h>sbit key1 = P1^0;unsigned char dnum = 0; //标记数码管显示的标记数int dm[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc7,0xa1,0x86,0x8e}; //独立数码管的段码表void add_display(void);void delay10ms(void);void delay(void);void main(void){ unsigned char i=0; unsigned char keynum = 0; while(1) { if(key1==0) //在1点检测到低电平 { delay10ms(); //延时10ms之后再来检测该电平 if(key1 == 0) //在2点及其之后,还是低电平,说明确实是按键被按下 { add_display() ; //显示函数被执行,数码管显示加 1 } } delay(); }}/********************独立数码管显示****************************/void add_display(void){ dnum += 1; P0 = dm[dnum];}/*************延时函数(时间未知)*******************************/void delay(void){ unsigned char i = 0,j = 0; for(i=0;i<200;i++) for(j=0;j<200;j++);}/****************延时10ms*************************************/void delay10ms(void){ unsigned char a,b,c; for(c=5;c>0;c--) for(b=4;b>0;b--) for(a=248;a>0;a--);}
实验总结
(1)当按住一个按键不松开时,数码管会不停地增加,这是为什么?下节课介绍完整的按键检测。
0 0
- 4.3.认识按键抖动并消除抖动
- 内核定时器消除按键抖动
- 消除视频抖动
- 按键防抖动程序
- 按键抖动与处理
- iOS 按键 抖动
- 按键防抖动
- 抖动
- 按键软件去抖动设计
- 按键原理和软硬件按键消抖动
- 用双缓冲消除画面抖动
- S3C2440触摸屏消除跳点及抖动
- 实时曲线图(消除抖动、闪烁)
- FPGA按键防抖动程序_Verilog
- 按键去抖动防反跳技巧
- 按键驱动的恩恩怨怨之防抖动
- mini2440 按键驱动添加定时器消抖动
- linux驱动程序之定时器防按键抖动
- 排序----冒泡排序的优化_选择排序_插入排序
- C++ Primer复制控制 13.2 赋值操作符
- studio 2.1 App闪退BUG
- 一个获取w3school上面SQL教程的Python爬虫
- android recycleview使用
- 4.3.认识按键抖动并消除抖动
- SQL注入
- opencv代码段1
- c++中的成员访问级别和派生继承方式
- VC++学习笔记
- 整数数据类型表示范围与位运算
- 【BZOJ2251】外星联络 后缀数组
- 好多好多排序
- GCC命令总结