蓝桥基础之硬件配置(一)——LED配置
~QQ:3020889729
~小蔡
LED初始化配置
第一步·LED硬件了解:
LED锁存器的了解:由左边标识可以知道,LED低电平点亮——为有效电平。而且该锁存器由N LE控制。
具体操作是:LED某一灯需要点亮就将某一个灯置低电平——然后紧接着将N LE先拉高,再拉低,实现锁存,从而将灯点亮。
引脚的了解:
H D0到H D7由PC8到PC15控制(也就是灯受这些引脚控制而置低或是置高)。
N LE锁存器使能引脚由PD2控制。
第二步·IO口配置
详——见代码
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//IO口初始化结构体,结构体要定义在函数最前边
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);//使能相应时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化IO口的函数
GPIO_InitStructure.GPIO_Pin = 0XFF00;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIOC-> ODR = 0XFFFF;//将灯全部拉高
GPIOD-> ODR |= (1<<2);//关闭使能锁存器
GPIOD-> ODR &=~(1<<2);//打开使能锁存器,锁入当前GPIOC-> ODR = 0XFFFF;
}
第三步·指定控制灯亮/灭的函数
//对灯的一个宏定义——按照IO口引脚参数来配置的
//可以直接从IO参数那里复制过来——该宏定义名字为LEDx就好
//eg:#define GPIO_Pin_8 ((uint16_t)0x0100) /*!< Pin 8 selected */
// #define LED1 ((uint16_t)0x0100) /*!< Pin 8 selected */
#define LED1 ((uint16_t)0x0100) /*!< Pin 8 selected */
#define LED2 ((uint16_t)0x0200) /*!< Pin 9 selected */
#define LED3 ((uint16_t)0x0400) /*!< Pin 10 selected */
#define LED4 ((uint16_t)0x0800) /*!< Pin 11 selected */
#define LED5 ((uint16_t)0x1000) /*!< Pin 12 selected */
#define LED6 ((uint16_t)0x2000) /*!< Pin 13 selected */
#define LED7 ((uint16_t)0x4000) /*!< Pin 14 selected */
#define LED8 ((uint16_t)0x8000) /*!< Pin 15 selected */
//state:状态——1,点亮,0,关闭
//LEDx:指的是对应的某一个灯
void LED_Control(u16 LEDx,u8 state)
{
if(state){
GPIOD-> ODR |= (1<<2);
GPIO_ResetBits(GPIOC,LEDx);
GPIOD-> ODR &=~(1<<2);}
else{
GPIOD-> ODR |= (1<<2);
GPIO_SetBits(GPIOC,LEDx);
GPIOD-> ODR &=~(1<<2);}
}
LED点亮出现的问题
① 在使用LCD时,由于引脚共用,所以存在,当我们使用灯控制函数时,我们除了得到某一指示灯正常工作外,还有其它
灯会全部亮起的情况。
基于此,我们需要在每次使用完LCD就在其后跟一个灭灯操作——但是在反复使用灭灯和点亮,所以最后的效果就是指定灯
正常工作,其他灯是灭的状态——也就解决了相应的问题。
② 在将灯作为某一个动作的指示灯时,可能会用到延时扫什么的,这时候,我们应该更多的去使用中断模块来定时中断操
作——而不是直接一个延时函数卡在那里,用中断到时间进行动作,会好很多。(而这个中断,在使用中,最简单的就是直
接在滴答定时器中断中进行,因为无需配置,直接就可以用来定时之类的——1ms发生一次中断服务函数。)
结束
这就是简单的LED初始化配置,希望对大家有所帮助——对于比赛之后,如果还是有很大的兴趣,在使用其他开发板时,配
置方法都是大同小异的——一般都是,先去查看原理图,再开始配置。