历史上的今天
返回首页

历史上的今天

今天是:2025年08月19日(星期二)

正在发生

2021年08月19日 | 51单片机-按键模式

2021-08-19 来源:eefocus

1.前讲回顾

在上一讲的代码里如果我们按下按键一直不松手,则灯会一直闪烁。这是因为“稳定接触状态”一直保持着长时间的低电平,所以程序的二次“if(KEY4==0)”判断一直满足条件就会在“LED2=0;”和“LED2=1;”之间来回切换,再加上50ms延时才会保持亮一段时间灭一段时间所体现的LED闪烁。

 

2.支持连按概念

这种按键模式就叫做“支持连按”,所谓支持连按即我们使用遥控器放大电视的音量时只需按住“+”键不放,屏幕上的音量值在一直累加,松手后就停止累加了,这种就叫做按键支持连按功能。

 

3.不支持连按概念

另一种按键模式叫做“不支持连按”,例如我们用的电磁炉上的“+”键,按下不松手时数值只加一次就不加了,只有松手后再按才会进行数值的第二次累加。两种按键模式在单片机开发中都会经常使用。

 

4.不支持连按的分析

我们需要思考的是,即使“稳定接触状态”的时间再怎么长,我们只能执行一次功能代码。


那么我们可以猜测,IO端口检测到按键按下然后执行完功能程序之后,下一个语句就写:如果IO端口还是保持着低电平(不松手状态),那程序就不往下执行了,让程序在这里“停止”,只有IO端口变成高电平(已松手)才允许“放行”程序去运行。


我们知道按键抖动的时间少于10ms,所以在满足第一次“if(KEY4==0)”判断的时候只做“delay_ms(10);”的延时左右,过了这段时间就是“稳定接触状态”了,于是再去二次判断“if(KEY4==0)”即可。

 

5.雏形的代码

#include  

sbit ADDR2 = P1^2;

sbit ADDR1 = P1^1;

sbit ADDR0 = P1^0;

sbit ENLED = P1^4;

sbit ADDR3 = P1^3;

  

sbit LED2  = P0^0;

sbit KEY4  = P2^7;

void delay_ms(unsigned int x)

{

    unsigned int i,j;

    if(x==1000)

    {

        for(i=0;i<19601;i++)//延时1s

        {

            for(j=5;j>0;j--);

        }

    }

    else while(x--)for(j=115;j>0;j--);

}

 

void main()

{  

    ADDR3 = 1;//使能三八译码器

    ENLED = 0;// 

   

    ADDR2 = 1;//**************************

    ADDR1 = 1;//让三八译码器的IO6输出低电平

    ADDR0 = 0;//**************************

    P2 = 0xF7;//让K4能具备有被拉低的条件先

     

    while(1)

    {    

        if(KEY4==0)

        {

            delay_ms(10);//等待抖动过去

            if(KEY4==0)  //二次判断

            {

                LED2=!LED2;

                while(KEY4==0);//如果IO端口还是保持着低电平,此时也就是没有松手,那括号里的条件满足,程序一直在循环这条语句,

                               //所以程序停止不往下执行了,直到KEY4变为1,也就是按键松手了,while里面的条件不成立才退出这个循环,放行了程序

            }

        }

    }

}


可以发现无论我们的按下手速有多快或多慢,“ LED2=!LED2;”只能被执行一次而已。这样就像按电磁炉上的按键一样,一次只能切换一回灯的亮灭,即使不松手也不会出现灯的闪烁,这就是不支持连按的代码书写方式,不过这样的代码还是存在缺陷,我们下一讲再解说。

推荐阅读

史海拾趣

BURGESS公司的发展小趣事

进入21世纪,BURGESS继续保持其强劲的发展势头。2004年,它成为第一家在纽约拥有工作地的游艇经理公司,这标志着其在美国市场的深入拓展。此外,BURGESS还不断扩大其在全球的业务网络,目前在全球范围内拥有12家办公室和160多名员工,形成了一个庞大的游艇经纪帝国。

FUJI公司的发展小趣事

进入21世纪,BURGESS继续保持其强劲的发展势头。2004年,它成为第一家在纽约拥有工作地的游艇经理公司,这标志着其在美国市场的深入拓展。此外,BURGESS还不断扩大其在全球的业务网络,目前在全球范围内拥有12家办公室和160多名员工,形成了一个庞大的游艇经纪帝国。

洲光源(Chau Light)公司的发展小趣事

在洲光源公司的发展历程中,创新一直是其前进的动力源泉。公司始终坚持以市场需求为导向,不断进行技术创新和产品升级。通过与高校、科研机构的合作,洲光源成功引进了一批高端人才和先进技术,为公司的发展注入了新的活力。同时,公司还积极参与国家和地方的创新计划项目,不断推动科技创新和产业升级。这些创新举措不仅提升了洲光源公司的市场竞争力,也为公司的持续发展奠定了坚实的基础。

ConnectBlue公司的发展小趣事

ConnectBlue公司成立于2000年,当时正值无线通信技术快速发展的时期。公司创始人凭借对无线技术的深刻理解和市场需求的敏锐洞察,决定专注于无线系统的研发和生产。起初,公司面临资金紧张和技术难题,但创始团队凭借坚韧不拔的精神,克服了一个又一个困难,成功开发出了一系列具有竞争力的无线模块产品。

大毅科技公司的发展小趣事

为了进一步提升产品质量和竞争力,大毅科技积极申请并获得了多项国际品质认证,如ISO9001、ISO14001、TS16949等。这些认证不仅证明了大毅科技在品质管理方面的卓越能力,还为公司打开了通往国际市场的大门。随着认证的不断增多,大毅科技的产品开始出口到全球各地,与索尼、雅马哈等知名企业建立了长期合作关系。

AdaptivEnergy公司的发展小趣事

作为一家有社会责任感的企业,大毅科技始终关注环境保护和可持续发展。公司积极推行绿色生产理念,采用环保材料和节能技术,减少生产过程中的废弃物排放和能源消耗。同时,大毅科技还积极参与公益事业和社区活动,回馈社会。这些举措不仅体现了公司的社会责任感,也赢得了社会的广泛赞誉。

以上是关于大毅科技在电子行业中的5个发展故事概述。这些故事展示了大毅科技在创立、生产基地拓展、品质认证与国际化、技术创新与研发以及社会责任与可持续发展等方面的努力和成就。

问答坊 | AI 解惑

ISV时代我们如何破局

ISV时代我们如何破局                ——专访武汉兴图新科电子有限公司首席架构师黄少军虽然软件在安防系统中正在扮演着越来越重要的角色,但人们对软件的作用和价值的认识程度还是远远不够, ...…

查看全部问答>

买HP电脑时附送的计步器

计步控制按钮 FM控制按钮 显示时间 秒表功能 …

查看全部问答>

IGBT驱动芯片IXDN404应用及改进

摘要:介绍了IXYS公司大功率IGBT驱动芯片IXDN404的特点及性能,并在此基础上,根据IGBT驱动的实际要求,设计出了一种具有过流保护及慢关断功能的简单有效的驱动电路,给出了实际电路图和驱动波形。    关键词:IGBT;驱动与保护;IXDN404 ...…

查看全部问答>

找Win ce4.2下的可编辑的Word应用软件?

我的wince下只有word viewer,不能编辑word文档,那位有CE下可编辑word的软件共享,谢谢。…

查看全部问答>

请教一个有关EVC开发程序在PDA上运行的问题。

在EVC中做好的小程序,把它复制然后粘贴到wince开发平台上,不可以运行呀?在虚拟模拟器上是可以运行的。…

查看全部问答>

我的智能家居系统通信想法

我看见论坛最近好像在讨论智能家居系统,手机模块 电力通信都用到了,内部我觉得用电力载波通信还是蛮可以的,不用在布线,但是在对外部通讯我的想法呢是用电脑,起码手机模块费用高,功能单一。而现在淘汰的电脑才几百元,运算处理能力那是足够强 ...…

查看全部问答>

求助!ucos ii按键中断之后 退不出来了

程序可以进入中断但是在中断程序中一直执行打印语句,不能跳出中断,在中断中我已将srcpnd和intpnd写1清除,我怀疑是    ; Setup IRQ handler ldr r0,=HandleIRQ       ;This routine is ...…

查看全部问答>

电子精英 或者有经验的新手请进

本帖最后由 paulhyde 于 2014-9-15 09:08 编辑 RS 232模块   CAN模块   怎么做   请赐教   不胜感激  …

查看全部问答>

通过FPGA控制两组16位数据的切换输出

两组16位的数据,当其中一组发生变化时,输出就发生变化。…

查看全部问答>

NXP LPC1768宝马开发板 第二十九章 宝马1768--TFT4.3电子相框

宝马1768——TFT4.3电子相框实验说明:插彩屏的时候注意对应,因为开发板上多预留了一个5V和GND的引脚。不要插错了。本实验是通过读取板上SD卡里面的BMP图片文件,并依次显示在4.3寸屏上。硬件说明:本实验主要涉及的硬件4.3彩屏,SD卡是插在开发板 ...…

查看全部问答>