游戏人间 发表于 2021-1-16 23:26:59

单片机的一个io 纪要做输出控制io 又要做输入检测复位键

各位大佬LED1网络做输出io我知道,可是怎么检测复位有按键按下?我这边单独给led1上拉示波器测试是2.1v   按键按下检测也就是1.7v我的程序完全没有反应

sayno_186 发表于 2021-1-16 23:50:20

本帖最后由 sayno_186 于 2021-1-16 23:56 编辑

编辑原因:上传图片

IO 进行 切换扫描就行了。
按键需要接到IO口,LED要改成低电平亮。

IO = 1;//IO输入
if(IO == 0)//判断IO是否被拉低(按键按下)
{
   //消抖 计数
   //确定IO按下,执行相应动作
}
IO = 0;//IO直接输出

Elex 发表于 2021-1-16 23:50:38

三个电阻都改成1K,正常时把三个IO都强输出做LED的控制逻辑,定时把三个IO都设成成内部上拉的输入端口,LED1端检测按键状态,采样了状态再马上把三个IO当做LED控制。如果只是检测有没有按键按下,10毫秒检测一次都是可以的,如果要检测连击之类的可以检测间隔短一些。

游戏人间 发表于 2021-1-17 00:09:59

Elex 发表于 2021-1-16 23:50
三个电阻都改成1K,正常时把三个IO都强输出做LED的控制逻辑,定时把三个IO都设成成内部上拉的输入端口,LED ...

这个电路图是成品可以使用的

游戏人间 发表于 2021-1-17 00:11:18

sayno_186 发表于 2021-1-16 23:50
编辑原因:上传图片

IO 进行 切换扫描就行了。


这个电路图是已经量产的东西三个引脚控制四个led灯和检测一个复位键

游戏人间 发表于 2021-1-17 00:21:32

Elex 发表于 2021-1-16 23:50
三个电阻都改成1K,正常时把三个IO都强输出做LED的控制逻辑,定时把三个IO都设成成内部上拉的输入端口,LED ...

谢谢   我调试的时候就设置了一个io为上拉后面没注意了一直出不来

Landmark 发表于 2021-1-17 06:11:24

扫描按键时应该把三个都设置为输入,led1只开上拉,其余两个不开。
    不过r17为10实在太大了,改为2至3k合适。或者读按键时用ad检测的的方式去读也行。因为你说的1.7V是达不到数字信号的低电平的要求的。

小李非刀 发表于 2021-1-21 15:05:30

R17用3K,读按键时,LED1设置准双向口输出高电平,LED2、LED3设置为高阻,延时1~5us,读LED1就可以读到按键。
显示时,LED1、LED2、LED3设置为推挽输出。

rqiang 发表于 2021-1-21 17:54:37

本帖最后由 rqiang 于 2021-1-21 17:57 编辑

分时扫描:
前1-4驱动LED,5检测KEY
1,LED1输出高,LED2输出低,LED3输入
2,LED2输出高,LED1输出低,LED3输入
3,LED2输出高,LED3输出低,LED1输入
4,LED3输出高,LED2输出低,LED1输入
5,LED2输入,LED3输入,LED1输入(内部上拉),即可检测KEY

游戏人间 发表于 2021-1-31 21:34:08

rqiang 发表于 2021-1-21 17:54
分时扫描:
前1-4驱动LED,5检测KEY
1,LED1输出高,LED2输出低,LED3输入


太热心了非常感谢你

游戏人间 发表于 2021-1-31 21:34:32

小李非刀 发表于 2021-1-21 15:05
R17用3K,读按键时,LED1设置准双向口输出高电平,LED2、LED3设置为高阻,延时1~5us,读LED1就可以读到按键 ...

谢谢你
页: [1]
查看完整版本: 单片机的一个io 纪要做输出控制io 又要做输入检测复位键