2012-12-18 1 views
0

J'utilise MPLAB C18 compilateur pour écrire le code c pour un PIC18F2550 qui est de contrôler un jeu de mémoire. L'utilisateur doit répéter une séquence de voyants clignotants en appuyant sur les boutons correspondants. Un peu comme un vieux jeu de Simon mais avec une séquence qui arrive juste une fois.PIC18F2550 Mémoire jeu PIC C18 programmation LED éteint

J'ai eu du mal jusqu'ici et j'ai seulement réussi à obtenir un certain nombre de LED pour allumer, mais les boutons éteignent seulement les LEDs pendant une fraction de seconde puis ils reprennent.

Voici mon code à ce jour:

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

} 

Toute aide est grandement appréciée !!

+1

Il n'y a rien dans ce programme qui boucle réellement. Cela va juste s'exécuter une fois et sortir. – JasonD

Répondre

3

Vous avez besoin d'une boucle while pour garder votre programme en cours d'exécution. Sans cela, votre code s'exécutera et la puce sera essentiellement réinitialisée lorsque le compteur du programme reviendra au début du code. C'est pourquoi vos voyants s'éteignent juste un court instant parce que votre code commence à s'exécuter depuis le début où ils se rallument tous.

Questions connexes