4.4.第十个实验--按键的完整检测
来源:互联网 发布:分析家软件 编辑:程序博客网 时间:2024/06/06 00:10
实验目的:完成一次完整的按键检测,解决上篇文章中的问题
预备知识:
(1)按键事件就是按键操作过程中的不同状态切换一次
(2)一个完整的案件事件包括,按下事件(电平由高变低)、弹起事件(电平由低变高)。
(3)一般认为发生了一次完整的按键才算是用户操作了一次按键,
实验过程分析:
第零步:设置初始值flag==0
第一步:当按键io引脚电平有变化,确认被按下
第二步:消抖之后再次检测该按键的电平,确认按键被按下
第三步:这里检测flag==0,让数码管显示增加1
第四步:当数码管显示过一次之后设置flag==1
第五步:检测到按键电平变高(被弹起),整个案件事件完成,重置flag==0
实验代码:
#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}; //独立数码管的段码表unsigned char flag = 0; //设置flag表示按键弹起还是按下的状态void add_display(void);void delay10ms(void);void delay(void);void main(void){ while(1) { if(key1==0) //第一次低电平 { delay10ms(); if(key1 == 0) //消抖之后还是低电平 { if(flag == 0) //flag初始值是0,也就是当上面两次确保了按键被按下之后显示增加1 { add_display(); //数码管增加1 flag = 1; //当按键被按下,并且显示加1之后,设置flag ==1,确保下次只有确保按键被弹起之后,再次被按下且设置为0之后才能再次进入这里 } } } else { if(key1==1) //按键被弹起(整个按键事件完成),该按键IO引脚变为高电平 { if(flag== 1) //按键被弹起,且flag是上次按键被按下,数码管显过后设置的flag==1 { flag = 0; //完整的按键事件完成,重置flag==0,默认为初始值 } } } delay(); }}/**************独立数码管显示***********************/void add_play(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--);}
0 0
- 4.4.第十个实验--按键的完整检测
- 4.2.第十个实验--检测键值并使用数码管显示
- ADC检测多个按键
- 51单片机STC89C52 4个独立按键的检测
- STM32按键的检测
- 4.6.第十一个实验--使用数码管显示矩阵按键的键值
- 按键的编程—中断检测按键
- 第二个实验 按键 点亮led
- uCOS-II的检测按键
- wince按键中断的检测
- 第十三节cocosdx的按键增加过程
- 多功能检测按键-3 按键扫描 单按 长按 多个按键 响应方式
- 完整的按键驱动程序--转韦东山
- 检测按键
- 检测按键
- 按键检测
- 按键检测
- 按键检测
- 我跟PhoneGap的首次接触
- 线程池原理及创建(C++实现)
- cocos2d-x lua v3.10 pcall异常处理
- 监听一个对象的值和熟悉的改变
- 进程地址空间 find_vma()
- 4.4.第十个实验--按键的完整检测
- 从BaseActivity与BaseFragment的封装谈起
- 分布式和集群的区别(通俗)
- Java设计模式
- gdb调试宏
- 基于 AVOS Cloud 的 Android 应用程序快速开发简介
- 硬盘的读写原理
- post和get的区别?
- Android自定义控件