2012-12-18 21 views
0

我正在使用MPLAB C18编译器为PIC18F2550编写用于控制内存游戏的c代码。用户将通过按下相应的按钮来重复一系列闪烁的LED。有点像一个老西蒙的比赛,但有一个序列刚刚发生过一次。PIC18F2550存储器游戏PIC C18编程LED熄灭

到目前为止,我一直在努力挣扎,我只能设法打开一些指示灯,但按钮只是关闭指示灯一秒钟,然后再次打开。

这里是我到目前为止的代码:

#include <stdio.h> 
#include <stdlib.h> 
#include <p18f2550.h> 
#include <delays.h> 

//#pragma config WDT = OFF //Disable watchdog timer 

// LED Configuration 
#define LED_PIN_0 LATAbits.LATA0 //RA0 
#define LED_PIN_1 LATAbits.LATA1 //RA1 
#define LED_PIN_2 LATAbits.LATA2 //RA2 
#define LED_PIN_3 LATAbits.LATA3 //RA3 
#define LED_PIN_4 LATAbits.LATA4 //RA4 
#define LED_PIN_5 LATAbits.LATA5 //RA5 
#define LED_PIN_6 LATAbits.LATA6 //RA6 

// Push Button Configuration 
#define PUSH_BUTTON_0 PORTBbits.RB0 //RB0 
#define PUSH_BUTTON_1 PORTBbits.RB1 //RB1 
#define PUSH_BUTTON_2 PORTBbits.RB2 //RB2 
#define PUSH_BUTTON_3 PORTBbits.RB3 //RB3 
#define PUSH_BUTTON_4 PORTBbits.RB4 //RB4 
#define PUSH_BUTTON_5 PORTBbits.RB5 //RB5 
#define PUSH_BUTTON_6 PORTBbits.RB6 //RB6 

// Global Variables 
int led_array[7] ; // array storing the pin outs 
int button_array[7] ; 

void main() 
{ 
int i; 
ADCON1 = 0b11111111; 
TRISA = 0; // sets the LED pins to output 
TRISB = 1; // sets pushbutton pins to input 

PORTA = 0; 
PORTB = 0; 

//sequence 
led_array[0] = 1 ; 
led_array[1] = 0 ; 
led_array[2] = 1 ; 
led_array[3] = 0 ; 
led_array[4] = 1 ; 
led_array[5] = 1 ; 
led_array[6] = 0 ; 


// Configure the LEDs 
LED_PIN_0 = led_array[0] ; 
LED_PIN_1 = led_array[1] ; 
LED_PIN_2 = led_array[2] ; 
LED_PIN_3 = led_array[3] ; 
LED_PIN_4 = led_array[4] ; 
LED_PIN_5 = led_array[5] ; 
LED_PIN_6 = led_array[6] ; 


// Configure the push button array 
PUSH_BUTTON_0 = button_array[0] ; 
PUSH_BUTTON_1 = button_array[1] ; 
PUSH_BUTTON_2 = button_array[2] ; 
PUSH_BUTTON_3 = button_array[3] ; 
PUSH_BUTTON_4 = button_array[4] ; 
PUSH_BUTTON_5 = button_array[5] ; 
PUSH_BUTTON_6 = button_array[6] ; 



if (PUSH_BUTTON_0 == 1) 
{ 
led_array[0] = 0; 
} 
if (PUSH_BUTTON_1 == 1) 
{ 
led_array[1] = 1; 
} 
if (PUSH_BUTTON_2 == 1) 
{ 
led_array[2] = 0; 
} 
if (PUSH_BUTTON_3 == 1) 
{ 
led_array[3] = 1; 
} 
if (PUSH_BUTTON_4 == 1) 
{ 
led_array[4] = 0; 
} 
if (PUSH_BUTTON_5 == 1) 
{ 
led_array[5] = 0; 
} 
if (PUSH_BUTTON_6 == 1) 
{ 
led_array[6] = 1; 
} 

} 

任何帮助是极大的赞赏!

+1

该程序中实际上没有任何循环。它只会执行一次并退出。 – JasonD

回答

3

您需要一个封闭的while循环来保持程序的执行。没有它,你的代码就会执行,并且芯片将在程序计数器返回到代码开始时重置。这就是为什么你的LED只是短时间关闭的原因,因为你的代码从头再次开始执行,并重新开启。