【第22期】观点:IT 行业加班,到底有没有价值?

4.4.第十个实验--按键的完整检测

原创 2016年06月02日 10:47:25

实验目的:完成一次完整的按键检测,解决上篇文章中的问题

预备知识:
(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--);
}
版权声明:本文为博主原创文章,转载请注明出处。 举报

相关文章推荐

[startrelatedarticles]

{relatedtitle}

{relateddes}
[endrelatedarticles] [startrelatedarticlesad1]

{relatedtitle}

{relateddes}
[endrelatedarticlesad1] [startrelatedarticlesad2]
{relateddes}
[endrelatedarticlesad2]
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)