ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:155.77KB ,
资源ID:8346843      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8346843.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于STM32控制的矩阵键盘的仿真设计.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于STM32控制的矩阵键盘的仿真设计.docx

1、基于STM32控制的矩阵键盘的仿真设计课程论文题 目:基于STM32控制的矩阵键盘的仿真设计 课程名称: ARM 嵌入式系统 学生姓名: 张宇 学生学号: 1314030140 系 别: 电子工程学院 专 业: 通信工程 年 级: 2013级 指导教师: 权循忠 电子工程学院制 2015年10月 1摘要 12关键字 13引言 14 STM32控制的矩阵键盘系统方案计制定 14.1 系统总体设计方案 14.2总体设计框图 14.3矩阵键盘简介 25 矩阵键盘设计原理分析 25.1 STM32复位和时钟电路设计 25.2 矩阵键盘电路的设计 25.3按键去抖动 35.4 按键显示电路 36程序流程

2、图 47 总体电路图 58 软件仿真 59 总结 610 参考文献: 611 附录 7基于STM32控制的矩阵键盘的仿真设计学生:张宇指导老师:权循忠电子工程学院 通信工程1摘要矩阵键盘又称行列键盘,它是用四条I/O线作为行线,四条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4*4个。这种行列式键盘结构能有效地提高ARM嵌入式系统中I/O口的利用率。2关键字 矩阵键盘 行列键盘 ARM嵌入式系统3引言 随着人们生活水平的不断提升,ARM嵌入式无疑是人们追求的目标之一,它给人带来的方便也是不可否认的,要为现代人工作、科研、生活、提供更好更方便的设备

3、就需要从ARM嵌入式技术入手,一切向若数字化控制,智能化控制方向发展。用ARM嵌入式来控制的数码管显示按键也在广泛应用,其控制系统具有极大意义。展望未来,急速的响应速度将成为个性的ARM嵌入式发展的趋势,越来越多的ARM嵌入式正如雨后春笋般涌现。4 STM32控制的矩阵键盘系统方案计制定4.1 系统总体设计方案该智能键盘电路由ARM最小系统,矩阵键盘电路和显示电路组成,在常规的4*4矩阵键盘的基础上,通过改进实现了用4个IO口完成4*4矩阵键盘。 4.2总体设计框图本电路主要由3大部分电路组成:矩阵键盘电路、ARM最小系统电路、按键显示电路。其中ATM最小系统主要由复位电路和时钟电路组成。电路

4、复位后数码管显示字符“” 表示没有按键,显示电路由STM32的PD0PD7来控制数码管显示是哪个按键按下。总体设计方框图,如图1所示。 图1总体设计方框图4.3矩阵键盘简介矩阵键盘又称行列键盘,它是用四条I/O线作为行线,四条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4*4个。这种行列式键盘结构能有效地提高ARM嵌入式系统中I/O口的利用率。5 矩阵键盘设计原理分析5.1 STM32复位和时钟电路设计 此电路主要是复位电路和时钟电路两部分,其中复位电路采用按键手动复位和上电自动复位组合,电路如图2(右)所示:其中14脚为STM32的复位端。时钟

5、电路如图2(左)所示:晶振采用的是8MHz和32.786KHz,8MKz分别接STM32的12脚和13脚,32.786KHz分别接STM32的8脚和9脚。图2 STM复位和时钟电路设计5.2 矩阵键盘电路的设计 该电路的四个端子分别接STM32的PB12PB15,电路如图3所示。图3 矩阵键盘电路该矩阵键盘电路扫描方法如下:(1)PB15,PB14,PB13,PB12设置为输入并内部上拉。程序读取这四个IO口引脚电平,如果某个IO为低电平,则该列中相应IO口对应行处的按键按下。(2)PB15输出低电平,PB14,PB13,PB12设置为输入并内部上拉。程序读取PB14,PB13,PB12这三个

6、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)PB12输出低电平,PB15,PB14,PB13设置为输入并内部上拉。程序读取PB15,PB14,PB13这三个

7、IO口的引脚电平。如果某个IO为低电平,则是第四列中相应IO口对应行处的按键按下。5.3按键去抖动每隔10ms扫描键盘一次,当扫描某个按键按下时,则开始计数,当连续4次 扫描(也就是40ms)都是这个按键按下时,说明按键有效。如果不到四次计数,就采集不到该按键按下,则说明该按键无效。5.4 按键显示电路本设计采用STM32的IO口PD0PD7来控制数码管来实时显示按键状态。当按键有按下时,数码管将显示对应的按键编号“0F”,对应表示的按键是“SW1SW16”。按键显示电路,如图4。图4 按键显示电路6程序流程图 先对键盘初始化,看读列线是否有键按键,再延时消抖,再看读列是否有键按下,最后根据当

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

9、ORTB.10、PORTB.13、和PORTB.14。Display Type全部选择Bit,然后选择各个颜色。然后再点击Peripherals General Purpose I/O GPIOB。然后设置各个引脚电平,然后在x=KEY_Scan()处设置一个断点,点击Run按钮,会出现以下波形即实验成功。图7 软件仿真 9 总结一学期的ARM课程即将结束,从一开始对ARM的完全陌生到现在的慢慢入门,其中体会到了很多ARM的妙处和实用意义。通过这次矩阵键盘的设计,使我对ARM有了更深的理解。在做课程论文时增强了对论文格式的修改,熟悉和掌握了ARM工程项目的建立与生成,在遇到程序出现错误时及时的

10、翻书查看或者上网查找,并且在后期的ARM实训课中自己尝试在ARM开发板上进行调试,让我深刻领悟到理论和实践相结合的重要意义。只有把理论运用到实践中才能很好掌握理论和技术。所以以后不管在学什么知识都要重视理论与实践相结合。这样就好觉得其实学知识也不是那么难,更重要的是体现的学习的实际用处。 10 参考文献:1 彭刚、秦志强等.基于ARM Cortex-M3的STM32系列嵌入式微控制器应用实践M.北京:电子工业出版社2 李宁.基于MDK的STM32处理器开发应用 M.北京航空航天大学出版社,2008. 3潘松、黄继业等.EDA技术实用教程(第一版)M.科学出版社 2002年10月4陆坤、奚大顺、

11、李之权等.电子设计技术M.四川:电子科技大学出版社.1997年.682-688,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 int main(void) int x; SystemInit(); delay_init(72); /延时初始化 NVIC_Configuration(); uart_init(9600); 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(

13、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: LED=9; printf(8n); break; case 10: LED=10; printf(5n); break; case 11: LED=1

14、1; 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; /key.c /按键扫描#include stm32f10x.h#include delay.h#include key.h/*本文件的函数,主要实现矩阵键盘的功能。矩阵键盘使用PB8到PB15引脚,其中,PB8到PB11固定为推挽输出,PB12到PB15固定为下拉输

15、入。即,无键按下时,对应PB12到PB15为0,有键按下时,PB12到PB15中,对应的引脚为高。*/void KEY_Init(void) /初始化矩阵键盘要使用的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; GPI

16、O_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_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

17、_15; /因为上面定义引脚为输出时,已经打开整个GPIOA的时钟了, /所以此处不再需要函数RCC_APB2PeriphClockCmd()来打开时钟了。 GPIO_Init(GPIOB,&GPIO_InitStructure); int KEY_Scan(void) /实现矩阵键盘。返回值为,各按键的键值,此键值由用户自己定义。 u8 KeyVal; /keyVal为最后返回的键值。 GPIO_Write(GPIOB,(GPIOB-ODR & 0xf0ff | 0x0f00); /先让PB8到PB11全部输出高。 if(GPIOB-IDR & 0xf000)=0x0000) /如果PB12

18、到PB15全为0,则没有键按下。此时,返回值为-1. return -1; else delay_ms(5); /延时5ms去抖动。 if(GPIOB-IDR & 0xf000)=0x0000)/如果延时5ms后,PB12到PB15又全为0,则,刚才引脚的电位变化是抖动产生的. return -1; GPIO_Write(GPIOB,(GPIOB-ODR & 0xf0ff | 0x0100); /让PB11到PB8输出二进制的0001. switch(GPIOB-IDR & 0xf000)/对PB12到PB15的值进行判断,以输出不同的键值。 case 0x1000: KeyVal=15; b

19、reak; case 0x2000: KeyVal=11; break; case 0x4000: KeyVal=7; break; case 0x8000: KeyVal=3; break; GPIO_Write(GPIOB,(GPIOB-ODR & 0xf0ff | 0x0200); /让PB11到PB8输出二进制的0. switch(GPIOB-IDR & 0xf000) /对PB12到PB15的值进行判断,以输出不同的键值。 case 0x1000: KeyVal=14; break; case 0x2000: KeyVal=10; break; case 0x4000: KeyVal

20、=6; break; case 0x8000: KeyVal=2; break; GPIO_Write(GPIOB,(GPIOB-ODR & 0xf0ff | 0x0400); /让PB11到PB8输出二进制的1011. switch(GPIOB-IDR & 0xf000) /对PB12到PB15的值进行判断,以输出不同的键值。 case 0x1000: KeyVal=13; break; case 0x2000: KeyVal=9; break; case 0x4000: KeyVal=5; break; case 0x8000: KeyVal=1; break; GPIO_Write(GP

21、IOB,(GPIOB-ODR & 0xf0ff | 0x0800); /让PB11到PB8输出二进制的0111. switch(GPIOB-IDR & 0xf000) /对PB12到PB15的值进行判断,以输出不同的键值。 case 0x1000: KeyVal=12; break; case 0x2000: KeyVal=8; break; case 0x4000: KeyVal=4; break; case 0x8000: KeyVal=0; break; return KeyVal; /key.h 文件 #ifndef _KEY_H#define _KEY_H#include sys.h

22、 #define KEY0 PBin(8) /PB8#define KEY1 PBin(9) /PB9#define KEY2 PBin(10) /PA10#define KEY3 PBin(11) /PA11#define KEY4 PBin(12) /PA12#define KEY5 PBin(13) /PA13#define KEY6 PBin(14) /PA14#define KEY7 PBin(15) /PA15 void KEY_Init(void);/IO初始化int KEY_Scan(void); #endif键码表为:1 2 3 A4 5 6 B7 8 9 C* 0 # D 这个可以根据自己来定义。 (注:文档可能无法思考全面,请浏览后下载,供参考。可复制、编制,期待你的好评与关注!)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1