OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4129|回复: 7

用Minni板的PA0-7外接矩阵键盘,结果没反应?

[复制链接]

2

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2014-8-2
在线时间
20 小时
发表于 2014-11-26 21:16:38 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#include "keyboard.h" #include "delay.h" #include "usart.h" void KeyBoard_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3); GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); } u8 Read_KeyValue(void) { u8 Key_Value=0; if((GPIO_ReadInputData(GPIOB)&0xff)!=0x0f) { delay_ms(10); if((GPIO_ReadInputData(GPIOB)&0xff)!=0x0f) { GPIO_SetBits(GPIOB,GPIO_Pin_0); GPIO_ResetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3); switch(GPIO_ReadInputData(GPIOB)&0xff) { case 0x11:Key_Value=1;printf("11111\n");break; case 0x21:Key_Value=2;printf("22222\n");break; case 0x41:Key_Value=3;printf("33333\n");break; case 0x81:Key_Value=4;printf("******\n");break; } GPIO_SetBits(GPIOB,GPIO_Pin_1); GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3); switch(GPIO_ReadInputData(GPIOB)&0xff) { case 0x12:Key_Value=5;printf("44444\n");break; case 0x22:Key_Value=6;printf("55555\n");break; case 0x42:Key_Value=7;printf("66666\n");break; case 0x82:Key_Value=8;printf("bbbbb\n");break; } GPIO_SetBits(GPIOB,GPIO_Pin_2); GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3); switch(GPIO_ReadInputData(GPIOB)&0xff) { case 0x14:Key_Value=9;printf("77777\n");break; case 0x24:Key_Value=10;printf("88888\n");break; case 0x44:Key_Value=11;printf("999999\n");break; case 0x84:Key_Value=12;printf("cccccc\n");break; } GPIO_SetBits(GPIOB,GPIO_Pin_3); GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2); switch(GPIO_ReadInputData(GPIOB)&0xff) { case 0x18:Key_Value=13;printf("*****\n");break; case 0x28:Key_Value=14;printf("00000\n");break; case 0x48:Key_Value=15;printf("#####\n");break; case 0x88:Key_Value=16;printf("dddddd\n");break; } while((GPIO_ReadInputData(GPIOB)&0xff)!=0x0f); GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3); GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); return Key_Value; } } return 0; } #include "stm32f10x.h" #include "delay.h" #include "keyboard.h" #include "sys.h" #include "usart.h" void Delay(u32 count) { u32 i=0; for(;i<count;i++); } u8 temp = 0; int main(void) { delay_init(); NVIC_Configuration(); uart_init(9600); KeyBoard_Init(); while(1) { //printf("OK\n"); temp=Read_KeyValue(); if(temp) { temp = 0; printf("123344"); } } } [/mw_shl_code]
程序的思路是,按下不同的按键,串口会打印不同的数据。

最佳答案

查看完整内容[请看2#楼]

PB3,PB4的使用,必须先禁止JTAG。 否则无法当普通IO使用
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-26 21:16:39 | 显示全部楼层
PB3,PB4的使用,必须先禁止JTAG。
否则无法当普通IO使用
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2014-8-2
在线时间
20 小时
 楼主| 发表于 2014-11-26 23:06:40 | 显示全部楼层
谢谢啦!
我还想请教一下,我把PB换成了PA的0-7,程序也是没有按预想的那样发数据,不按按键,它就自动发数据??
回复

使用道具 举报

2

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2014-8-2
在线时间
20 小时
 楼主| 发表于 2014-11-27 08:42:56 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
谢谢啦! 
我还想请教一下,我把PB换成了PA的0-7,程序也是没有按预想的那样发数据,不按按键,它就自动发数据??
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-27 09:44:29 | 显示全部楼层
回复【4楼】雁门关外牧马人:
---------------------------------
先检查电路,看看外部电路是否有干扰。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2014-8-2
在线时间
20 小时
 楼主| 发表于 2014-11-27 10:03:02 | 显示全部楼层
[mw_shl_code=c,true]#include "stm32f10x.h" #include "usart.h" #include "delay.h" #include "sys.h" #include "led.h" void Delay(u32 count) { u32 i=0; for(;i<count;i++); } u8 Key_Value=0; int main() { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3); GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); delay_init(); NVIC_Configuration(); uart_init(9600); LED_Init(); while(1) { if((GPIO_ReadInputData(GPIOB)&0xff)!=0x0f) { delay_ms(10); if((GPIO_ReadInputData(GPIOB)&0xff)!=0x0f) { GPIO_SetBits(GPIOB,GPIO_Pin_0); GPIO_ResetBits(GPIOB,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3); switch(GPIO_ReadInputData(GPIOB)&0xff) { case 0x11:Key_Value=1;printf("11111\n");LED1=~LED1;break; case 0x21:Key_Value=2;printf("22222\n");LED1=~LED1;break; case 0x41:Key_Value=3;printf("33333\n");LED1=~LED1;break; case 0x81:Key_Value=4;printf("aaaaa\n");LED1=~LED1;break; } GPIO_SetBits(GPIOB,GPIO_Pin_1); GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3); switch(GPIO_ReadInputData(GPIOB)&0xff) { case 0x12:Key_Value=5;printf("44444\n");LED1=~LED1;break; case 0x22:Key_Value=6;printf("55555\n");LED1=~LED1;break; case 0x42:Key_Value=7;printf("66666\n");LED1=~LED1;break; case 0x82:Key_Value=8;printf("bbbbb\n");LED1=~LED1;break; } GPIO_SetBits(GPIOB,GPIO_Pin_2); GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3); switch(GPIO_ReadInputData(GPIOB)&0xff) { case 0x14:Key_Value=9;printf("77777\n");break; case 0x24:Key_Value=10;printf("88888\n");LED1=~LED1;break; case 0x44:Key_Value=11;printf("999999\n");LED1=~LED1;break; case 0x84:Key_Value=12;printf("cccccc\n");LED1=~LED1;break; } GPIO_SetBits(GPIOB,GPIO_Pin_3); GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2); switch(GPIO_ReadInputData(GPIOB)&0xff) { case 0x18:Key_Value=13;printf("******\n");LED1=~LED1;break; case 0x28:Key_Value=14;printf("00000\n");LED1=~LED1;break; case 0x48:Key_Value=15;printf("#####\n");LED1=~LED1;break; case 0x88:Key_Value=16;printf("dddddd\n");LED1=~LED1;break; } } } GPIO_SetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3); GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); } return 0; } [/mw_shl_code]
您好!这是禁止了JTAG后的代码,矩阵键盘用的PB0-7,它一开机,就自动发送111114444477777,按别的按键也没有反应?
回复

使用道具 举报

2

主题

7

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
310
金钱
310
注册时间
2014-8-2
在线时间
20 小时
 楼主| 发表于 2014-11-27 10:04:49 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
您好!这是禁止了JTAG后的代码(在5楼),矩阵键盘用的PB0-7,它一开机,就自动发送111114444477777,按别的按键也没有反应?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-27 15:04:38 | 显示全部楼层
回复【7楼】雁门关外牧马人:
---------------------------------
那就要你自己去分析下了。
可以仿真分析。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-28 14:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表