ARM嵌入基础应用 8_第1页
ARM嵌入基础应用 8_第2页
ARM嵌入基础应用 8_第3页
ARM嵌入基础应用 8_第4页
ARM嵌入基础应用 8_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

第6章

按键输入与蜂鸣器作者:黄克亚2025年5月本章概要CONTENTSGPIO输入库函数按键输入控制蜂鸣器发不同声音项目实施GPIO输入控制方式蜂鸣器工作原理及硬件电路6.1GPIO输入库函数在第5章中,我们讲解了GPIO输出库函数,本节我们将一起学习GPIO输入库函数。相较于GPIO输出库函数,GPIO输入库函数要简单很多。6.1GPIO输入库函数6.1.1函数GPIO_ReadInputDataBit函数名GPIO_ReadInputDataBit函数原形u8GPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,u16GPIO_Pin)功能描述读取指定端口管脚的输入输入参数1GPIOx:x可以是

A,B,C,D或者

E,来选择

GPIO外设输入参数2GPIO_Pin:待读取的端口位参阅

Section:GPIO_Pin查阅更多该参数允许取值范围输出参数无返回值输入端口管脚值先决条件无被调用函数无例:

/*ReadstheseventhpinoftheGPIOBandstoreitinReadValuevariable*/u8ReadValue;ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);6.1GPIO输入库函数6.1.2函数GPIO_ReadInputData函数名GPIO_ReadInputData函数原形u16GPIO_ReadInputData(GPIO_TypeDef*GPIOx)功能描述读取指定的GPIO端口输入输入参数GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设输出参数无返回值GPIO输入数据端口值先决条件无被调用函数无例:/*ReadtheGPIOCinputdataportandstoreitinReadValuevariable*/u16ReadValue;ReadValue=GPIO_ReadInputData(GPIOC);6.1GPIO输入库函数6.1.3函数GPIO_ReadOutputDataBit函数名GPIO_ReadOutputDataBit函数原形u8GPIO_ReadOutputDataBit(GPIO_TypeDef*GPIOx,u16GPIO_Pin)功能描述读取指定端口管脚的输出输入参数1GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设输入参数2GPIO_Pin:待读取的端口位参阅Section:GPIO_Pin查阅更多该参数允许取值范围输出参数无返回值输出端口管脚值先决条件无被调用函数无例:/*ReadstheseventhpinoftheGPIOBandstoreitinReadValuevariable*/u8Readalue;Readalue=GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_7);6.1GPIO输入库函数6.1.4函数GPIO_ReadOutputData函数名GPIO_ReadOutputData函数原形u16GPIO_ReadOutputData(GPIO_TypeDef*GPIOx)功能描述读取指定的GPIO端口输出输入参数GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设输出参数无返回值GPIO输出数据端口值先决条件无被调用函数无例:/*ReadtheGPIOCoutputdataportandstoreitinReadValuevariable*/u16ReadValue;ReadValue=GPIO_ReadOutputData(GPIOC);6.2项目分析本节实现一个GPIO输入输出综合应用实例,使用按键控制蜂鸣器发不同声音。6.2项目分析项目分析—蜂鸣器工作原理及硬件电路按键电路,开发板共设置5个按键,用于向系统输入简单控制信息。蜂鸣器控制电路,蜂鸣器是单片机系统常用的声音输出器件,常用于报警信号输出。为区别按键按下和没有按下两种情况,需要设置GPIO引脚未输入电平信号表现出高电平,本例按键输入控制引脚应当配置为上拉输入模式(GPIO_Mode_IPU)。Q7是PNP三极管,基极控制信号PC8输出低电平导通,蜂鸣器有电流流过;PC8输出高电平Q7截止,蜂鸣器没有电流流过,改变高低电平持续时间即方波的频率,以使蜂鸣器发出不同声响。根据上述分析PC8应工作于输出方式,并且要输出高低两种电平,所以PC8管脚应工作在推挽输出模式(GPIO_Mode_Out_PP)。6.3项目实施项目实施具体步骤详细介绍如下。6.3项目实施第一步:复制第5章创建工程模板文件夹到桌面,并将文件夹改名为“4BeepKey”,将原工程模板编译一下,直到没有错误和警告为止。项目实施3SysTick4BeepKey第二步:点击“File/New”新建两个文件,将其改名为beepkey.c和beepkey.h并保存到工程模板下的APP文件夹中。并将beepkey.c文件添加到APP项目组下。6.3项目实施第三步:在beepkey.c文件中输入如下源程序,在程序中首先包含beepkey.H头文件,然后创建6个函数,voiddelay(u32i)函数为简单延时函数,voidBeepInit()为蜂鸣器初始化函数,voidKeyInit()为按键初始化函数,sound1()和sound2()为两个蜂鸣器发声程序,BeepKey()为实验核心程序,程序中设置了一个无限循环程序,在循环程序中不断判断有没有按键按下,如有则调用相应的发声程序。项目实施#include"beepkey.h"voiddelay(u32i){while(i--);}voidBeepInit() //蜂鸣器端口初始化{GPIO_InitTypeDefGPIO_InitStructure; //声明一个结构体变量,用来初始化GPIORCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);/*开启GPIO时钟*//*配置GPIO的模式和IO口*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8; //选择你要设置的IO口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //设置推挽输出模式GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //设置传输速率GPIO_Init(GPIOC,&GPIO_InitStructure); /*初始化GPIO*/}参考程序代码6.3项目实施项目实施voidKeyInit()

//按键端口初始化{

GPIO_InitTypeDefGPIO_InitStructure; //声明一个结构体变量,用来初始化GPIORCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);

/*开启GPIO时钟*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;

//设置上拉输入模式GPIO_Init(GPIOE,&GPIO_InitStructure);}voidsound1()//救护车报警{u32i=5000;while(i--) //产生一段时间的PWM波,使蜂鸣器发声{GPIO_SetBits(GPIOC,GPIO_Pin_8); //IO口输出高电平delay(i);GPIO_ResetBits(GPIOC,GPIO_Pin_8); //IO口输出低电平delay(i--);} }voidsound2()//电动车报警{

u32i=1000;while(i--) //产生一段时间的PWM波,使蜂鸣器发声{GPIO_SetBits(GPIOC,GPIO_Pin_8); //IO口输出高电平delay(i);GPIO_ResetBits(GPIOC,GPIO_Pin_8); //IO口输出低电平delay(i--);} }参考程序代码6.3项目实施项目实施voidBeepKey(){while(1){if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_0)==0) //判断按键PE0是否按下{delay_ms(10);//消抖处理if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_0)==0) //再次判断按键PE0是否按下{sound1(); }while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_0)==0); //等待按键松开}

if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1)==0) //判断按键PE1是否按下{delay_ms(10);//消抖处理if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1)==0) //再次判断按键PE1是否按下{sound2(); }while(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1)==0); //等待按键松开}}}参考程序代码实验核心程序6.3项目实施第四步:在beepkey.h文件中输入如下源程序,其中条件编译格式不变,只要更改一下预定义变量名称即可,需要将我们刚定义函数的声明加到头文件当中。另外本程序中由于需要使用SysTick定时器,所以还是需要将“systick.h”包含进来。项目实施参考代码如下:#ifndef_BEEPKEY_H#define_BEEPKEY_H#include"stm32f10x.h"#include"systick.h"voiddelay(u32i);voidBeepInit(void); voidKeyInit(void);voidsound1(void);voidsound2(void);voidBeepKey(void);#endif第五步:在main.h文件的中间部分添加#include"beepkey.h"语句,即包含beepkey.h头文件,任何时候程序中需要使用某一源文件中函数,必须先包含其头文件,否则编译是不能通过的。main.h文件的源代码如下所示。参考代码如下:#ifndef_MAIN_H#define_MAIN_H#include"stm32f10x.h"#include"LED.H"#include"beepkey.h"#endif6.3项目实施第六步:其中main函数就是三条语句,分别是调用BeepInit()函数对蜂鸣器管脚进行初始化,调用KeyInit()函数对按键管脚进行初始化,调用BeepKey函数进行按键控制不同报警声音产生,由于在BeepKey()函数已经包含无限循环结构,此处不需要重复构建。第七步:编译工程,如没有错误,则会在MDK文件夹中Objects文件夹生成“Template.hex”文件,如有错误则修改源程序直至没有错误为止。第八步:将生成的目标文件通过ISP软件下载到开发板微控制器的FLASH存储器当中,复位运行,检查实验效果。参考代码如下:#include“ma

温馨提示

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

评论

0/150

提交评论