2014-10-31 95 views
-4

我想在第一次完成時反轉代碼。例如,針腳1針腳2針腳3針腳4(它是完整的)現在它應該作爲針腳4針腳3針腳2針腳運行。我想按相反順序閃爍LED

我寫了這段代碼,但它不是按相反的順序工作的。請用這種方式指導我。

#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--; 
     } 
    } 
} 
+5

請縮進您的代碼,使其可讀。 – RedX 2014-10-31 07:10:49

+1

@RedX我懷疑它不會編譯:'define _XTAL_FREQ 40000000' – tangrs 2014-10-31 07:16:20

+0

我知道這是一個不同的問題,但爲什麼你使用兩個循環和一個10毫秒的延遲睡眠一秒?在Linux上調用睡眠(3C)還是在Windows上睡眠不是更好嗎? – AnotherSmellyGeek 2014-10-31 07:24:13

回答

0

做這件事,你要記住在命令你正在運行(逆轉與否)。所以你將有一個變量指示訂單是否反向,並在到達櫃檯的末端時進行更改(0和3)

而且您可以使用1和-1優化代碼它會記住順序並將其添加到a。

您的代碼將看起來像這樣在你的主:

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; 
} 

問候。

+0

現在我想打開一個序列中的led,即 現在我該怎麼辦? – user3768479 2014-10-31 16:46:07

+0

沒有邏輯方法可以做到這一點......您所要做的最好的事情是通過更改a和活動LED之間的對應關係來創建一種查找表。例如,通過交換案例2和案例3的行爲,可以在「開關案例」中更改該案例。 – cyrille 2014-10-31 19:50:37