两个I/O口可以实现五个按键吗?请大家帮忙!

2020-02-08 09:06发布

PIC16F716(13个I/O)由于资源有限,步进电机用了四个I/O,1602液晶用了七个I/0,现只剩两个I/O可以用了,不知道能不能实现五个按键?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
97条回答
bjj9217
1楼-- · 2020-02-10 12:50
 精彩回答 2  元偷偷看……
cowboy
2楼-- · 2020-02-10 13:34
三菱键盘扫描方法:

其实【13楼】 h2feo4 无机酸  的两个贴子中已经对各种键盘的扫描方式作了很详尽,很深入的介绍,这里再简单地重复一下。

以51单片机准双向口的IO为例,采用定时中断对两口线分三次扫描,扫描结果记录于静态变量Key_state中。对照下图,对于按下K1~K6,Key_state可以分别得到不同的值:0x06,0x09,0x00,0x0e,0x0d,0x0c

主程序中只要根据Key_state的值,并加以消抖,即可进行判断并执行相应的动作。



void Key_scan() interrupt 1         //定时器T0中断函数

{

    TH0 = 0xd9;                     //重装定时器,10ms@12MHz OSC

    TL0 = 0xf0;

    Key_state = 0;                  //初始化按键状态变量

    if (GPIO1) Key_state |= 0x08;   //检测两口线状态,并记录

    if (GPIO2) Key_state |= 0x04;

    GPIO1 = 0;                      //将口线1置0

    _nop();

    _nop();                         //等待口线2状态稳定

    if (GPIO2) Key_state |= 0x02;   //记录口线2状态

    GPIO1 = 1;                      //恢复口线1为1

    GPIO2 = 0;                      //将口线2置0

    _nop();

    _nop();                         //等待口线1状态稳定

    if (GPIO1) Key_state |= 0x01;   //记录口线1状态

    GPIO2 = 1;                      //恢复口线1为1

}    

    



 (原文件名:2io_6key.PNG) 
tkdr2001
3楼-- · 2020-02-10 15:19
作个记号
njnuaya
4楼-- · 2020-02-10 19:14
mark
vv3g
5楼-- · 2020-02-10 21:27
学习
benladn911
6楼-- · 2020-02-11 00:24
 精彩回答 2  元偷偷看……

一周热门 更多>