c++ - 我想以相反的顺序闪烁 LED

标签 c++ c microcontroller pic

我想在第一次完成时反转代码。例如,引脚 1-引脚 2-引脚 3-引脚 4(已完成)现在应作为引脚 4-引脚 3-引脚 2-引脚 1 运行。

我编写了这段代码,但它不能以相反的顺序工作。请以这种方式指导我。

#include<htc.h>
__CONFIG(1,OSCSDIS & HSPLL); 
__CONFIG(2,BORDIS & PWRTDIS &WDTDIS);
__CONFIG(3,CCP2RC1); 
__CONFIG(4,LVPDIS & STVREN);
__CONFIG(5,UNPROTECT); 
__CONFIG(6,WRTEN); 
__CONFIG(7,TRU);

define _XTAL_FREQ 40000000

void delay_sec(unsigned char seconds) // This function provides delay in terms of seconds
{ 
    unsigned char i,j;
    for(i=0;i<seconds;i++)
        for(j=0;j<100;j++)
            __delay_ms(10);
} 

void led_display(char a) 
{ 
    switch(a)
    { 
        case 0: PORTB=0x01;PORTD=0x08; break;
        case 1: PORTB=0x02;PORTD=0x04; break;
        case 2: PORTB=0x04;PORTD=0x02; break; 
        case 3: PORTB=0x08;PORTD=0x01; break; 
    }
} 

void main() 
{
    TRISB=0x00; TRISD=0x00; char a,b;
    while(1) {
        led_display(a);
        a++; 
        delay_sec(1); 
        if(a==4) { 
            a--; 
        }
    }
}

最佳答案

为此,您必须记住运行的顺序(相反或不相反)。因此,您将有一个变量指示顺序是否相反,并在到达计数器的末端(0 和 3)时更改它

您可以通过使用 1 和 -1 作为记住顺序的变量并将其添加到 a 来优化代码。

您的代码在 main 中将如下所示:

int reverse = 1, 
char a = 0;

while(1)
{
led_display(a);
delay_sec(1);

if(a==3)
    {
    reverse=-1;
    }
if(a==0)
    {
    reverse=1;
    }

    a+=reverse;
}

问候。

关于c++ - 我想以相反的顺序闪烁 LED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26669227/

相关文章:

c++ - 使用 python 正则表达式从 C++ 源中提取命名空间

python - macOS - 安装 dlib 时遇到问题

c++ - 在构造函数中从 std::istream 初始化 const 类数据成员

c++ - 分形编程 - 有什么方法可以优化此代码以进行实时渲染?

c - 可靠的UDP实现设计问题

c - 在函数的返回类型中定义结构

c - 使用 iconv() 的 UTF-8 到 C/POSIX 语言环境转换失败

c - 删除外部闪存(MCF51EM256 微 Controller )

c - Uart 与 C 语言中的十六进制代码通信