Você está na página 1de 9

#include <p18F4550.

h>

#include <delays.h>

#pragma config WDT = OFF //No Watch Dog Timer

#pragma config FOSC = HSPLL_HS

#pragma config PWRT = OFF //No Power Up Timer

#pragma config BOR = ON //Reset when brownout detected

#pragma config LVP = OFF //Desabilita Low Voltage Program

#pragma config PBADEN = OFF // habilita RB0 , 1 ,2 ,3 e 4 como I/O

#define data PORTEbits.RE0

#define clock PORTAbits.RA5

#define DIREITA PORTBbits.RB0 //SNAKE LADO DIREITO

#define SOBE PORTBbits.RB1 //SNAKE DESCE

#define DESCE PORTAbits.RA4 //SNAKE SOBE

#define ESQUERDA PORTAbits.RA3 //SNAKE LADO ESQUERDO

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

* Rotina de comunicação com shift-register *

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

void atualiza_display(unsigned char dado)

unsigned char aux=128; //Define e inicializa a variável

while (aux!=0) //enquanto aux for diferente de 0...


{

if (dado & aux) //Verifica se o bit está em 1

data=1; //seta o DATA

else

data=0; //limpa o DATA

aux=aux/2; //Rotaciona 1 bit a direita

clock=1;

clock=0; //Gera pulso de clock

void main(void)

//IN_D1

int D7_1[10] = {0b10111111 , 0b10000110 , 0b11011011 , 0b11001111 , 0b11100110 ,


0b11101101 , 0b11111101 , 0b10000111 , 0b11111111 , 0b11100111 };

int D7_2[10] = {0b10111111 , 0b10000110 , 0b11011011 , 0b11001111 , 0b11100110 ,


0b11101101 , 0b11111101 , 0b10000111 , 0b11111111 , 0b11100111 };

int IN_D1=(0b00010000); //liga display

int IN_D2=(0b00100000); //liga display

int IN_1=0;

int IN_2=0;
//POSICIONAMENTO COMIDAS

char COMIDA_SNAKEC[10] = {0b00001000 , 0b00000010 , 0b00000001 , 0b00000100 ,


0b01000000 , 0b00000001 , 0b00001000 , 0b01000000 , 0b00001000 , 0b00000010 };

char COMIDA_SNAKEL[10] = {0b00100000 , 0b00000010 , 0b01000000 , 0b00001000 ,


0b00000001 , 0b00001000 , 0b00000001 , 0b00001000 , 0b00100000 , 0b00000010 };

char CCOMIDA_SNAKE=0;

char LCOMIDA_SNAKE=0;

//POSICIONAMENTO DA SNAKE

int L1_C=(0b00001000);

int L2_C=(0b00000100);

int L1_L=(0b00000010);

int L2_L=(0b00000010);

TRISB=0b00000011; //Configura a direção do PORTB

TRISA=0b00011100; //Configura a direção do PORTA

TRISD=0b00000000; //Configura a direção do PORTD

TRISE=0b00000000; //Configura a direção do PORTE

ADCON1=15; //Deixa os pinos da forma digital

Delay100TCYx(10);
do

//INICIO SNAKE

PORTD=0;

atualiza_display(L1_C);

PORTD=(L1_L);

Delay100TCYx(10);

PORTD=0;

atualiza_display(L2_C);

PORTD=(L2_L);

Delay100TCYx(10);

//ACIONANDO COMIDA

PORTD=0;

atualiza_display(COMIDA_SNAKEC[CCOMIDA_SNAKE]);

PORTD=(COMIDA_SNAKEL[LCOMIDA_SNAKE]);

Delay100TCYx(10);

//ACIONAMENTO DISPLAY

if (CCOMIDA_SNAKE<20) {
PORTD=0;

atualiza_display(IN_D2); // Habilita a dezena

PORTD=(D7_2[IN_2]); // atualiza o display

Delay100TCYx(10);

if (CCOMIDA_SNAKE<20) {

PORTD=0;

atualiza_display(IN_D1); // Habilita a unidade

PORTD=(D7_1[IN_1]); // atualiza o display

Delay100TCYx(10);

if
(L2_C==COMIDA_SNAKEC[CCOMIDA_SNAKE]) {

if
(L2_L==COMIDA_SNAKEL[LCOMIDA_SNAKE]) {

(CCOMIDA_SNAKE=CCOMIDA_SNAKE+1); //variável coluna da camida

(LCOMIDA_SNAKE=LCOMIDA_SNAKE+1); //variável linha da


comida

(IN_1=IN_1+1); //variável de
IN_D1

atualiza_display(COMIDA_SNAKEC[CCOMIDA_SNAKE]);
PORTD=(COMIDA_SNAKEL[LCOMIDA_SNAKE]);

Delay100TCYx(10);

if (CCOMIDA_SNAKE==10) {
//comidas partem do ponto 1

CCOMIDA_SNAKE=0;

LCOMIDA_SNAKE=0;

if (IN_1==10){ //
recebe mais um no display da dezena

IN_2=IN_2+1;

if (IN_1==10){
// quando chega a nove na unidade volta no 0

IN_1=0;

if
(IN_2==9) { // quando chega no 9 no display dois reseta os dois

CCOMIDA_SNAKE=0; // reseta comida coluna

LCOMIDA_SNAKE=0; // reseta comida linha

L1_C=(0b00000001); // reseta snake no inicio

L2_C=(0b00000010); // reseta snake no inicio

L1_L=(0b00000001); // reseta snake no inicio

L2_L=(0b00000001); // reseta snake no inicio


IN_2=0; //reseta a dezena

IN_1=0; //reseta a unidade

//LADO DIREITO

if (!DIREITA){

L1_C = L2_C;

L1_L = L2_L;

if (L2_C==64) {

L2_C=1;

else if (L2_C==8) {

L2_C=64;

else

L2_C=L2_C*2;

while(!DIREITA)

{Delay100TCYx(10);}

}
//LADO ESQUERDO

if (!ESQUERDA) {

L1_C = L2_C;

L1_L = L2_L;

if (L2_C==1) {

(L2_C=64);

else if (L2_C==64) {

(L2_C=8);

else {

L2_C=(L2_C/2);

while (!ESQUERDA)

{Delay100TCYx(10);}

//DESCE

if (!DESCE) {

L1_C = L2_C;

L1_L = L2_L;

if (L2_L == 1) {
L2_L=128;

else {

L2_L = L2_L/2;

while (!DESCE)

{Delay100TCYx(10);}

//SOBE

if (!SOBE) {

L1_C = L2_C;

L1_L = L2_L;

if (L2_L==128) {

(L2_L = 1);

else {

L2_L = (L2_L*2);

while (!SOBE)

{Delay100TCYx(10);}

}while(1);

Você também pode gostar