打印

关于GPIO输出的问题

[复制链接]
3154|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zxz_chy|  楼主 | 2012-12-17 19:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位好,我现在有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;       
        }
}
沙发
figo20042005| | 2012-12-17 19:51 | 只看该作者
用个for循环移位置高

使用特权

评论回复
板凳
uet_cache| | 2012-12-17 21:41 | 只看该作者
同意楼上。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

148

帖子

2

粉丝