开发过程中,为了节省成本,常常会采用按键和LED复用,从而达到节省IO口的目的。很多刚刚碰到这种情况的工程师,可能会不知道如何处理,PS:大神请自动略过。下面来给大家讲讲按键和LED复用IO口时,程序该如何处理吧。(这里采用状态机编程的方法,来实现按键和LED复用扫描功能)。
一、 按键和LED复用原理图如下:
LEDC是LED灯的COM控制端,LED1_K1和LED2_K2是按键和LED的复用IO口。扫描过程如下:
1、上电初始化时,先将LEDC、LED1_K1和LED2_K2设置为推挽输出高;
2、首先扫描LED1和LED2,LEDC输出高,LED1_K1根据系统标志判断,LED1需要亮,就输出低,LED1不需要亮,就输出高,LED2和LED1处理一样。
3、LED1和LED2扫描完成以后,LEDC输出低,LED1和LED2输出高,将LED1_K1和LED2_K2的IO口切换为输入状态,并且用一个变量备份一下LED1和LED2的输出电平状态,以便按键扫描完成后,恢复LED1和LED2的亮灭状态。
4、进入按键扫描状态,读取LED1_K1和LED2_K2引脚的电平状态,读取IO口电平完成以后,立即将LED1_K1和LED2_K2切换为推挽输出低模式,并且恢复步骤3中备份的LED1_K1和LED