OpenEdv-开源电子网

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

键盘无返回值。。。

[复制链接]

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-11-9
在线时间
0 小时
发表于 2015-2-6 11:09:25 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#include "MatrixKey.h" #include"sys.h" #include"delay.h" void MatrixKey_Init(void) //矩阵键盘I/O初始化 { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); GPIO_InitStructure.GPIO_Pin=MatrixKey_Line; //I/O 0,1,2,3 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(MatrixKey_GPIO,&GPIO_InitStructure);//初始化GPIOB 0,1,2,3 GPIO_SetBits(GPIOA, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3); //使GPIOB 0,1,2,3 全部高电平 GPIO_InitStructure.GPIO_Pin=MatrixKey_Row; //I/O 4,5,6,7 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//上拉输入 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(MatrixKey_GPIO,&GPIO_InitStructure);//初始化GPIOB 4,5,6,7 GPIO_ResetBits(GPIOA,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); //使GPIOB 4,5,6,7 全部低叩缙? //GPIO_ResetBits(GPIOB,GPIO_Pin_4) ; } u16 MatrixKey_scan(void) { u16 KeyValue=0; if ((GPIO_ReadInputData(MatrixKey_GPIO)&0xff!=0x0f)) { delay_ms(10); if ((GPIO_ReadInputData(MatrixKey_GPIO)&0xff!=0x0f)) { GPIO_SetBits(MatrixKey_GPIO, GPIO_Pin_0); GPIO_ResetBits(MatrixKey_GPIO,GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3); switch(GPIO_ReadInputData(MatrixKey_GPIO)&0xff) { case 0x11:KeyValue=0;break; case 0x21:KeyValue=4;break; case 0x41:KeyValue=8;break; case 0x81:KeyValue=12;break; } GPIO_SetBits(MatrixKey_GPIO, GPIO_Pin_1); GPIO_ResetBits(MatrixKey_GPIO,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3); switch(GPIO_ReadInputData(MatrixKey_GPIO)&0xff) { case 0x12:KeyValue=1;break; case 0x22:KeyValue=5;break; case 0x42:KeyValue=9;break; case 0x82:KeyValue=13;break; } GPIO_SetBits(MatrixKey_GPIO, GPIO_Pin_2); GPIO_ResetBits(MatrixKey_GPIO,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_3); switch(GPIO_ReadInputData(MatrixKey_GPIO)&0xff) { case 0x14:KeyValue=2;break; case 0x24:KeyValue=6;break; case 0x44:KeyValue=10;break; case 0x84:KeyValue=14;break; } GPIO_SetBits(MatrixKey_GPIO, GPIO_Pin_3); GPIO_ResetBits(MatrixKey_GPIO,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2); switch(GPIO_ReadInputData(MatrixKey_GPIO)&0xff) { case 0x18:KeyValue=3;break; case 0x28:KeyValue=7;break; case 0x48:KeyValue=11;break; case 0x88:KeyValue=15;break; } GPIO_SetBits(MatrixKey_GPIO, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3); GPIO_ResetBits(MatrixKey_GPIO,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); while((GPIO_ReadInputData(MatrixKey_GPIO))&0xff!=0x0f); return KeyValue; } } return 0; } [/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true] [/mw_shl_code] [mw_shl_code=c,true].h文件:[/mw_shl_code] [mw_shl_code=c,true]#ifndef _MatrixKey_H #define  _MatrixKey_H #include "sys.h"  #define Interrupt_Scan  #define DELAY_COUNT 0x0ffff #define MatrixKey_GPIO GPIOA #define MatrixKey_Line_1 GPIO_Pin_0 #define MatrixKey_Line_2 GPIO_Pin_1 #define MatrixKey_Line_3 GPIO_Pin_2 #define MatrixKey_Line_4 GPIO_Pin_3 #define MatrixKey_Row_1 GPIO_Pin_4 #define MatrixKey_Row_2 GPIO_Pin_5 #define MatrixKey_Row_3 GPIO_Pin_6 #define MatrixKey_Row_4 GPIO_Pin_7 #define MatrixKey_Line (MatrixKey_Line_1|MatrixKey_Line_2|MatrixKey_Line_3|MatrixKey_Line_4) #define MatrixKey_Row (MatrixKey_Row_1|MatrixKey_Row_2|MatrixKey_Row_3|MatrixKey_Row_4) #define MatrixKey_Exti_Row_1 EXTI_Line4 #define MatrixKey_Exti_Row_2 EXTI_Line5 #define MatrixKey_Exti_Row_3 EXTI_Line6 #define MatrixKey_Exti_Row_4 EXTI_Line7 #define MatrixKey_Exti_Row_all (MatrixKey_Exti_Row_1|MatrixKey_Exti_Row_2|MatrixKey_Exti_Row_3|MatrixKey_Exti_Row_4)   #define MatrixKey_Source_GPIO GPIO_PortSourceGPIOB #define MatrixKey_Source_PIN_1 GPIO_PinSource4 #define MatrixKey_Source_PIN_2 GPIO_PinSource5 #define MatrixKey_Source_PIN_3 GPIO_PinSource6 #define MatrixKey_Source_PIN_4 GPIO_PinSource7 #endif void MatrixKey_Init(void); u16 MatrixKey_scan(void); [/mw_shl_code]
  为什么键盘无返回值啊,,帮看一下。。。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-11-9
在线时间
0 小时
 楼主| 发表于 2015-2-6 11:11:07 | 显示全部楼层
在main函数调用MatrixKey_scan(); 接收不到值啊,是为什么。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-2-6 23:39:34 | 显示全部楼层
帮顶....
回复

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2013-11-9
在线时间
0 小时
 楼主| 发表于 2015-2-7 09:36:15 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
谢谢原子哥
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 03:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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