各位好,我现在有13个GPIO均设为输出,1ms(采用定时器中断)刷新输出一次,想每次只有1个高电平,如何实现比较高效,我现在的程序是这样的,但是感觉有点笨拙,还请教各位高手!
#define WX1_H GPIOA->BSRR = GPIO_Pin_8
#define WX1_L GPIOA->BRR = GPIO_Pin_8
#define WX2_H GPIOC->BSRR = GPIO_Pin_9
#define WX2_L GPIOC->BRR = GPIO_Pin_9
#define WX3_H GPIOC->BSRR = GPIO_Pin_8
#define WX3_L GPIOC->BRR = GPIO_Pin_8
#define WX4_H GPIOA->BSRR = GPIO_Pin_9
#define WX4_L GPIOA->BRR = GPIO_Pin_9
#define WX5_H GPIOA->BSRR = GPIO_Pin_10
#define WX5_L GPIOA->BRR = GPIO_Pin_10
#define WX6_H GPIOA->BSRR = GPIO_Pin_11
#define WX6_L GPIOA->BRR = GPIO_Pin_11
#define WX7_H GPIOA->BSRR = GPIO_Pin_12
#define WX7_L GPIOA->BRR = GPIO_Pin_12
#define WX8_H GPIOB->BSRR = GPIO_Pin_13
#define WX8_L GPIOB->BRR = GPIO_Pin_13
#define WX9_H GPIOB->BSRR = GPIO_Pin_15
#define WX9_L GPIOB->BRR = GPIO_Pin_15
#define WX10_H GPIOB->BSRR = GPIO_Pin_14
#define WX10_L GPIOB->BRR = GPIO_Pin_14
#define WX11_H GPIOB->BSRR = GPIO_Pin_12
#define WX11_L GPIOB->BRR = GPIO_Pin_12
#define WX12_H GPIOC->BSRR = GPIO_Pin_7
#define WX12_L GPIOC->BRR = GPIO_Pin_7
#define WX13_H GPIOC->BSRR = GPIO_Pin_6
#define WX13_L GPIOC->BRR = GPIO_Pin_6
void SysTick_Handler(void)
{
if(LED_DG<12)
{
WX13_L; //LED灯未选通
Write_LED_Data(LED_DG,LED_Flash[LED_DG]);
if(LED_DG==0X00) //LED_DG=0,选通数码管1,LED_DG=1,选通数码管2...
WX1_H;
else WX1_L;
if(LED_DG==0X01)
WX2_H;
else WX2_L;
if(LED_DG==0X02)
WX3_H;
else WX3_L;
if(LED_DG==0X03)
WX4_H;
else WX4_L;
if(LED_DG==0X04)
WX5_H;
else WX5_L;
if(LED_DG==0X05)
WX6_H;
else WX6_L;
if(LED_DG==0X06)
WX7_H;
else WX7_L;
if(LED_DG==0X07)
WX8_H;
else WX8_L;
if(LED_DG==0X08)
WX9_H;
else WX9_L;
if(LED_DG==0X09)
WX10_H;
else WX10_L;
if(LED_DG==0X0A)
WX11_H;
else WX11_L;
if(LED_DG==0X0B)
WX12_H;
else WX12_L;
LED_DG ++;
}
else
{
WX12_L;
Write_LED_Data(LED_DG,LED_Flash[LED_DG]);
WX13_H;
LED_DG = 0x00;
}
}
|