LED 封装思路

2019-07-21 01:31发布

今天进行LED的操作学习,代码基本比较简单,现在想把LED的初始化和点亮、关闭进行封装。 思路: 实现  
[mw_shl_code=c,true]void LED_Init(GPIO_TypeDef* GPIOx,u32 PINx,enum Led_Def LEDx); void LED_On(enum Led_Def Led);//LED亮 void LED_Off(enum Led_Def Led);//LED灭 void LED_Tog(enum Led_Def Led)//LED状态翻转[/mw_shl_code]
  定义
[mw_shl_code=c,true]enum Led_Def { LED_0=0, LED_1=1 }; //有多少路可设多少个 static const u16 LED_NUMBER=2; static GPIO_TypeDef* LED_PORT[ LED_NUMBER - 1]; static u16 LED_PIN[ LED_NUMBER - 1]; 初始化函数的实现 //作用:初始化LED //输入:GPIOx :LED占用的GPIO,PINx:LED占用的引脚号, LEDx:LED的编号。 //作者:sworssman void LED_Init(GPIO_TypeDef* GPIOx,u32 PINx,enum Led_Def LEDx) // { u16 clockbit; //左移位数 u32 gx,ga; GPIO_Set( GPIOx, PINx,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU); //GPIO 状态设置 LED_PIN[LEDx]= PINx; LED_PORT[LEDx]=GPIOx; gx = (u32 )GPIOx; ga = (u32 )GPIOA; clockbit = (gx -ga)/0x0400 ; RCC->AHB1ENR|=1<<clockbit; //使能GPIO时钟……。…… } 状态设置的实现 void LED_On(enum Led_Def Led)//LED亮 { LED_PORT[Led]->BSRRL=LED_PIN[Led]; } void LED_Off(enum Led_Def Led)//LED灭 { LED_PORT[Led]->BSRRH=LED_PIN[Led]; } void LED_Tog(enum Led_Def Led)//LED状态翻转 { LED_PORT[Led]->ODR^=LED_PIN[Led]; }[/mw_shl_code]
    其实这样的初始化方法并比不比直接初始化方便和高效,只是拿来练下手,学习一下并为后续可以用C++编写理一下思路。  
0条回答

一周热门 更多>