历史上的今天
返回首页

历史上的今天

今天是:2026年01月30日(星期五)

正在发生

2023年01月30日 | (3)换种方式学基础元器件之按键控制LED灯

2023-01-30 来源:zhihu

动图封面

代码:

void setup(){
  pinMode(2, OUTPUT);
  pinMode(1,INPUT);}void loop(){
  if(digitalRead(1))
  {
  	  digitalWrite(2, LOW);
  }
  else
  {
  	  digitalWrite(2, HIGH);
  }
  delay(10); // Wait for 10 millisecond(s)}

按 键

按键是我们用的非常多的一种输入设备,是单片机获取外部信号的一种重要方式,按键在实际电路中的变种也非常多,不管它怎么变,只要符合按键信号的要求,我们基本上都可以按照按键的方式来处理,大同小异。

轻触开关实物

机械尺寸

内部电路原理

这种开关也叫轻触开关,是电子产品中用途非常广泛,同时也是我们学习单片机、嵌入式过程中经常接触的开关。

我们平时用开关感觉这个玩意要么是关,要么是开,就这两个动作,但是真实的开关按下和弹回的过程中是这样的

理想波形和实际波形

接下来我们来实现按键控制LED灯亮灭实验:

实验材料:6*6轻触按键、5mm红色LED灯、电阻(270Ω)、可调电源

动图封面

实验结果:当轻触按键按下去LED灯就亮了,松开轻触按键LED灯就熄灭

思考??:我们能不能通过MCU接受轻触按键信号来实现对LED灯的控制呢?用按键实现LED灯的亮灭翻转,即使松开按键,LED灯也能亮?答案是肯定可以的,我们一起来实现下

实验原理图如下:

包含的器件有:6*6轻触按键一个,5mm红色LED灯一个,1/4W/270Ω直插电阻一个,1/4W/10K直插电阻一个,arduino uno开发板一块,Type USB线一根,连接导线若干

按键控制LED灯原理图

前面我们学会了如何控制LED灯亮灭,这里就不赘述了,我们接下来学习如何通过单片机即arduino来检测按键,在此之前我们先来了解一点点单片机知识。

高阻态(high-impedance state):arduino引脚默认就是高阻态,这个字面意思也好理解,就是电阻很大,一般都是MΩ级别的,所以这种状态下很不稳定,任何一个干扰信号都会造成误触发,这也是我为什么在原理图中接了个下拉电阻的原因

上拉(pullup):在单片机引脚和电源之间接个电阻,一般选择10K

上拉电阻

下拉(pulldown):在单片机引脚和地之间接个电阻,一般选择10K~47K都可以

下拉电阻

我这里使用的是默认的方式,所以我接了个下拉电阻,这样单片机在按键没有按下时输入引脚1就是低电平,当按键按下时就接到电源就是高电平,下面这段代码的意思就是当检测到引脚1为低电平时,把LED灯引脚设置为高电平,LED灯不亮; 当检测到引脚1为高电平时,把LED灯引脚设置为低电平,LED灯点亮。

void loop(){
  if(digitalRead(1))               // 如果输入引脚1为高电平时  {
  	  digitalWrite(2, LOW);    // LED灯亮 
  }
  else                             // 否则输入引脚为低电平  {
  	  digitalWrite(2, HIGH);   // LED灯灭  }
  delay(10); // Wait for 10 millisecond(s)  // 以10ms的周期检测按键}

实验现象:

动图封面

为了更直观地看到效果,我们添加两个电压表,分别测量引脚1和引脚2的电压,这样我们能更直观地看到LED灯和按键的电压变化效果。

动图封面

在上面例子中我们发现按键松了手之后LED灯立马熄灭,那么可不可以在电路不改的前提下按下按键让LED灯一直保持亮,再按下就保持熄灭了呢?聪明的先辈早就给我们想到了,我们下面来尝试着改下程序

代码如下:

代码原理:首先检测按键是否有按下,如果有按下先延时20ms消除下抖动,再检测有没有按下,如果有按下就对LED灯的状态进行翻转,digitalWrite(2,!digitalRead(2));,翻转的原理是读取当前引脚2的状态,然后将其取反操作

void setup(){
  pinMode(2, OUTPUT);
  pinMode(1,INPUT);}void loop(){
  if(1==digitalRead(1))
  {
    delay(20);
  	if(1==digitalRead(1))
    {
     	digitalWrite(2, !digitalRead(2)); 
    }
  }
  delay(10); // Wait for 10 millisecond(s)}

按键效果:

动图封面

上面实验中我们基本实现按键控制LED灯的状态保持,细心地朋友可能会发现,控制的很不溜,大家可以开动脑筋进一步优化代码,来达到你想要的效果,比如说状态机处理方式。


总结:

1、按键是我们生活中用的非常多的一种人机交互设备,按键手感的好坏会直接影响到体验效果

2、通过按键其实我们可以进一步引申出按键的变种,原理都是一样的,只是用途不一样罢了

自锁开关

微动开关

行程开关

3、进一步的,如果我们一个电路模块输出的信号也是这种高低按键电平信号,同样可以当做按键处理

热式红外感应模块

光电开关

电磁感应开关

4、同样的电路,代码不一样,就能实现不同的效果,这也是编程的乐趣所在,后面随着我们基础知识的积累,我们会进一步发现编程的乐趣


推荐阅读

史海拾趣

ABL Heatsink公司的发展小趣事

ABL Heatsink公司在发展过程中,积极寻求与其他企业的合作。通过与芯片制造商、电子设备生产商等建立紧密的合作关系,ABL Heatsink成功将自己的散热器产品集成到各种高端电子设备中。这种合作模式不仅提升了公司的知名度,也带来了稳定的订单和收入。

Elekon Industries公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,Elekon意识到只有不断创新才能保持竞争力。因此,公司加大了研发投入,致力于技术创新和产品升级。经过多年的努力,Elekon成功开发出一系列具有自主知识产权的电子产品,包括高性能的集成电路、智能传感器等。这些新产品的推出不仅丰富了Elekon的产品线,也提升了公司的市场竞争力。

Calmos Systems Inc公司的发展小趣事

随着国内市场的饱和,Calmos Systems Inc公司开始将目光投向国际市场。公司制定了详细的国际化战略,包括市场调研、产品定位、销售渠道建设等方面。公司派遣专业团队前往海外市场进行考察和交流,了解当地市场需求和文化特点。同时,公司还积极寻求与国际知名企业的合作机会,共同开拓国际市场。在国际化战略的推动下,公司的业务范围不断扩大,国际市场份额逐年提升。

Electrocube Inc公司的发展小趣事

在稳固国内市场的同时,Electrocube Inc公司积极开拓国际市场。公司参加了多个国际电子展会,与全球知名电子企业建立了广泛的合作关系。通过不断的市场拓展,Electrocube Inc公司的产品已经远销欧美、亚洲等多个国家和地区,实现了跨越式的发展。

Data Delay Devices公司的发展小趣事

企业文化是企业的灵魂和核心竞争力之一。DDD公司一直注重企业文化的建设和发展。公司倡导“创新、协作、务实、进取”的企业精神,鼓励员工勇于创新、敢于担当、追求卓越。同时,DDD公司还注重员工培训和福利待遇的改善,为员工提供了广阔的发展空间和良好的工作环境。这种积极向上的企业文化氛围使得DDD公司成为了一个充满活力和凝聚力的团队。

EMC [ELAN Microelectronics Corp]公司的发展小趣事

作为一家有社会责任感的企业,义隆电子一直积极履行社会责任,致力于可持续发展。公司注重环境保护和资源节约,采用环保材料和节能技术生产产品。同时,公司还积极参与公益事业和社会活动,回馈社会。这种注重社会责任和可持续发展的企业文化使得义隆电子在行业内树立了良好的形象。

以上五个故事简要概述了义隆电子股份有限公司(Elan Microelectronics Corp.)在不同发展阶段的关键事件和成就。这些故事展示了义隆电子在技术创新、市场拓展、人才培养和社会责任等方面的努力和成就。

问答坊 | AI 解惑

用Nokia 3310 液晶自制温度计

想像一下,如果有这么一个“裸体”温度计,就放在自己家里的书柜上,等朋友来了,一定会吸引不少眼光,你也可以借机炫耀一番。 不过放在家里的话,有可能曝光率不够高,那我们就随身携带好了,就像劳力士一样,经常“不经意”的掏出来看看:P ...…

查看全部问答>

大家一起晒晒示波器的美图吧~~~~

做个东西,就要做的精美,没有外表怎么成? 咱们可以晒晒示波器的美图,供坛子里做示波器的筒子们学学。 先抛个砖: …

查看全部问答>

FPGA 项目选题-----抛个砖头

1. 基于FPGA的SPWM调制的实现; 2. 基于FPGA的DDS信号发生器的简单实现…

查看全部问答>

怎样设置ivt bluesoleil蓝牙局域网?

网线做的局域网我是能设的,但是想用蓝牙做,怎么设都不行,请教啦,…

查看全部问答>

硬盘的内部逻辑结构

   大家好,我最近在学习硬盘的逻辑结构时遇到了很大的麻烦。由于我从Google和百度上搜的资料太零散,太浅,学习不系统,导致对这方面的知识理解混乱。于是我想求助在这方面擅长的朋友,能否提供一些系统的资料,先行谢过了。…

查看全部问答>

wince只实现PPPoE拨号的问题

我已经加了Dial Up Networking (RAS/PPP) 的支持,wince可以建立PPPoE拨号了,但是每次拨号时候都提示“PPPoE访问集中器无响应”。 请问是怎么回事情?要怎么样才能拨号,麻烦兄弟们指点一下。 谢谢了。…

查看全部问答>

楼主sunliwen1981(sunliwen1981)能不能发个自己制作mp3随身播放器的资料给我

以前是学自动化的,现在从事与硬件有关的工作,昨天偶尔在网上搜索,才知道自做MP3,不知道现在还晚不晚,楼主您发的那个贴是2003年的,不知道现在能不能发份资料给我,感谢了! 邮箱:muyuzijia@126.com…

查看全部问答>

转让南京万利51仿真器

本人有南京万利51仿真器一台. 8成新(用过一个多月). 欲转让给需要者. 仿真器见以下连接. http://www.manley.com.cn/chinese/ice/se52hu.htm 联系: littleliu97@sohu.com…

查看全部问答>

STM32用到的TFT屏幕资料及例程.欢迎补充

既然有人需要TFT屏 资料.放假在家也没什么事.整理一下自己手头有的吧.做个抛砖引玉.希望大家能吧自己方便分享的资料都上传上传~…

查看全部问答>