嵌入式系统原理实验五按键实验_第1页
嵌入式系统原理实验五按键实验_第2页
嵌入式系统原理实验五按键实验_第3页
嵌入式系统原理实验五按键实验_第4页
全文预览已结束

下载本文档

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

文档简介

实验五按键输入实验实验目的:利用板载的4个按键,来控制板载的两个LED的亮灭和蜂鸣器的开关。通过本实验,将了解到STM32F1的IO口作为输入口的使用方法。内容要点.1.STM32IO口简介STM32F1的IO口在上一章巳经有了比较详细的介绍,这里我们不再多说。STM32F1的IO口做输入使用的时候,是通过调用函数GPIO_ReadInputDataBit()来读取IO口的状态的。了解了这点,就可以开始我们的代码编写了。这一个实验,我们将通过ALIENTEK战舰STM32开发板上载有的4个按钮(WK_UP、KEY0、KEY1和KEY2),来控制板上的2个LED(DS0和DS1)和蜂鸣器,其中WK_UP控制蜂鸣器,按一次叫,再按一次停;KEY2控制DS0,按一次亮,再按一次灭;KEY1控制DS1,效果同KEY2;KEY0则同时控制DS0和DS1,按一次,他们的状态就翻转一次。有源蜂鸣器自带了震荡电路,一通电就会发声2.硬件设计本实验用到的硬件资源有:指示灯DS0、DS14个按键:KEY0、KEY1、KEY2、和WK_UP。DS0、DS1以及蜂鸣器和STM32的连接在上两章都巳经分别介绍了,在战舰STM32开发)PE2 |kEY212PENKEY113)PE2 |kEY212PENKEY113PE4SEYO,PE2'TRACECKTSMCA23PE3TRACED0TSMC_A1。PE4TRACEDIFS\TC~A20KEY1连接在PE3上、KEY2连接在PE2上、WK_UP连接在PA0按键与STM32连接原理图这里需要注意的是:KEY0、KEY1和KEY2是低电平有效的,而WK_UP是高电平有效的,并且外部都没有上下拉电阻,所以,需要在STM32内部设置上下拉。3.软件设计key.h#ifndefKEYH#define__KEY_H#include"sys.h”#defineKEY0GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)〃读取按键0#defineKEY1GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)〃读取按键1#defineKEY2GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)〃读取按键2#defineWK_UPGPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)//读取按键3(WK_UP)#defineKEY0_PRES1//KEY0按下#defineKEY1_PRES2//KEY1按下#defineKEY2_PRES3//KEY2按下#defineWKUP_PRES4//WK_UP按下(即WK_UP/WK_UP)voidKEY_Init(void);//IO初始化u8KEY_Scan(u8);〃按键扫描函数#endif这段代码里面最关键就是4个宏定义:#defineKEY0GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)〃读取按键0#defineKEY1GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)〃读取按键1#defineKEY2GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)〃读取按键2#defineWK_UPGPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)〃读取按键3(WK_UP)然后我们打开USER文件夹Template.uvprojx,按新建按钮新建一个文件,然后保存在HARDWARE->BEEP文件夹下面,保存为key.G在该文件中输入如下代码:#include"stm32f10x.h”#include"key.h”#include"sys.h”#include"delay.h"voidKEY_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;//KEY0-KEY2GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//设置成上拉输入GPIO_Init(GPIOE,&GPIO_InitStructure);//初始化PE4,PE3,PE2GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//设置成下拉输入GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化PA0}u8KEY_Scan(u8mode){staticu8key_up=1;if(mode)key_up=1;if(key_up&&(KEY0==0||KEY1==0)){delay_ms(10);key_up=0;if(KEY0==0)returnKEY0_PRES;elseif(KEY1==0)returnKEY1_PRES;}elseif(KEY0==1&&KEY1==1)key_up=1;return0;}led.h#ifndef__LED_H#define__LED_H#include"sys.h”#defineLED0PBout(5)#defineLED1PEout(5)voidLED_Init(void);#endifled.c#include"led.h"#include"stm32f10x.h”voidLED_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_SetBits(GPIOB,GPIO_Pin_5);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOE,&GPIO_InitStructure);GPIO_SetBits(GPIOE,GPIO_Pin_5);}main.c#include"led.h”#include"delay.h"#include"key.h”#include"sys.h”intmain(void){vu8key=0;delay_init();LED_Init();KEY_Init();while(1){key=KEY_Scan(0);if(key){switch(key)caseKEY1_PRES:LED1=!LED1;break;caseKEY0_PRES:LED0=!LED0;LED1=!LED1;break;}elsedelay_ms(10);}}实验现象

温馨提示

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

评论

0/150

提交评论