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


使用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)?
单片机的一个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熄灭 。

推荐阅读