首页 > 管理 > 问答 > 管理知识 > 5个io怎么控制8个led和8个按键,手机APP无线控制

5个io怎么控制8个led和8个按键,手机APP无线控制

来源:整理 时间:2022-04-28 21:01:59 编辑:管理知识 手机版

通过3个GPIO就扩展出了24个按键输入检测。使用AD按键时有个需要注意的地方就是,按键尽量选择好些的。当然为了抗干扰强,最好等分的数要少,8位的话等分最好不要超过8个按键,否则抗干扰不是很好,如果是8个按键的话每个按键的ADC差值为32,按键间的ADC差值越大,越有利于抗干扰。

如何用最少的IO驱动更多的按键?

如何用最少的IO驱动更多的按键

按键是一个比较典型常用的输入器件,单片机可以检测按键的状态从而执行相应的命令,所以题目的合适含义应该是,如何用较少的IO口检测更多的按键输入。由于单片机的GPIO口是有限的,要实现更多的按键检测只能通过扩展IO来实现,今天给大家分享的就是通过使用74HC165来实现GPIO口的扩展,可以实现更多按键的输入检测。

74HC165是并入传出的移位寄存器,单片74HC165具有8个输入三个输出,所以通过单片机的三个GPIO口就可以实现8个按键的输入检测,更重要的是该芯片可以级联,通过3个GPIO可以检测更多的按键输入。以三片级联为例,介绍其使用方法,其典型的电路图如下所示。通过图片可以看出,扩展芯片的第1,2,9三个脚接单片机,通过第10脚和下一片的9脚实现级联。

通过3个GPIO就扩展出了24个按键输入检测。其程序如下图所示。该芯片与74HC595的作用正好相反,74HC是串入并出,可以用来驱动数码管等器件。74HC165的程序与74HC595存在一定的相似之处。在编写程序时,要注意查看芯片的时序图,要在时钟的边沿状态读取数据。关于更多细节内容大家可以留言讨论。

单片机用一个IO口采集多个按键信号,如何实现?

单片机用一个IO口采集多个按键信号,如何实现

在设计中如果用到IO口不够用,我们肯定第一时间想到的就是通过电阻分压,根据按下不同按键,来让不同阻值的电阻接到分压电路中,然后ADC模块做电压数据读取分析对应按键按下。下文就和大家分享下单片机设计AD按键的内容。AD按键设计硬件部分电路有两种电路形式,一种的电阻串联,您一种是电阻并联,这两种都是通过电阻分压的原理实现的,下面通过电路图一一介绍。

电阻并联型AD按键上图有10个按键,不同按键按下,分到的电压值不同,电阻值我已经计算好了,有部分误差,但已经是算成最小误差值了,以后大家可直接使用。对应的分压依次值有0.1Vref、0.2Vref ~ 0.9Vref、0.99Vref,共10个档位。单片机ADC通过读取电路中ADCIN处的电压识别对应按键按下。

上图电阻并联型AD按键电路有一个缺点就是如果有两个按键同时按下,会有错误识别的可能出现,扛干扰差,所以并联型AD按键电路很少使用。电阻串联型AD按键上图中有10个按键,对应电阻值按照ADCIN处的电压分别为Vref的x/10(x=1,2,3...9,10)倍算好,使用的电阻值也已经按照最小误差定的,可直接使用。

不同按键按下,ADCIN处的电压不同,单片机ADC模块读出ADC值,从而识别对应哪个按键按下。上图中电阻使用串联的方式接在电路中,这样也就有一个电阻坏,就会影响到其他按键检测的问题。如果两个按键按下,只会识别一个靠近图中ADCIN处的按键,这样不会有像并联型AD按键电路哪有识别有误的问题存在,但是这里电阻的误差不好控制,所以我对上面电路做了改进。

如下图:这个电路的好处就是这里将串联的电阻设计成等值的形式,这样在生产时也不必买更多阻值的电阻了。具体怎么分压的相信大家一看就懂。这里只是巧妙的应用了一个1M的电阻,一个电阻和大于它很多倍(一般理解为10倍以上)的电阻并联,并联后的阻值依然可以理解为和这个电阻值相等。同样的可以将电阻并联型AD按键电路改成等阻值的,这里就不在做出解答,有兴趣的朋友可以发挥下自己的脑力看看怎么设计。

使用AD按键时有个需要注意的地方就是,按键尽量选择好些的。因为按键本身按下也是有阻值的,特别是用了久的按键,其按键接触点容易氧化,造成按键按下,有一定的按键阻值接在电路中。从而影响程序的识别,特别是我国南方较潮湿的地区,差一定的按键触电特别容易生锈氧化。所以AD按键也就存在了比单独通过读IO电平识别的按键短的寿命短的问题。

所以这种按键也不是很推荐使用的。特别是按键数量越多,出现问题的数量也就越多。AD按键程序设计在程序设计前,首先要明白AD按键设计的原理和程序设计的思路。如果一个8位的ADC模块,要设计成10个按键,就是将8位ADC满值255等分成10份,没份之间有大约25个差值,比如一个按键按下的ADC值在25±11的位置,那么它临近的按键就是50±11的位置。

对应的识别这些值,就可以识别那个按键按下了。当然为了抗干扰强,最好等分的数要少,8位的话等分最好不要超过8个按键,否则抗干扰不是很好,如果是8个按键的话每个按键的ADC差值为32,按键间的ADC差值越大,越有利于抗干扰。AD按键程序思路:每隔10ms(这个时间是按键抖动的滤波时间)读一次ADC按键值,根据值的范围,将对应的按键数值加到AD按键FIFO中(这里缓冲区8个字节长),如果AD按键FIFO满了,如果FIFO前4个值是0(对应按键没按下),最后2个值是相等的(对应按键按下),中间的2个值对应按键抖动时的值,不用管,相当于有20ms的抖动滤波时间,那么就人为最后这两个相等的值的对应按键按下了。

单片机一个IO口如何控制两颗发光二极管(LED)?

单片机一个IO口如何控制两颗发光二极管(LED)

单片机的一个GPIO只能输出0和1两种状态,如果控制一个LED灯的话,可以实现LED的亮灭控制。两个LED具有四个状态:1)同时亮;2)同时灭;3)一个亮一个灭;4)一个灭一个亮。如果用一个GPIO的话,无法输出四种状态,所以要分情况讨论。1.两只LED同时亮/灭的情况这种情况其实是把两个LED看作是同一个,两个LED具有同样的状态,即两个LED同时点亮或者同时熄灭。

如果是这种情况可以考虑如下的电路设计:两只LED并联,单片机以灌电流的方式驱动。这样可以降低单片机的输出功耗。单片机的GPIO输出高电平1时,两个LED同时熄灭;单片机的GPIO输出低电平时,两个LED同时点亮。也可以考虑两只LED串联的情况,但是需要考虑LED自身的压降。对于具体的实施电路,可以考虑采用三极管或者MOS作为驱动。

2.两只LED不同是亮/灭的情况这时需要考虑将两只LED同向串联,将单片机的GPIO口接在两只LED的公共端。其典型的示意电路图如下图所示。两只LED同向串联后串在电源电路中,单片机的GPIO控制两个LED的公共端。当单片机输出高电平1时LED1熄灭,而LED2被点亮(拉电流的方式);当单片机输出低电平0时LED1被点亮(灌电流的方式),而LED2熄灭。

文章TAG:ioledAPP控制按键

最近更新