蓝桥基础之硬件配置(一)——LED配置

蓝桥基础之硬件配置(一)——LED配置

~QQ:3020889729

~小蔡

LED初始化配置

第一步·LED硬件了解:

LED锁存器的了解:由左边标识可以知道,LED低电平点亮——为有效电平。而且该锁存器由N LE控制。
具体操作是:LED某一灯需要点亮就将某一个灯置低电平——然后紧接着将N LE先拉高,再拉低,实现锁存,从而将灯点亮。

LED锁存器

引脚的了解:
H D0到H D7由PC8到PC15控制(也就是灯受这些引脚控制而置低或是置高)。
N LE锁存器使能引脚由PD2控制。

锁存器使能引脚
LED灯的控制引脚
第二步·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初始化配置,希望对大家有所帮助——对于比赛之后,如果还是有很大的兴趣,在使用其他开发板时,配
置方法都是大同小异的——一般都是,先去查看原理图,再开始配置。
发布了4 篇原创文章 · 获赞 4 · 访问量 43

猜你喜欢

转载自blog.csdn.net/weixin_44604887/article/details/104004078