STM32中反转法矩阵短按键的应用 测试通过
#include\//反转法测矩阵按键
void Delay(__IO uint32_t t); void RCC_Config(void); void GPIO_Config(void); uint32_t Key_Scan(void); void GPIO_RConfig(void); void LED_Config(void);
void Delay_ms(__IO uint32_t time); void Time_Delay(void);
void GPIO_SetBits_Row(void); void GPIO_ResetBits_Row(void); void GPIO_SetBits_Col(void); void GPIO_ResetBits_Col(void);
GPIO_InitTypeDef GPIO_InitStructure; static __IO uint32_t TimingDelay=0;
uint32_t num=0; uint8_t j,i; //PA6 PA7 PB7 PA5 uint8_t key[4][4]={0x01,0x05,0x09,0x0d, //PE15 0x02,0x06,0x0a,0x0e, //PE14 0x03,0x07,0x0b,0x0f, //PE13 0x04,0x08,0x0c,0x10 }; //PE11
struct IO_Port{
GPIO_TypeDef *GPIO_X; unsigned short GPIO_Pin; };
static struct IO_Port key_row[4]={
{GPIOE,GPIO_Pin_15},{GPIOE,GPIO_Pin_14}, {GPIOE,GPIO_Pin_13},{GPIOE,GPIO_Pin_11} };
static struct IO_Port key_col[4]={
{GPIOA,GPIO_Pin_6},{GPIOA,GPIO_Pin_7},
1
{GPIOB,GPIO_Pin_7},{GPIOA,GPIO_Pin_5} };
int main(void) {
uint32_t key=0; RCC_Config(); LED_Config();
SysTick_Config(72000);
while(1) { key=Key_Scan(); switch(key) { case 0x01:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x02:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x03:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x04:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x05:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break;
2
case 0x06:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x07:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x08:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x09:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x0a:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x0b:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x0c:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x0d:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x0e:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)));
3
break; case 0x0f:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; case 0x10:
GPIO_WriteBit(GPIOB,GPIO_Pin_5,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))); break; default: break; }
} }
void GPIO_SetBits_Row(void) {
uint8_t i;
for(i=0;i<4;i++) { GPIO_SetBits(key_row[i].GPIO_X,key_row[i].GPIO_Pin); } }
void GPIO_ResetBits_Row(void) {
uint8_t i;
for(i=0;i<4;i++) { GPIO_ResetBits(key_row[i].GPIO_X,key_row[i].GPIO_Pin); } }
void GPIO_SetBits_Col(void) {
uint8_t i;
4
for(i=0;i<4;i++) { GPIO_SetBits(key_col[i].GPIO_X,key_col[i].GPIO_Pin); } }
void GPIO_ResetBits_Col(void) {
uint8_t i; for(i=0;i<4;i++) { GPIO_ResetBits(key_col[i].GPIO_X,key_col[i].GPIO_Pin); } }
//反转法按键 先让行输出低电平 列输出高电平 然后读列的状态 如果为低电平
//反转按键 即列输出低电平 行输出高电平 依次检测行的输出 如果为低电平 则相应按键按下
uint32_t Key_Scan(void) {
num=0; GPIO_Config(); GPIO_ResetBits_Row(); GPIO_SetBits_Col(); for(i=0;i<4;i++) { if(GPIO_ReadInputDataBit(key_col[i].GPIO_X,key_col[i].GPIO_Pin)==0) { Delay(90000); if(GPIO_ReadInputDataBit(key_col[i].GPIO_X,key_col[i].GPIO_Pin)==0); GPIO_RConfig(); GPIO_ResetBits_Col(); GPIO_SetBits_Row(); for(j=0;j<4;j++) { if(GPIO_ReadInputDataBit(key_row[j].GPIO_X,key_row[j].GPIO_Pin)==0) {
while(GPIO_ReadInputDataBit(key_row[j].GPIO_X,key_row[j].GPIO_Pin)==0);
5
…… 此处隐藏:1248字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [基础教育]2016-2022年中国钢芯铝绞线市场现状调
- [基础教育]语文部编版初一语文下册练习题 句式变
- [基础教育]南京继续教育参考答案--深入学习贯彻习
- [基础教育]国旗下讲话稿——珍惜时间好读书
- [基础教育]北师大版六年级数学下册圆锥的体积教学
- [基础教育]人教版-音乐-四年级下册-四年级下册音
- [基础教育]乔布斯2019年斯坦福大学毕业典礼致辞.d
- [基础教育]2015年加油站安全知识竞赛试题及答案
- [基础教育]2020年教师年度考核个人工作总结
- [基础教育]2019年中考历史试题-2019年大庆市初中
- [基础教育]初三仁爱英语第一轮总复习教案
- [基础教育]SG-A094电气配管安装工程隐蔽验收记录
- [基础教育]冀教版小学数学三年级下册第六单元教材
- [基础教育]青岛版(五制)小学科学二年级下册16《制
- [基础教育]2018-2019年初中科学初一中考真卷测试
- [基础教育]幼儿园大班期末简短评语精选
- [基础教育]2018云南临沧公务员考试申论技巧:这样
- [基础教育]学校食堂经营管理方案
- [基础教育]新中国砥砺奋进的七十年原文
- [基础教育]真空泵的选型及常用计算公式
- 高职田径课程教学现状与对策
- 全髋关节置换术在老年股骨颈骨折患者中
- 青人社厅函〔2016〕576号(附件)工资
- cp101-07砂子检验作业指导书 - secret
- 微观经济学 第八章 博弈论 习题
- 2014高考真题(词语运用)汇编及答案
- 2018年人教版七年级语文下册《第三单元
- 苏教版数学四年级上册第一单元试题 - M
- 四川大学新闻与传播考研2000-2010年真
- 浙江万里学院英语专业四年制本科教学计
- 最新2018马年事业祝福语-范文word版(2
- 最全模具行业术语英文翻译
- 皮亚杰的发展心理学理论
- 64篇高考情景式默写 练习题及答案
- 仿写(学生稿)
- 《SQL Server数据库技术》试卷A
- 第七章作业答案
- 江苏省赣榆县海头高级中学高中语文必修
- 浙江省2001年10月自考正常人体解剖学答
- 2012英语重点短语




