PIC18F2550 Игра в память Программирование PIC C18 Светодиод выключен

Я использую компилятор MPLAB C18 для написания кода C для PIC18F2550, который должен управлять игрой памяти. Пользователь должен повторить последовательность мигания светодиодов, нажимая соответствующие кнопки. Немного похоже на старую игру про Саймона, но последовательность действий происходит только один раз.

До сих пор я боролся, и мне удалось включить только несколько светодиодов, но кнопки выключают светодиоды только на долю секунды, а затем снова включаются.

Вот мой код:

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

}

Любая помощь приветствуется!


person user1912837    schedule 18.12.2012    source источник
comment
В этой программе нет ничего, что на самом деле зацикливалось бы. Он просто выполнится один раз и выйдет.   -  person JasonD    schedule 18.12.2012


Ответы (1)


Вам нужен закрывающий цикл while, чтобы ваша программа выполнялась. Без него ваш код будет выполняться, и микросхема по существу сбрасывается, когда счетчик программ возвращается к началу кода. Вот почему ваши светодиоды выключаются только на короткое время, потому что ваш код снова начинает выполняться с самого начала, когда все они снова включаются.

person K-Sid    schedule 18.12.2012