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

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上专心-专注-专业课程论文题 目:基于 STM32 控制的矩阵键盘的仿真设计 课程名称: ARM 嵌入式系统 学生姓名: 张宇 学生学号: 系 别: 电子工程学院 专 业: 通信工程 年 级: 2013 级 指导教师: 权循忠 电子工程学院制电子工程学院制 2015 年 10 月 成绩成绩精选优质文档-倾情为你奉上专心-专注-专业目目 录录精选优质文档-倾情为你奉上专心-专注-专业基于基于 STM32STM32 控制的矩阵键盘的仿真设计控制的矩阵键盘的仿真设计学生:张宇指导老师:权循忠电子工程学院 通信工程1 1 摘要摘要矩阵键盘又称行列键盘,它是用四条 I/O 线作为

2、行线,四条 I/O 线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为 4*4 个。这种行列式键盘结构能有效地提高 ARM 嵌入式系统中 I/O口的利用率。2 2 关键字关键字 矩阵键盘 行列键盘 ARM 嵌入式系统3 3 引言引言 随着人们生活水平的不断提升,ARM 嵌入式无疑是人们追求的目标之一,它给人带来的方便也是不可否认的,要为现代人工作、科研、生活、提供更好更方便的设备就需要从 ARM 嵌入式技术入手,一切向若数字化控制,智能化控制方向发展。用 ARM 嵌入式来控制的数码管显示按键也在广泛应用,其控制系统具有极大意义。展望未来,急速的响应速度将成为

3、个性的 ARM 嵌入式发展的趋势,越来越多的 ARM 嵌入式正如雨后春笋般涌现。4 4 STM32STM32 控制的矩阵键盘系统方案计制定控制的矩阵键盘系统方案计制定4.14.1 系统总体设计方案系统总体设计方案该智能键盘电路由 ARM 最小系统,矩阵键盘电路和显示电路组成,在常规的 4*4 矩阵键盘的基础上,通过改进实现了用 4 个 IO 口完成 4*4 矩阵键盘。 4.24.2 总体设计框图总体设计框图本电路主要由 3 大部分电路组成:矩阵键盘电路、ARM 最小系统电路、按键显示电路。其中 ATM 最小系统主要由复位电路和时钟电路组成。电路复位后数码管显示字符“” 表示没有按键,显示电路由

4、 STM32 的 PD0PD7 来控制数码管显示是哪个按键按下。总体设计方框图,如图 1 所示。精选优质文档-倾情为你奉上专心-专注-专业 图图 1 1 总体设计方框图总体设计方框图4.34.3 矩阵键盘简介矩阵键盘简介矩阵键盘又称行列键盘,它是用四条 I/O 线作为行线,四条 I/O 线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为 4*4 个。这种行列式键盘结构能有效地提高 ARM 嵌入式系统中 I/O口的利用率。5 5 矩阵键盘设计原理分析矩阵键盘设计原理分析5.15.1 STM32STM32 复位和时钟电路设计复位和时钟电路设计 此电路主要是复位电

5、路和时钟电路两部分,其中复位电路采用按键手动复位和上电自动复位组合,电路如图 2(右)所示:其中 14 脚为 STM32 的复位端。时钟电路如图 2(左)所示:晶振采用的是 8MHz 和 32.786KHz,8MKz 分别接STM32 的 12 脚和 13 脚,32.786KHz 分别接 STM32 的 8 脚和 9 脚。C222PC122PXTVCC12R112R2GND位位位位位位位位RESC3104PRESETC522PC422PXT232.786KSOC INSOC OUTPC14PC15图图 2 2 STMSTM 复位和时钟电路设计复位和时钟电路设计5.25.2 矩阵键盘电路的设计矩

6、阵键盘电路的设计 该电路的四个端子分别接 STM32 的 PB12PB15,电路如图 3 所示。精选优质文档-倾情为你奉上专心-专注-专业SW8SW1SW2SW3SW5SW12SW6SW7SW9SW10SW16SW11SW13SW14SW15SW4D1D2D3D4PB15PB14PB13PB12图图 3 3 矩阵键盘电路矩阵键盘电路该矩阵键盘电路扫描方法如下:(1)PB15,PB14,PB13,PB12 设置为输入并内部上拉。程序读取这四个IO 口引脚电平,如果某个 IO 为低电平,则该列中相应 IO 口对应行处的按键按下。(2)PB15 输出低电平,PB14,PB13,PB12 设置为输入并

7、内部上拉。程序读取 PB14,PB13,PB12 这三个 IO 口的引脚电平。如果某个 IO 为低电平,则是第一列中相应 IO 口对应行处的按键按下。(3)PB14 输出低电平,PB15,PB13,PB12 设置为输入并内部上拉。程序读取 PB15,PB13,PB12 这三个 IO 口的引脚电平。如果某个 IO 为低电平,则是第二列中相应 IO 口对应行处的按键按下。(4)PB13 输出低电平,PB15,PB14,PB12 设置为输入并内部上拉。程序读取 PB15,PB14,PB12 这三个 IO 口的引脚电平。如果某个 IO 为低电平,则是第三列中相应 IO 口对应行处的按键按下。(5)PB

8、12 输出低电平,PB15,PB14,PB13 设置为输入并内部上拉。程序读取 PB15,PB14,PB13 这三个 IO 口的引脚电平。如果某个 IO 为低电平,则是第四列中相应 IO 口对应行处的按键按下。5.35.3 按键去抖动按键去抖动每隔 10ms 扫描键盘一次,当扫描某个按键按下时,则开始计数,当连续 4次 扫描(也就是 40ms)都是这个按键按下时,说明按键有效。如果不到四次计数,就采集不到该按键按下,则说明该按键无效。5.45.4 按键显示电路按键显示电路本设计采用 STM32 的 IO 口 PD0PD7 来控制数码管来实时显示按键状态。当按键有按下时,数码管将显示对应的按键编

9、号“0F” ,对应表示的按键是精选优质文档-倾情为你奉上专心-专注-专业“SW1SW16” 。按键显示电路,如图 4。图图 4 4 按键显示电路按键显示电路6 6 程序流程图程序流程图 先对键盘初始化,看读列线是否有键按键,再延时消抖,再看读列是否有键按下,最后根据当前状态识别按键,显示键值。程序流程图,如图 5 所示。图图 5 5 程序流程图程序流程图精选优质文档-倾情为你奉上专心-专注-专业流程图描述:先对键盘值进行初始化,判断列线是否有按键按下,若无直接返回结果,若有则进行延时消抖,然后继续判断列线是否有按键按下,若无直接返回结果,若有根据当前状态识别按键,显示按键值,返回结果。7 7

10、总体电路图总体电路图 把矩阵键盘电路、ARM 最小系统电路、按键显示电路连接在一起。其中ATM 最小系统主要由复位电路和时钟电路组成。 总体电路图,如图 6 所示。1PE22PE33PE44PE55PE66VBAT7PC138PC149PC1510GND11+3V312SOC_IN13SOC_OUT14RESET15PC016PC117PC218PC319VSSA20VREF-21VREF+22VDDA23PA024PA125PA226PA327GND28+3V329PA430PA531PA632PA733PC434PC535PB036PB137PB238PE739PE840PE941PE10

11、42PE1143PE1244PE1345PE1446PE1547PB1048PB1149GND50+3V351PB1252PB1353PB1454PB1555PD856PD957PD1058PD1159PD1260PD1361PD1462PD1563PC664PC765PC866PC967PA868PA969PA1070PA1171PA1272PA1373NC74GND75+3V376PA1477PA1578PC1079PC1180PC1281PD082PD183PD284PD385PD486PD587PD688PD789PB390PB491PB592PB693PB794BOOT095PB89

12、6PB997PE098PE199GND100+3V3STMB2F103xxU1STM32abfcgdeABCDEFGabcdefgDOTdpdpDSSW8SW1SW2SW3SW5SW12SW6SW7SW9SW10SW16SW11SW13SW14SW15SW4D1D2D3D412R412R512R612R712R812R912R1012R11位位位位位位位位位位C222PC122PXTVCC12R112R2GND位位位位位位位位RESC3104PRESETC522PC422PXT232.786K12345678图图 6 6 总体电路图总体电路图8 8 软件仿真软件仿真首先,我们进行软件仿真,点击

13、按钮 Debug,然后再点击波形图按钮,出现逻辑分析窗口,点击 Setup,新建 6 个信号PORTB.2、PORTB.8、PORTB.9、PORTB.10、PORTB.13、和 PORTB.14。Display Type 全部选择 Bit,然后选择各个颜色。然后再点击 Peripherals General Purpose I/O GPIOB。然后设置各个引脚电平,然后在 x=KEY_Scan()处设置一个断点,点击 Run 按钮,会出现以下波形即实验成功。精选优质文档-倾情为你奉上专心-专注-专业图图 7 7 软件仿真软件仿真9 9 总结总结一学期的 ARM 课程即将结束,从一开始对 AR

14、M 的完全陌生到现在的慢慢入门,其中体会到了很多 ARM 的妙处和实用意义。通过这次矩阵键盘的设计,使我对 ARM 有了更深的理解。在做课程论文时增强了对论文格式的修改,熟悉和掌握了 ARM 工程项目的建立与生成,在遇到程序出现错误时及时的翻书查看或者上网查找,并且在后期的 ARM 实训课中自己尝试在 ARM 开发板上进行调试,让我深刻领悟到理论和实践相结合的重要意义。只有把理论运用到实践中才能很好掌握理论和技术。所以以后不管在学什么知识都要重视理论与实践相结合。这样就好觉得其实学知识也不是那么难,更重要的是体现的学习的实际用处。 1010 参考文献:参考文献:1 彭刚、秦志强等.基于 ARM

15、 Cortex-M3 的 STM32 系列嵌入式微控制器应用实践M.北京:电子工业出版社2 李宁.基于 MDK 的 STM32 处理器开发应用 M.北京航空航天大学出版社,2008. 3潘松、黄继业等.EDA 技术实用教程(第一版)M.科学出版社 2002 年 10 月4陆坤、奚大顺、李之权等.电子设计技术M.四川:电子科技大学出版社.1997 年.682-688,838-9415赵俊超.集成电路设计VHDL 教程(第一版)M.北京:北京希望电子出版社.2002 年6杨邦文.新型实用电路制作 200 例M.北京:人民邮电出版社.1998 年.175-288精选优质文档-倾情为你奉上专心-专注-

16、专业7许海燕、付炎著.嵌入式系统技术与应用.机械工业出版社.2002 年8周主力主编.ARM 嵌入式系统基础教程.北京航空航天大学出版社.2005 年9田泽主编.嵌入式系统开发与应用教程.北京航空航天大学出版社1111 附录附录主程序#include led.h#include delay.h#include sys.h#include key.h#include usart.h#include stdio.h int main(void) int x;SystemInit();delay_init(72); /延时初始化NVIC_Configuration();uart_init(9600)

17、; LED_Init();KEY_Init();/初始化与按键连接的硬件接口while(1) x=KEY_Scan(); /得到键值 switch(x)case 0:/ LED=0; printf(Dn); break;精选优质文档-倾情为你奉上专心-专注-专业case 1:LED=1; printf(Cn); break;case 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:LE

18、D=6; printf(6n); break;case 7:LED=7; printf(3n); break;case 8:精选优质文档-倾情为你奉上专心-专注-专业LED=8; printf(0n); break;case 9:LED=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

19、(4n); break;case 15:LED=15;精选优质文档-倾情为你奉上专心-专注-专业 printf(1n); break; /key.c /按键扫描#include stm32f10 x.h#include delay.h#include key.h/*本文件的函数,主要实现矩阵键盘的功能。矩阵键盘使用 PB8 到 PB15 引脚,其中,PB8 到 PB11 固定为推挽输出,PB12 到 PB15 固定为下拉输入。即,无键按下时,对应 PB12 到 PB15为 0,有键按下时,PB12 到 PB15 中,对应的引脚为高。*/void KEY_Init(void) /初始化矩阵键盘要

20、使用的 GPIO 口。 GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /定义 PB8精选优质文档-倾情为你奉上专心-专注-专业到 PB11 为上拉输入、 、 。GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_P

21、in_10|GPIO_Pin_11; GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; /定义 PB12 到PB15 为下拉输入。GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; /因为上面定义引脚为输出时,已经打开整个 GPIOA 的时钟了,/所以此处不再需要函数 RC

22、C_APB2PeriphClockCmd()来打开时钟了。 GPIO_Init(GPIOB,&GPIO_InitStructure);int KEY_Scan(void) /实现矩阵键盘。返回值为,各按键的键值,此键值由用户自己定义。u8 KeyVal; /keyVal 为最后返回的键值。GPIO_Write(GPIOB,(GPIOB-ODR & 0 xf0ff | 0 x0f00); /先让 PB8 到PB11 全部输出高。if(GPIOB-IDR & 0 xf000)=0 x0000) /如果 PB12 到 PB15 全为 0,则没有键按下。此时,返回值为-1.re

23、turn -1;else delay_ms(5); /延时 5ms 去抖动。精选优质文档-倾情为你奉上专心-专注-专业 if(GPIOB-IDR & 0 xf000)=0 x0000)/如果延时 5ms 后,PB12 到PB15 又全为 0,则,刚才引脚的电位变化是抖动产生的. return -1;GPIO_Write(GPIOB,(GPIOB-ODR & 0 xf0ff | 0 x0100);/让 PB11 到PB8 输出二进制的 0001.switch(GPIOB-IDR & 0 xf000)/对 PB12 到 PB15 的值进行判断,以输出不同的键值。case 0

24、 x1000: KeyVal=15; break;case 0 x2000: KeyVal=11; break;case 0 x4000: KeyVal=7;break;case 0 x8000: KeyVal=3;break; GPIO_Write(GPIOB,(GPIOB-ODR & 0 xf0ff | 0 x0200);/让 PB11 到PB8 输出二进制的 0.switch(GPIOB-IDR & 0 xf000) /对 PB12 到 PB15 的值进行判断,以输出不同的键值。case 0 x1000: KeyVal=14; break;case 0 x2000: KeyVal=10; break;case 0 x4000: KeyVal=6;break;case 0 x8000: KeyVal=2;break;GPIO_Write(GPIOB,(GPIOB-ODR & 0 xf0ff | 0 x0400);/让 PB11 到PB8 输出二进制的 1011.精选优质文档-倾情为你奉上专心-专注-专业switch(GPIOB-IDR &

温馨提示

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

评论

0/150

提交评论