矩阵键盘问题,搞不定

[复制链接]
2615|3
 楼主| video_vb 发表于 2010-11-2 17:08 | 显示全部楼层 |阅读模式
一个简单的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
 楼主| 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

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部