void __display(NODE *temp, int (*a)[10], int *row, int *col){ if(temp ==0) return ; ++*row; __display(temp->left, a, row, col); a[*row][(*col)++] = temp->data; __display(temp->right, a, row, col); --*row; return; }
void __display(struct node *temp, int(*a)[10], int *row, int *col) { if (temp == 0) return; ++(*row); __display(temp->left, a, row, col); a[*row][(*col)++] = temp->data; __display(temp->right, a, row, col); --(*row); return; }
int ( *__display (NODE *temp) )[10] { static int a[10][10] = {{0,}, }; static int col=0; static int row = -1; if ( temp==0 ) return a; ++row; __display( temp->left ); a[row][col++] = temp->data; __display( temp->right ); --row; return a; }
/************* Programa Principal *************************/ int main() { ADPCFG = 0xFFFF; //configura a porta B (PORTB) como entradas/saidas digitais TRISB=0; //a PORTB como saída _TRISC13=1; //PORTC<13>=1; pino T2CK (infravermelho)de entrada _TRISC14=0; //Saída Latch TRISD=0x0001; //Saída Latch _TRISE0=0; //Saida para ventoinha IFS0=0; //Flag de interrupção do timer1 IEC0 = IEC0 | 0x00C9; // bit 3 do registrador IEC0 habilita a interrupção do timer1 (IEC0bits.T1IE=1) IFS1 = 0; //Interrupção externa 1 IEC1 = IEC1 | 0x0001; //Habilitando a interrupção externa 1 IPC0 = 0x1002; //Prioridade 2 para a INT0 PR1 = 6400; //O registrador de periodo PR1 é igual a 6400 20% duty cycle PR2 = 7; //total para completar um volta da ventoinha PR3 = 62500; //1s timer 3 prescaler 1:256 T = 32000; //periodo para 500Hz T1CON=0x0000; //Prescaler fica em 1. T2CON=0x8002; //habilita o timer 2 com TCS T3CON=0x0030; //timer 3 prescaler 256 TMR1 = 0; //Zerar os timers TMR3 = 0; while(1)//laço infinito { __display(x,y,w,z); //Exibir o número de voltas/segundo __criatividade(); //Alterar a frequência para checarmos a diferença no número de volta //FMS switch(est_ini) { case 0 : prox_est = 1; //Próximo estado duty = 2; //Duty Cycle 20% break; case 1 : prox_est = 2; //Próximo estado duty = 8; //Duty Cycle 80% break; case 2 : prox_est = 0; //Próximo estado duty = 5; //Duty Cycle 50% break; } } }
void display(NODE *temp){ int i,j; int row = -1; int col = 0; int a[10][10] = {0,}; system("clear"); __display(temp, a, &row, &col); for(i=0; i<10; i++){ for(j=0; j<10; j++){ if(a[i][j]!=0) printf("%4d", a[i][j]); else printf("%4c", ' '); } printf("\n"); } getchar(); }