历史上的今天
今天是:2025年03月28日(星期五)
2019年03月28日 | STM32F103学习笔记(一):简单的按键程序
2019-03-28 来源:eefocus
通过几个按键,来控制LED灯的开关状态。没有涉及到中断,只是简单的按键程序
程序包括key.c,key.h;led.c,led.h;以及main函数
一、LED程序
led.h
#ifndef __LED__H
#define __LED__H
#include "stm32f10x.h"
#include "sys.h"
#define LED1 PBout(8)// PB8
#define LED2 PBout(9)// PB9
void LED_Init(void);
#endif
led.c
#include "stm32f10x.h"
#include "led.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_8);
GPIO_SetBits(GPIOB,GPIO_Pin_9);
}
二、KEY程序
按键采用上拉输入,外接上拉电阻
key.h
#ifndef __KEY__H
#define __KEY__H
#include "sys.h"
#include "stm32f10x.h"
#define S1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)//读取按键1
#define S2 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)//读取按键2
#define S3 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3)//读取按键3
#define S4 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_4)//读取按键4
#define KEY_ON 0
#define KEY_OFF 1
void KEY_Init(void);
u8 KEY_Scan(GPIO_TypeDef* GPIOx, u16 GPIO_Pin);
#endif
key.c
#include "key.h"
#include "delay.h"
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//打开PA口时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
//端口速度
//GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
//端口模式,此为输入上拉模式
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
u8 KEY_Scan(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
{
/*检查是否有按键按下*/
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON)
{
/*延时消抖*/
delay_ms(50);
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON)
{
/*等待按键释放*/
while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin) == KEY_ON);
return KEY_ON;
}
else
return KEY_OFF;
}
else
return KEY_OFF;
}
主函数
#include "key.h"
#include "led.h"
#include "delay.h"
#include "sys.h"
//LED灯闪5下
int main(void)
{
u8 i;
LED_Init();//LED初始化
KEY_Init();//按键初始化
delay_init();//延时初始化
while(1)
{
LED1=1;
LED2=1;
if(KEY_Scan(GPIOA,GPIO_Pin_3) == KEY_ON)
{
for(i=0;i<5;i++)
{
LED1=1;delay_ms(200);
LED1=0;delay_ms(200);
}
}
if(KEY_Scan(GPIOA,GPIO_Pin_4) == KEY_ON)
{
for(i=0;i<5;i++)
{
LED2=1;delay_ms(100);
LED2=0;delay_ms(100);
LED1=1;delay_ms(100);
LED1=0;delay_ms(100);
}
}
}
}
程序很简单,通过扫描GPIO端口电平的状态,来判断按键是否按下
史海拾趣
|
他曾经是一位IC设计工程师,他勇于想象,敢于挑战权威,在他35岁时,他创造出一个改变半导体产业格局的新器件,缔造出一个新的半导体帝国,但41岁时,他英年早逝,将财富、景仰与遗憾留于后人。 他,就是FPGA的发明人了,Ross Freeman。“当他描述 ...… 查看全部问答> |
|
2010年第一季度过去,工厂开工严重不足,公司营业额部不到2009的第一度的1/4。在此情况下,公司出招,减员增效。如果公司第二季度销售如不见起色,我估计就就有更狠招数过来。大虾们,估计是啥招?… 查看全部问答> |
|
经过升入了解LM3S8962,规划用LM3S8962开发三款产品 1. 数字式光源; 2.LED数字控制器 3.工业监控系统 头疼的是,该芯片功耗有点大,据说芯片价格有点高,阻碍大规模使用的障碍!… 查看全部问答> |
|
在做完HSMC转接板后, 我们完成了HMI板的设计和PCB绘制, 目前也已发到PCB厂家做板, 该板实现的功能:系统的人机界面模块,主要包含了3.5寸的TFT LCD、按键、编码器旋钮以及扩展功能USB通讯接口。 预计一周后板 ...… 查看全部问答> |
|
想咨询WinCE 上可不可以利用OpenGL ES开发动画,我的主板是PCM9375(CPU为X86的结构)? 如果可以实现,大体怎样实现? 谢谢各位了!… 查看全部问答> |
|
最近使用Quartus7.2老是出问题。 然后就重装一次 发现licence无效(使用破解器破解的,但是我只是学习而已,没有从事商业目的啊) 无法使用。于是全部卸载后,就将网络断开,重新安装。 安装并破解后,将网络恢复。发现不支持EP2 ...… 查看全部问答> |
|
大家好,因项目需要,我需要做个FIR滤波器程序,可是根据参考程序,自己设计的还是不行,今天实在没有办法了,把程序重要部分贴上来,大家帮我解答一下吧,谢谢了!! #include \"DSP28_Device.h\" #include\"math.h\" //FIR相关参数 ...… 查看全部问答> |
|
转 第一章笔者的入门总结 每当我们在入门之前(ARM是这样,DSP也一样),总会会有很多疑问,会有很多顾虑。我们渴望知道学习STM32前景如何?需要啥基础?难不难?适不适合我?但是什么时候能心潮澎湃地、相当着急地开始学STM32?日子在一天 ...… 查看全部问答> |




