2022年2022年矩阵键盘 .pdf

上传人:C****o 文档编号:32080300 上传时间:2022-08-08 格式:PDF 页数:8 大小:474.53KB
返回 下载 相关 举报
2022年2022年矩阵键盘 .pdf_第1页
第1页 / 共8页
2022年2022年矩阵键盘 .pdf_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《2022年2022年矩阵键盘 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年矩阵键盘 .pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1 4 4 矩阵键盘1原理说明一般的 4*4 矩阵键盘(如图1)一般要 8 个 I/O 口(如图 1) ,对于按键较多的硬件系统来说是很浪费的I/O 口, 本方案仅采用4 个 I/O 和 4 个普通二极管就可以轻松实现4 4 矩阵键盘, 方案原理与普通4*4 矩阵键盘类似, 下面先分析普通矩阵键盘原理,再进一步改进为本方案。原理如下B4 口为低电平, A1 A4,B1 B3 为高电平,单片机不停的扫描,假若有键按下如 A1 与 B4 交叉处按下则对应的A1 被拉低为低电平,可以定义此键号为1,同理以此类推 B3 口为低电平,其余口为高电平,交叉处按键按下可定义其按键号,将按键号存储在寄存器中,

2、可用查表方法并通过数码管显示按键号。对于下图(图2)用 4 个 I/O 和 4 个普通二极管初始化PA0.0 PA0.3 均为高电平,在这里二极管作用是当IO 口为低电平时可以导通,高电平时截止。程序流程图如下图 1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 2 图 2 2 程序介绍如下void RCC_Configuration(void); RCC_APB2PeriphClockCmd(RCC_APB2Periph_G

3、PIOA|RCC_APB2Periph_AFIO,ENABLE); void GPIO_Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_PP _ OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GP

4、IO_InitStructure); GPIOSetBits() GPIO_SetBits(GPIOA,GPIO_Pin_0); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 3 GPIO_SetBits(GPIOA,GPIO_Pin_1); GPIO_SetBits(GPIOA,GPIO_Pin_2); GPIO_SetBits(GPIOA,GPIO_Pin_3); 单片机不停的扫描程序,(右侧四个键单独来写),由于扫描速度

5、是很快(微妙级)的,所以有足够的时间去显示每个按键的。当( GPIO_Pin_0=0 )时表明有键按下,我们定义为0 号键,当( GPIO_Pin_1=0 )时表明有键按下,我们定义为1 号键,当( GPIO_Pin2=0 ) 时表明有键按下,我们定义为2 号键,当( GPIO_Pin_3=0 )时表明有键按下,我们定义为3 号键,if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)=0) return 0; if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)=0) return 1; if(GPIO_ReadInputDa

6、taBit(GPIOA, GPIO_Pin_2)=0) return 2; if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)=0) return 3; 其余按键方法不同于右侧四个按键,每个I/O 口接一个二极管以保证当有高电平截止,低电平导通,即可得到每个键号。扫描程序分析如下:当( GPIO_Pin_0=0) 时:若(GPIOA, GPIO_Pin_1)=0) 则为 4 键按下,若(GPIOA, GPIO_Pin_2)=0) 则为 5 键按下,若(GPIOA, GPIO_Pin_3)=0) 则为 6 键按下,当 GPIO_Pin_1=0 时:若(GPIO

7、A, GPIO_Pin_0)=0) 则为 7 键按下,若(GPIOA, GPIO_Pin_2)=0) 则为 8 键按下,若(GPIOA, GPIO_Pin_3)=0) 则为 9 键按下,当 GPIO_Pin_2=0 时:若(GPIOA, GPIO_Pin_0)=0) 则为 A(10)键按下,若(GPIOA, GPIO_Pin_1)=0) 则为 B(11)键按下,若(GPIOA, GPIO_Pin_3)=0) 则为 C(12)键按下,当 GPIO_Pin_3=0 时:若(GPIOA, GPIO_Pin_0)=0) 则为 D(13)键按下,若(GPIOA, GPIO_Pin_1)=0) 则为 E(

8、14)键按下,若(GPIOA, GPIO_Pin_2)=0) 则为 F( 15)键按下,if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)=0) if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)=0) return4;if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)=0) return5;if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)=0) return6;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -

9、 - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - 4 if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)=0) if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)=0) return7;if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)=0) return8;if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)=0) return9; if(GPIO_ReadInputData

10、Bit(GPIOA, GPIO_Pin_2)=0) if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)=0) return10;if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)=0) return11;if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)=0) return12; if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)=0) if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)=0) return13;if

11、(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)=0) return14;if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)=0) return15; /* * * file None * author None * version V3.5.0 * date 2012年6月05号* brief Main program body */ /* Includes -*/ #include stm32f10 x.h void RCC_Configuration(void); void GPIO_Configuration(voi

12、d); void GPIOSetBits(void); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - 5 /* Private functions -*/ int main(void) /*! At this stage the microcontroller clock setting is already configured, this is done through SystemInit() function whic

13、h is called from startup file (startup_stm32f10 x_xx.s) before to branch to application main. To reconfigure the default setting of SystemInit() function, refer to system_stm32f10 x.c file */ /* System Clocks Configuration */ RCC_Configuration(); /* GPIO Configuration */ GPIO_Configuration(); GPIOSe

14、tBits(); if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)=0) if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)=0) return 4; if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)=0) return 5; if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)=0) return 6; if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)=0) if(GPIO_ReadInputDataBit(G

15、PIOA, GPIO_Pin_0)=0) return 7; if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)=0) return 8; if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)=0) return 9; if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)=0) if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)=0) return 10; if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)=0) ret

16、urn 11; if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)=0) return 12; if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)=0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - 6 if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)=0) return 13; if(GPIO_ReadInputDa

17、taBit(GPIOA, GPIO_Pin_2)=0) return 14; if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)=0) return 15; while (1) /* * brief Configures the different system clocks. * param None * retval None */ void RCC_Configuration(void) RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); void GPIO_

18、Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_PP _ OUT; void GPIOSetBits(void) GPIO_SetBits(GPIOA,GPIO_Pin_0); GPIO_SetBits(GPIOA,GPIO_Pin_1); GPIO_SetBits(GPIOA,GPIO_Pin

19、_2); GPIO_SetBits(GPIOA,GPIO_Pin_3); #ifdef USE_FULL_ASSERT /* * brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * param file: pointer to the source file name * param line: assert_param error line source number * retval None 名师资料总结 -

20、- -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - 7 */ void assert_failed(uint8_t* file, uint32_t line) /* User can add his own implementation to report the file name and line number, ex: printf(Wrong parameters value: file %s on line %drn, file, line

21、) */ while (1) #endif /* (C) COPYRIGHT 2012 STMicroelectronics *END OF FILE*/ 3附录程序流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 8 系统初始化PA0.0PA.3为高电平,扫描程序判断是否有键按下程序扫描PA0.0为低电平,判断是否有键按下PA0.1为低电平,判断是否有键按下PA0.2为低电平,判断是否有键按下PA0.3为低电平,判断是否有键按下数码管显示图 3 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁