基于STM32控制的矩阵键盘的仿真设计_第1页
基于STM32控制的矩阵键盘的仿真设计_第2页
基于STM32控制的矩阵键盘的仿真设计_第3页
基于STM32控制的矩阵键盘的仿真设计_第4页
基于STM32控制的矩阵键盘的仿真设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、成绩獐南呼黑草院课程论文目:基于STM3禁制的矩阵键盘的仿真设计课程名称:ARM嵌入式系统学生姓名:张空学生学号:1314030140系别:电子工程学院专业:通信工程年级:2021级指导教师:权循忠电子工程学院制2021年10月1摘要12关键字13引言14STM32限制的矩阵键盘系统方案计制定14.1 系统总体设计方案14.2 总体设计框图14.3 矩阵键盘简介25矩阵键盘设计原理分析25.1 STM32复位和时钟电路设计25.2 矩阵键盘电路的设计25.3 按键去抖动35.4 按键显示电路36程序流程图47总体电路图58软件仿真59总结610参考文献:611附录7基于STM3染制的矩阵键盘的

2、仿真设计学生:张宇指导老师:权循忠电子工程学院通信工程1摘要矩阵键盘又称行列键盘,它是用四条I/O线作为行线,四条I/O线作为列线组成的键盘.在行线和列线的每个交叉点上设置一个按键.这样键盘上按键的个数就为4*4个.这种行列式键盘结构能有效地提升ARM®入式系统中I/O口的利用率.2关键字矩阵键盘行列键盘ARM嵌入式系统3引言随着人们生活水平的不断提升,ARM®入式无疑是人们追求的目标之一,它给人带来的方便也是不可否认的,要为现代人工作、科研、生活、提供更好更方便的设备就需要从ARMS入式技术入手,一切向假设数字化限制,智能化限制方向开展.用ARMS入式来限制的数码管显示按

3、键也在广泛应用,具限制系统具有极大意义.展望未来,急速的响应速度将成为个性的ARMS入式开展的趋势,越来越多的ARMS入式正如雨后春笋般涌现.4STM32限制的矩阵键盘系统方案计制定4.1 系统总体设计方案该智能键盘电路由ARM1小系统,矩阵键盘电路和显示电路组成,在常规的4*4矩阵键盘的根底上,通过改良实现了用4个IO口完成4*4矩阵键盘.4.2 总体设计框图本电路主要由3大局部电路组成:矩阵键盘电路、ARMS小系统电路、按键显示电路.其中ATM最小系统主要由复位电路和时钟电路组成.电路复位后数码管显示字符“一表示没有按键,显示电路由STM32勺PD0-PD7来限制数码管显示是哪个按键按下.

4、总体设计方框图,如图1所示.图1总体设计方框图4.3 矩阵键盘简介矩阵键盘又称行列键盘,它是用四条I/O线作为行线,四条I/O线作为列线组成的键盘.在行线和列线的每个交叉点上设置一个按键.这样键盘上按键的个数就为4*4个.这种行列式键盘结构能有效地提升ARM®入式系统中I/O口的利用率.5矩阵键盘设计原理分析5.1 STM32复位和时钟电路设计此电路主要是复位电路和时钟电路两局部,其中复位电路采用按键手动复位和上电自动复位组合,电路如图2右所示:其中14脚为STM32勺复位端.时钟电路如图2左所示:晶振采用的是8MHzffi32.786KHz,8MKz分另J接STM32的12脚和13

5、脚,32.786KHz分另I接STM32勺8脚和9脚.图2STM复位和时钟电路设计5.2 矩阵键盘电路的设计该电路的四个端子分别接STM32勺PB12-PB10电路如图3所示.厂,一广口广一图3矩阵键盘电路该矩阵键盘电路扫描方法如下:(1) PB15PB14PB13PB12设置为输入并内部上拉.程序读取这四个IO口弓唧电平,如果某个IO为低电平,那么该列中相应IO口对应行处的按键按下.(2) PB15输出低电平,PB14PB13PB12设置为输入并内部上拉.程序读取PB14,PB13PB12这三个IO口的引脚电平.如果某个IO为低电平,那么是第一列中相应IO口对应行处的按键按下.(3) PB1

6、4输出低电平,PB15PB13PB12设置为输入并内部上拉.程序读取PB15PB13PB12这三个IO口的引脚电平.如果某个IO为低电平,那么是第二列中相应IO口对应行处的按键按下.(4) PB13输出低电平,PB15PB14,PB12设置为输入并内部上拉.程序读取PB15PB14PB12这三个IO口的引脚电平.如果某个IO为低电平,那么是第三列中相应IO口对应行处的按键按下.(5) PB12输出低电平,PB15PB14,PB13设置为输入并内部上拉.程序读取PB15PB14PB13这三个IO口的引脚电平.如果某个IO为低电平,那么是第四列中相应IO口对应行处的按键按下.5.3 按键去抖动每隔

7、10ms扫描键盘一次,当扫描某个按键按下时,那么开始计数,当连续4次扫描(也就是40m§都是这个按键按下时,说明按键有效.如果不到四次计数,就采集不到该按键按下,那么说明该按键无效.5.4 按键显示电路本设计采用STM32勺IO口PD0-PD7来限制数码管来实时显示按键状态.当按键有按下时,数码管将显示对应的按键编号“0F,对应表示的按键是“SW1一SW16.按键显示电路,如图4.稗钟恬示甩咨图4按键显示电路6程序流程图先对键盘初始化,看读列线是否有键按键,再延时消抖,再看读列是否有键按下,最后根据当前状态识别按键,显示键值.程序流程图,如图5所小.开始键盘值初始读列线是否有键按下图

8、5程序流程图流程图描述:先对键盘值进行初始化,判断列线是否有按键按下,假设无直接返回结果,假设有那么进行延时消抖,然后继续判断列线是否有按键按下,假设无直接返回结果,假设有根据当前状态识别按键,显示按键值,返回结果.7总体电路图把矩阵键盘电路、ARM#小系统电路、按键显示电路连接在一起.其中ATM最小系统主要由复位电路和时钟电路组成.总体电路图,如图6所示.5.inutnimmIM图6总体电路图8软件仿真首先,我们进行软件仿真,点击按钮Debug然后再点击波形图按钮,出现逻辑分析窗口,点击Setup,新建6个信号PORTB.2PORTB.8PORTB.9PORTB.10PORTB.13和POR

9、TB.14DisplayType全部选择Bit,然后选择各个颜色.然后再点击PeripheralsGeneralPurposeI/OGPIOB.然后设置各个引脚电平,然后在x=KEY_Scan()处设置一个断点,点击Run按钮,会出现以下波形即实验成功.图7软件仿真9总结一学期的ARMS程即将结束,从一开始对ARM勺完全陌生到现在的慢慢入门,其中体会到了很多ARM的妙处和实用意义.通过这次矩阵键盘的设计,使我对ARMt了更深的理解.在做课程论文时增强了对论文格式的修改,熟悉和掌握了ARMT程工程的建立与生成,在遇到程序出现错误时及时的翻书查看或者上网查找,并且在后期的AR啾训课中自己尝试在AR

10、MF发板上进行调试,让我深刻领悟到理论和实践相结合的重要意义.只有把理论运用到实践中才能很好掌握理论和技术.所以以后不管在学什么知识都要重视理论与实践相结合.这样就好觉得其实学知识也不是那么难,更重要的是表达的学习的实际用处.10参考文献:1彭刚、秦志弓II等.基于ARMCortex-M3的STM32系列嵌入式微限制器应用实践M.北京:电子工业出版社2李宁.基于MDK勺STM32处理器开发应用M.北京航空航天大学出版社,2021.3潘松、黄继业等.EDA技术实用教程第一版M.科学出版社2002年10月4陆坤、奚大顺、李之权等.电子设计技术M.四川:电子科技大学出版社.1997年.682-688

11、,838-9415赵俊超.集成电路设计VHDL教程第一版M.北京:北京希望电子出版社.2002年6杨邦文.新型实用电路制作200例M.北京:人民邮电出版社.1998年.175-2887许海燕、付炎著.嵌入式系统技术与应用.机械工业出版社.2002年8周主力主编.ARM嵌入式系统根底教程.北京航空航天大学出版社.2005年9田泽主编.嵌入式系统开发与应用教程.北京航空航天大学出版社11附录主程序#include"led.h"#include"delay.h"#include"sys.h"#include"key.h"

12、#include"usart.h"#include"stdio.h"intmain(void)intx;SystemInit();delay_init(72);/延时初始化NVIC_Configuration();uart_init(9600);LED_Init();KEY_Init();/初始化与按键连接的硬件接口while(1)x=KEY_Scan();/得到键值switch(x)case0:/LED=0;printf("Dn");break;case 1:LED=1;printf("Cn");break;ca

13、se 2:LED=2;printf("Bn");break;case 3:LED=3;printf("An");break;case 4:LED=4;printf("#n");break;case 5:LED=5;printf("9n");break;case 6:LED=6;printf("6n");break;case 7:LED=7;printf("3n");break;case 8:LED=8;printf("0n");break;case 9:L

14、ED=9;printf("8n");break;case 10:LED=10;printf("5n");break;case 11:LED=11;printf("2n");break;case 12:LED=12;printf("*n");break;case 13:LED=13;printf("7n");break;case 14:LED=14;printf("4n");break;case 15:LED=15;printf("1n");break;)/

15、key.c/按键扫描#include"stm32f10x.h#include"delay.h"#include"key.h"/*本文件的函数,主要实现矩阵键盘的功能.矩阵键盘使用PB8到PB15引脚,其中,PB8至ijPB11固定为推挽输出,PB12到PB15固定为下拉输入.即,无键按下时,对应PB12到PB15为0,有键按下时,PB12到PB15中,对应的引脚为高.*/voidKEY_Init(void)初始化矩阵键盘要使用的GPIO口.GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphCloc

16、kCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/定义PB8到PB11为上拉输入、GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_PinGPIOPin8|GPIOPin9|GPIOPin10|GPIOPin11;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;/定义PB12

17、至UPB15为下拉输入.GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin=GPIOPin12|GPIOPin13|GPIOPin14|GPIOPin15;/由于上面定义引脚为输出时,已经翻开整个GPIOA勺时钟了,/所以此处不再需要函数RCC_APB2PeriphClockCmd便翻开时钟了.GPIO_Init(GPIOB,&GPIO_InitStructure);intKEY_Scan(void)/实现矩阵键盘.返回值为,各按键的键值,此键值由用户自己定义.u8KeyVal;/keyV

18、al为最后返回的键值.GPIO_Write(GPIOB,(GPIOB->ODR&0xf0ff|0x0f00);/先让PB8至UPB11全部输出高.if(GPIOB->IDR&0xf000)=0x0000)/如果PB12至UPB15全为0,贝U没有键按下.此时,返回值为-1.return-1;elseif(GPIOB->IDR&0xf000)=0x0000)/如果延时5ms后,PB12至UPB15又全为0,那么,刚刚引脚的电位变化是抖动产生的.return-1;GPIO_Write(GPIOB,(GPIOB->ODR&0xf0ff|0x01

19、00);/让PB11至UPB8输出二进制的0001.switch(GPIOB->IDR&0xf000)/对PB12到PB15的值进行判断,以输出不同的键值.case0x1000:KeyVal=15;break;case0x2000:KeyVal=11;break;case0x4000:KeyVal=7;break;case0x8000:KeyVal=3;break;GPIO_Write(GPIOB,(GPIOB->ODR&0xf0ff|0x0200);/让PB11至UPB8输出二进制的0.switch(GPIOB->IDR&0xf000)/对PB12至UPB15的值进行判断,以输出不同的键值.case0x1000:KeyVal=14;break;case0x2000:KeyVal=10;break;case0x4000:KeyVal=6;break;case0x8000:KeyVal=2;break;GPIO_Write(GPIOB,(GPIOB->ODR&0xf0ff|0x0400);/让PB11至UPB8输出二进制的1011.switch(GPIOB->IDR&0xf000)/对PB12到PB15的值进行判断,以输出不同的键值.c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论