//-----------------------Precedência de Todas as Rotinas------------------------
void mensagem();
void max7219_init1();
//--------------------------Variáveis Globais-----------------------------------
unsigned char est_menu=0,delta=250,j=0,x,y=0,dados=0,
cnt=0,veloc_rot=0,
dia[9]={0x30,0x31,0x3B,0x30,0x31,0x3B,0x30,0x39,0x0D},
hora[9]={0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x0D},
temp[9]={0x3E,0x3E,0x32,0x35,0x33,0x3D,0x3C,0x3E,0x0D};
char seg[9]={0x37,0x06,0x00,0x37,0x4F,0x0E,0x0E,0x7E,0x00}; // "HI HELLO"
//char seg[8]={0x4F,0x77,0x5B,0x3B,0x67,0x06,0x4E,0x5F}; // "EasyPIC6"
//char msg[8]={0x4F,0x0E,0x6D,0x04,0x05,0x1D,0x00,0x00}; //ELZiro
sbit Chip_Select at RC0_bit;
sbit Chip_Select_Direction at TRISC0_bit;
//------------------------Fim das Variáveis Globais-----------------------------
//----------------------------Definições de Flags-------------------------------
#define led PORTB.F0
#define rotaciona x.F0
//------------------------Fim das Definições de Flags---------------------------
//----------Rotina que irá exibir uma mensagem deslizante no display------------
//------------------------------escrita pelo usuário----------------------------
void mensagem() {
unsigned char display[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
caracter[9]={0x4F,0x0E,0x6D,0x04,0x05,0x1D,0x00,0x00,0x00}, // Elziro
//caracter[9]={0x4f,0x77,0x5b,0x3b,0x67,0x06,0x4e,0x5f,0x00}, // "EasyPIC6"
//caracter[9]={0x37,0x06,0x00,0x37,0x4f,0x0e,0x0e,0x7e,0x00}, // "HI HELLO"
ponteiro,*aponta_carac,i;
aponta_carac = &caracter[0]; //Inicializa ponteiro
display[7] = *aponta_carac;
do {
if(cnt >= 200) { //Aqui se altera a vel. de deslizamento (speed slide)
led=~led; //Pisca LED
cnt = 0;
//Contador em anel
display[6] = display[7]; //das variáveis, fazendo com que os caracteres deslizem
display[5] = display[6]; //nos 8 display´s
display[4] = display[5];
display[3] = display[4];
display[2] = display[3];
display[1] = display[2];
display[0] = display[1];
display[7] = *aponta_carac;
aponta_carac++;
for (i = 1; i<=8; i++) {
Chip_Select = 0; // select max7219
SPI1_write(i); // send i to max7219 (digit place)
SPI1_write(display[8-i]); // send 9-i to max7219 (digit value)
Chip_Select = 1; // deselect max7219
}
}
}
while(1);
}
//-------------------------Fim da Rotina Mensagem-------------------------------
//--------Rotina que irá retorna o caracter que será escrito no display---------
void trata_dados() {
switch (dados) { // Caracter Valor em Decimal
case 0x30: dados = 0X7E; break; // 0 126
case 0x31: dados = 0X30; break; // 1 48
case 0x32: dados = 0X6D; break; // 2 109
case 0x33: dados = 0X79; break; // 3 121
case 0x34: dados = 0X33; break; // 4 51
case 0x35: dados = 0X5B; break; // 5 91
case 0x36: dados = 0X5F; break; // 6 95
case 0x37: dados = 0X70; break; // 7 112
case 0x38: dados = 0X7F; break; // 8 127
case 0x39: dados = 0X73; break; // 9 115
case 0x3A: dados = 0X77; break; // A 118
case 0x3B: dados = 0X1F; break; // b 31
case 0x3C: dados = 0X4E; break; // C 78
case 0x3D: dados = 0X3D; break; // d 61
case 0x3E: dados = 0X4F; break; // E 79
case 0x3F: dados = 0X47; break; // F 71
case 0x40: dados = 0X5E; break; // G 94
case 0x41: dados = 0X17; break; // h 23
case 0x42: dados = 0X04; break; // i 4
case 0x43: dados = 0X3C; break; // J 60
case 0x44: dados = 0X27; break; // k 39
case 0x45: dados = 0X0E; break; // L 14
case 0x46: dados = 0X76; break; // M 118
case 0x47: dados = 0X15; break; // n 21
case 0x48: dados = 0X1D; break; // o 29
case 0x49: dados = 0X67; break; // P 103
case 0x4A: dados = 0X7B; break; // q 123
case 0x4B: dados = 0X05; break; // r 5
case 0x4C: dados = 0X5B; break; // S 91
case 0x4D: dados = 0X0F; break; // t 15
case 0x4E: dados = 0X1C; break; // u 28
case 0x4F: dados = 0X3E; break; // V 62
case 0x50: dados = 0X7E; break; // W 126
case 0x51: dados = 0X37; break; // X 55
case 0x52: dados = 0X3B; break; // y 59
case 0x53: dados = 0X6D; break; // Z 109
case 0x54: dados = 0X80; break; // . (Ponto Dec.) 128
case 0x55: dados = 0X40; break; // ¨ (Segmento A do dsp) 64
case 0x56: dados = 0X01; break; // - (Hífen ou menos) 1
case 0x57: dados = 0X08; break; // _ (underline) 8
case 0x58: dados = 0X63; break; // º (Grau) 99
case 0x59: dados = 0x09; break; // = (Igual) 9
default: dados = 0X00; //blank
}
}
//------------------------Fim da Rotina Trata_Dados-----------------------------
//--------------------------Configuração MAX7219--------------------------------
void max7219_init1() {
Chip_Select = 0; // Habilita MAX
SPI1_write(0x09); // Modo de codificação
SPI1_write(0x00); // Modo não codificado
Chip_Select = 1; // Desabilita MAX
Chip_Select = 0; // Habilita MAX
SPI1_write(0x0A);
SPI1_write(0x02); // Ajusta o brilho dos display´s (00 a
Chip_Select = 1; // Desabilita MAX
Chip_Select = 0; // Habilita MAX
SPI1_write(0x0B);
SPI1_write(0x07); // Scan dos display´s
Chip_Select = 1; // Desabilita MAX
Chip_Select = 0; // Habilita MAX
SPI1_write(0x0C);
SPI1_write(0x01); // Habilita a ligação de todos os display´s
Chip_Select = 1; // Desabilita MAX
Chip_Select = 0; // Habilita MAX
SPI1_write(0x00);
SPI1_write(0xFF); // Modo não codificado
Chip_Select = 1; // Desabilita MAX
}
//--------------------------Fim Configuração MAX7219----------------------------
//-----------------Rotina para tratamento da Interrupção------------------------
void interrupt() {
if (TMR1IF_bit) {
veloc_rot++;
cnt++; // Increment counter
TMR1IF_bit = 0; // Clear TMR0IF
TMR1H = 0x80;
TMR1L = 0x00;
}
}
//------------------------Fim da Rotina de Interrupção--------------------------
//---------------------------Rotina Principal-----------------------------------
void main() {
ANSEL = 0; // Configure AN pins as digital
ANSELH = 0;
C1ON_bit = 0; // Disable comparators
C2ON_bit = 0;
PORTB = 0xFF; // Initialize PORTB
TRISB = 0b11111110; // PORTB is output
//------------Config. Timer1 para det. a vel. de desliz. da mensagem------------
TMR1IF_bit = 0; //Limpa Flag TMR1IF
TMR1H = 0x80; // Initialize Timer1 register
TMR1L = 0x00;
INTCON = 0xC0; // Set GIE, PEIE
T1CON = 1; //Habilita Timer1
TMR1IE_bit = 1; //Habilita flag interrupção Timer1
//------------------------Fim Config. Timer 1-----------------------------------
Chip_Select_Direction = 0; // Set RC0 pin as output
SPI1_init(); // Initialize SPI1 module
max7219_init1(); // initialize max7219
do {
//data();
//relogio();
//temperatura();
mensagem();
}
while(1);
}
//-------------------------Fim da Rotina Principal------------------------------