嵌入式开发LED的使用(蓝桥杯)
蓝桥杯嵌入式资源包:
工程准备
利用8-液晶驱动参考例程文件夹里面的的LCD例程来做,能复制就复制,节约时间把CT117E-LCD文件夹复制粘贴到其他地方,打开
在CT117E-LCD文件夹中新建Hardward文件夹,我把所有驱动文件都存在Hardward文件夹下。
每次新建一个文件,保存为.c或者.h文件都存在Hardward文件夹里,并在main.c中调用。
在keil工程里,新建Hardward到工程,并添加头文件路径
新建led.h和led.c
led.h
#ifndef __LED_H #define __LED_H #include "stm32f10x.h" #define LED1 GPIO_Pin_8 #define LED2 GPIO_Pin_9 #define LED3 GPIO_Pin_10 #define LED4 GPIO_Pin_11 #define LED5 GPIO_Pin_12 #define LED6 GPIO_Pin_13 #define LED7 GPIO_Pin_14 #define LED8 GPIO_Pin_15 #define LED_ALL GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15 void LED_Init(void); void LED_Control(u16 led,u8 state); #endif
led.c
#include "led.h" void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin =GPIO_Pin_2; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin =LED_ALL; GPIO_Init(GPIOC, &GPIO_InitStructure); } void LED_Control(u16 led,u8 state) { if(state==1) { GPIO_ResetBits(GPIOC,led); GPIO_SetBits(GPIOD,GPIO_Pin_2); GPIO_ResetBits(GPIOD,GPIO_Pin_2); } else if(state==0) { GPIO_SetBits(GPIOC,led); GPIO_SetBits(GPIOD,GPIO_Pin_2); GPIO_ResetBits(GPIOD,GPIO_Pin_2); } }
将led.c添加到Hardward中
在main.c中添加如下:
#include "lcd.h"
LED_Init();
可以用LED_Control函数控制灯的亮灭了
利用库函数的Example快速写LED驱动
LED的初始化驱动代码其实就是初始化了GPIO,设置对应引脚为推挽输出
LED的控制驱动代码就是对GPIO进行高低电平的输出
全是调用库函数来实现的,我们可以不必完全背过每个库函数的具体写法,直接从相应的库的Example里复制粘贴即可,大大减少比赛时间。
在比赛提供的V3.5库的"Project->STM32F10x_StdPeriph_Examples->GPIO->IOToggle"文件夹下,打开"main.c"
可以看到里面有基本上所有LED初始化驱动所需的代码,直接复制,改改对应引脚和对应使能时钟即可:
增加使能时钟GPIOC
增加设置GPIO_Pin_8 ~ GPIO_Pin_15为推挽输出
设置引脚高低电平的函数可以在keil左侧的Project里找到"stm32f10x_gpio.h",打开后拉到文件最底找到:
如果快速找到这些代码,就可以大大节省敲代码所花费的时间,把更多的时间留在逻辑层.能复制粘贴解决的事就不自己敲,因为这是比赛,有时间限制,要让自己得奖可能最大化。
本文地址:https://blog.csdn.net/weixin_45367147/article/details/107913301