打印

矩阵键盘问题,搞不定

[复制链接]
1988|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一个简单的2*8矩阵键盘如图,折腾了一天没搞定,各位有什么建议。
我是如下配置的:
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);  
  
  //PC0-PC7,地址、通讯
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | \
          GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //上拉输入
  GPIO_Init(GPIOC, &GPIO_InitStructure);

//读出开关组1状态
  
GPIO_SetBits(GPIOC, GPIO_Pin_8);
GPIO_ResetBits(GPIOC, GPIO_Pin_9);
DelayMs(10);
temp= (u8)GPIO_ReadInputData(GPIOC);
//读出开关组2状态
GPIO_ResetBits(GPIOC, GPIO_Pin_8);
GPIO_SetBits(GPIOC, GPIO_Pin_9);
DelayMs(10);

id = (u8)GPIO_ReadInputData(GPIOC) ;

将输入脚全部外部上拉后,只能正确读出一组开关的状态,当另一组开关中的任一个打开后,读出全部为闭合。

ID.jpg (65.67 KB )

ID.jpg
沙发
video_vb|  楼主 | 2010-11-3 10:47 | 只看该作者
没人用过吗?我只是在需要的时候去读一次开关状态。

使用特权

评论回复
板凳
sjnh| | 2010-11-3 13:36 | 只看该作者
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

不能设置成推挽输出,因为如S1的开关1,S2的开关1,都闭合后,不管8/9脚怎么设置,实际是连起来的,只有一个状态,谁的驱动能力强就是那个电平
设置成开路输出

使用特权

评论回复
地板
video_vb|  楼主 | 2010-11-4 11:19 | 只看该作者
发现还是硬件设计有问题,多个开关同时开的时候,不可能正确检测。

要改硬件设计。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

67

帖子

2

粉丝