PIC18F2550内存游戏PIC C18编程LED关闭

时间:2012-12-18 13:29:37

标签: c memory puzzle pic pic18

我正在使用MPLAB C18编译器为PIC18F2550编写c代码,用于控制内存游戏。用户通过按下相应的按钮重复一系列闪烁的LED。有点像旧的西蒙游戏,但序列只发生一次。

到目前为止,我一直在苦苦挣扎,我只是设法让一些LED打开,但按钮只关闭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 个答案:

答案 0 :(得分:3)

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