基于ARM的智能按键设计.doc_第1页
基于ARM的智能按键设计.doc_第2页
基于ARM的智能按键设计.doc_第3页
基于ARM的智能按键设计.doc_第4页
基于ARM的智能按键设计.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

智能按键设计 专业: 学号: 姓名: 目录1、 设计要求 12、 设计原理 11、 功能描述 12、 总体设计 1 2.1矩阵键盘原理 1 2.2系统的总体设计 1 2.3主要软件程序 13、 硬件电路设计 2 3.1STM32功能特性概述 2 3.2复位电路设计 2 3.3时钟电路设计 3 3.4矩阵键盘电路设计 3 3.5LED显示电路 43、 总结与体会 5附录 6智能按键设计1、 设计要求1、 使用四个IO控制4*4矩阵键盘。2、 使用最简电路,不使用芯片。2、 设计原理1、功能描述电子信息行业将是人类社会的高科技行业之一,4*4矩阵键盘设计师当今社会中使用的最广的技术之一。鉴于此,研究人员通过不断的实验与研究开发,最终研发出来采用矩阵键盘设计的N个端口连接N*N个按键,来满足人们的需求,本次设计内容是4*4矩阵式键盘识别技术,不使用芯片,以ARM为控制核心设计一个4*4的键盘和LED数码管的显示电路。2、 总体设计2.1矩阵键盘原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。矩阵式结构的键盘显然比直接法要复杂一些,识别也要复杂一些,上图中,列线通过电阻接正电源,并将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输入端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。并且以LED灯作为显示系统,这样就可以很清楚的看出来控制效果。2.2系统的总体设计整个系统的构成并不使用芯片,只是用ARM的最小系统,LED显示模块,和4*4矩阵键盘组成,系统框图如图1所示:ARM最小系统LED显示模块 4*4矩阵键盘 图12.3主要软件程序 在嵌入式系统开发中除了必要的硬件外,同样离不开软件,Keil 软件是目前最流行的开发嵌入式系统的软件。Keil 是美国Keil Software公司出品的51系列兼容单片机语言软件开发系统,与汇编相比,语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。并且在编程方面,国产的一款Tk软件可以使用多种语言编程,并且可以配合keil软件使用,编程时非常方便。3、 硬件电路设计3.1STM32功能特性概述 STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex -M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品,相当于0.5mA/MHz。 图 2 STM32B2M103XX3.2复位电路设计在该设计中使用了手动复位和上电自动复位组合电路,复位开关通过复位电路产生复位信号的优点是信号的波形比较好,复位电路可以去掉开关的抖动。复位电路原理图如图3所示:图3复位电路3.3时钟电路设计RTC是STM32的脉搏,是单片机的驱动源。使用任何一个外设都必须打开相应的时钟。这样的好处就是,如果不使用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,打到节能,实现低功耗的效果。STM32的时钟可以由以下3个时钟源提供:1、 HSI:高速内部时钟信号stm32单片机内带的时钟(8M频率)精度较差。2、 HSE:高速外部时钟信号精度高,来源(1)HSE外部晶振/陶瓷谐振器(晶振); (2)HSE用户外部时钟。3、 LSE:低速外部晶体32.768KHZ,主要提供一个精确地时钟源,一般作为RCC时钟使用。 图4晶振电路3.4矩阵键盘电路设计 44矩阵式键盘电路图如图4所示,该图中左边的接口连接在单片机的P3口,低四位接列线,高四位接行线。当要对键盘进行扫描时,可以一行一行进行扫描。假设要扫描第二行,我们只需先让第二行为低电平,即P3.2为低电平,其余三行为高电平,然后读取列线上的电平,如果第二行的5号键按下,那么第二列的电平变为低电平,即P3.6为低电平,这样每个键按下都会改变P3口的电平,且不同键按下所对应的P3口的电平不同,这样便可以使单片机正确识别有无键按下以及哪个键按下。图5 矩阵键盘电路3.5LED显示电路数码显示电路图如图8所示,该电路由一个LED数码显示管和一个集成电阻器组成。其中显示块由若干发光二极管组合而成,图中的“8”字形显示块由8个发光二极管组成,每个二极管显示一字段,有共阴极和共阳极两种形式。如果将各发光二极管的阳极连接在一起成为公共电极,则称为共阳极接法,如果将各发光二极管的阴极连接在一起成为公共电极,则称为共阴极接法。 图6共阳极接法 图7共阴极接法图中所用的集成电阻器,就是集成了7个电阻,在此与显示块连接是为了保证显示块能够正常显示。图左边的端口分别接单片机上P0口的低七位,P0口不同的电平对应数码管不同的显示。图5用的是阳极LED数码管,所以另一脚接电源,若为阴极LED数码管,则要接地图8 LED显示电路三、总结与体会通过几天的努力,设计终于做了出来,平时在课堂上老师带着编写程序总感觉很简单,下课自己有没有做很多的练习,真正去做的时候才发现原来什么事情并不是想像中的那么简单,实践跟理想总是差的很远。这次的设计,首先用了很长时间查阅了相关智能按键的设计资料,有了大致思路后确定的总体设计方案。有了总体设计方案之后,方向明确了许多,由于以前大致做过单片机的矩阵键盘设计,在原理方面并没有遇到太多的问题,但在写程序的时候才发现,原来问题并没有想象中的那么简单,在写程序的时候,由于对有些指令不是很熟悉,所以出现了很多小错误,后来耐着性子一条一条指令检查,费了好大劲,最终总算是把程序写了出来。以后一定要多动手,多编写程序来熟悉各种指令。经过这次设计,我知道了什么事情不能眼高手低,一定要自己亲手去做做,多去实验积累经验,以后再去做才会得心应手。附录Main.c程序如下:#include stm32f10x.h#include key.h int main(void) SystemInit();Key_GPIO_Config(); while(1) u32 i; i=Key_Scan();switch(i)case 1:GPIO_WriteBit(GPIOB, GPIO_Pin_1,(BitAction)0);break;case 2:GPIO_WriteBit(GPIOB, GPIO_Pin_2,(BitAction)0);break;case 3:GPIO_WriteBit(GPIOB, GPIO_Pin_3,(BitAction)0);break;case 4:GPIO_WriteBit(GPIOB, GPIO_Pin_4,(BitAction)0);break;case 5:GPIO_WriteBit(GPIOB, GPIO_Pin_5,(BitAction)0);break;case 6:GPIO_WriteBit(GPIOB, GPIO_Pin_6,(BitAction)0);break;case 7:GPIO_WriteBit(GPIOB, GPIO_Pin_7,(BitAction)0);break;case 8:GPIO_WriteBit(GPIOB, GPIO_Pin_8,(BitAction)0);break;case 9:GPIO_WriteBit(GPIOB, GPIO_Pin_9,(BitAction)0);break;case 10:GPIO_WriteBit(GPIOB, GPIO_Pin_10,(BitAction)0);break;case 11:GPIO_WriteBit(GPIOB, GPIO_Pin_11,(BitAction)0);break;case 12:GPIO_WriteBit(GPIOB, GPIO_Pin_12,(BitAction)0);break;case 13:GPIO_WriteBit(GPIOB, GPIO_Pin_13,(BitAction)0);break;case 14:GPIO_WriteBit(GPIOB, GPIO_Pin_14,(BitAction)0);break;default:; Key.c程序如下:#include key.h void delay(u32 nCount) for(; nCount != 0; nCount-); void Key_GPIO_Config(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB,ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; /输出的最大频率为10HZGPIO_Init(GPIOA, &GPIO_InitStructure); /初始化GPIOA端口GPIO_Init(GPIOB, &GPIO_InitStructure); /初始化GPIOB端口u32 Key_Scan(void)u32 temp,k=0;GPIO_Write(GPIOA,0xffff);delay(100);temp=GPIO_ReadOutputData(GPIOA);switch(temp)case 0xfe:delay(100);if(temp=0xfffe) k=1;break;case 0xfd:delay(100);if(temp=0xfffd)k=2;break;case 0xfb:delay(100);if(temp=0xfffb)k=3;break;case 0xf7:delay(100);if(temp=0xfff7)k=4;break;default:k=0;GPIO_Write(GPIOA,0xfffe);delay(100);temp=GPIO_ReadOutputData(GPIOA);switch(temp)case 0xfc:delay(100);if(temp=0xfffc)k=5;break;case 0xfa:delay(100);if(temp=0xfffa)k=6;break;case 0xf6:delay(100);if(temp=0xfff6)k=7;break;default:k=0;GPIO_Write(GPIOA,0xfffd);delay(100);temp=GPIO_ReadOutputData(GPIOA);switch(temp)case 0xf9:delay(100);if(temp=0xfff9)k=8;break;case 0xf5:delay(100);if(temp=0xfff5)k=9;break;default:k=0;GPIO_Write(GPIOA,0xfffb);delay(100);temp=GPIO_ReadOutputData(GPIOA);if(temp=0xfff3) delay(100);if(temp=0xfff3) k=10;GPIO_Write(GPI

温馨提示

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

评论

0/150

提交评论