/**************************************************************************
* Journal lumineux via 74HC595 3 matrices 8x8 LED *
* Quartz 20Mhz PIC16F876A MikroC Pro *
* - fusibles par defaut - *
* 4 Ports pour la gestion totale de l'affichage *
* FB Aka Hearty Juillet/Aout 2010 *
**************************************************************************/
#define Latch PORTC.F6
//*****************
//Déclaration des variables
int i,rafraichir,dat,vitesse;
char HC595_0,HC595_1,HC595_2;
// Tableau de caractères sur 8 bits installés en ROM
const unsigned short ASCII[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x00, 0x00, 0x00, 0x00, 0xBF, 0x00, 0x00, 0x00, // Code pour char !
0x00, 0x24, 0x7E, 0x24, 0x24, 0x7E, 0x24, 0x00, // Code pour char #
0x00, 0x26, 0x49, 0x49, 0xFF, 0x49, 0x32, 0x00, // Code pour char $
0x00, 0x46, 0x26, 0x10, 0x08, 0x64, 0x62, 0x00, // Code pour char %
0x00, 0x70, 0x8E, 0x89, 0x99, 0x76, 0xC0, 0x00, // Code pour char &
0x00, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char '
0x00, 0x7E, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char (
0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0x7E, 0x00, // Code pour char )
0x00, 0x00, 0x0A, 0x04, 0x0A, 0x00, 0x00, 0x00, // Code pour char *
0x00, 0x10, 0x10, 0x7C, 0x10, 0x10, 0x00, 0x00, // Code pour char +
0x00, 0x00, 0x00, 0x80, 0x60, 0x00, 0x00, 0x00, // Code pour char ,
0x00, 0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, // Code pour char -
0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, // Code pour char .
0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, // Code pour char /
0x00, 0x7E, 0xC1, 0xB1, 0x8D, 0x83, 0x7E, 0x00, // Code pour char 0
0x00, 0x04, 0x02, 0x01, 0xFF, 0x00, 0x00, 0x00, // Code pour char 1
0x00, 0xE6, 0x91, 0x91, 0x89, 0x89, 0x86, 0x00, // Code pour char 2
0x00, 0x42, 0x81, 0x89, 0x89, 0x89, 0x76, 0x00, // Code pour char 3
0x00, 0x30, 0x28, 0x24, 0x22, 0xFF, 0x20, 0x00, // Code pour char 4
0x00, 0x4F, 0x89, 0x89, 0x89, 0x89, 0x71, 0x00, // Code pour char 5
0x00, 0x7E, 0x89, 0x89, 0x89, 0x89, 0x72, 0x00, // Code pour char 6
0x00, 0x01, 0x01, 0xF1, 0x09, 0x05, 0x03, 0x00, // Code pour char 7
0x00, 0x76, 0x89, 0x89, 0x89, 0x89, 0x76, 0x00, // Code pour char 8
0x00, 0x4E, 0x91, 0x91, 0x91, 0x91, 0x7E, 0x00, // Code pour char 9
0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, // Code pour char :
0x00, 0x00, 0x80, 0x68, 0x00, 0x00, 0x00, 0x00, // Code pour char ;
0x00, 0x00, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, // Code pour char <
0x00, 0x00, 0x28, 0x28, 0x28, 0x28, 0x00, 0x00, // Code pour char =
0x00, 0x00, 0x00, 0x44, 0x28, 0x10, 0x00, 0x00, // Code pour char >
0x00, 0x06, 0x01, 0xB1, 0x09, 0x09, 0x06, 0x00, // Code pour char ?
0x00, 0x7E, 0x99, 0xA5, 0xA5, 0xB9, 0x5E, 0x00, // Code pour char @
0x00, 0xE0, 0x1C, 0x13, 0x13, 0x1C, 0xE0, 0x00, // Code pour char A
0x00, 0xFF, 0x89, 0x89, 0x89, 0x8E, 0x70, 0x00, // Code pour char B
0x00, 0x7E, 0x81, 0x81, 0x81, 0x81, 0x42, 0x00, // Code pour char C
0x00, 0xFF, 0x81, 0x81, 0x81, 0x42, 0x3C, 0x00, // Code pour char D
0x00, 0xFF, 0x89, 0x89, 0x89, 0x81, 0x81, 0x00, // Code pour char E
0x00, 0xFF, 0x09, 0x09, 0x09, 0x01, 0x01, 0x00, // Code pour char F
0x00, 0x7E, 0x81, 0x91, 0x91, 0x51, 0xF2, 0x00, // Code pour char G
0x00, 0xFF, 0x08, 0x08, 0x08, 0x08, 0xFF, 0x00, // Code pour char H
0x00, 0x00, 0x81, 0xFF, 0x81, 0x00, 0x00, 0x00, // Code pour char I
0x00, 0x60, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x00, // Code pour char J
0x00, 0xFF, 0x08, 0x18, 0x24, 0x42, 0x81, 0x00, // Code pour char K
0x00, 0xFF, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, // Code pour char L
0x00, 0xFF, 0x02, 0x0C, 0x0C, 0x02, 0xFF, 0x00, // Code pour char M
0x00, 0xFF, 0x03, 0x0C, 0x30, 0xC0, 0xFF, 0x00, // Code pour char N
0x00, 0x7E, 0x81, 0x81, 0x81, 0x81, 0x7E, 0x00, // Code pour char O
0x00, 0xFF, 0x11, 0x11, 0x11, 0x11, 0x0E, 0x00, // Code pour char P
0x00, 0x7E, 0x81, 0x81, 0xA1, 0x41, 0xBE, 0x00, // Code pour char Q
0x00, 0xFF, 0x09, 0x09, 0x09, 0x39, 0xC6, 0x00, // Code pour char R
0x00, 0x46, 0x89, 0x89, 0x89, 0x89, 0x72, 0x00, // Code pour char S
0x00, 0x00, 0x01, 0x01, 0xFF, 0x01, 0x01, 0x00, // Code pour char T
0x00, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x00, // Code pour char U
0x00, 0x0F, 0x30, 0xC0, 0xC0, 0x30, 0x0F, 0x00, // Code pour char V
0x00, 0x7F, 0x80, 0x70, 0x70, 0x80, 0x7F, 0x00, // Code pour char W
0x00, 0x07, 0x08, 0xF0, 0xF0, 0x08, 0x07, 0x00, // Code pour char Y
0x00, 0xC1, 0xA1, 0x91, 0x89, 0x85, 0x83, 0x00, // Code pour char Z
0x00, 0xFF, 0x81, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char [
0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, // Code pour char BackSlash
0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xFF, 0x00, // Code pour char ]
0x00, 0x00, 0x04, 0x02, 0x02, 0x04, 0x00, 0x00, // Code pour char ^
0x00, 0x00, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, // Code pour char _
0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, // Code pour char `
0x00, 0x00, 0x20, 0x54, 0x54, 0x78, 0x00, 0x00, // Code pour char a
0x00, 0x00, 0x7E, 0x48, 0x48, 0x30, 0x00, 0x00, // Code pour char b
0x00, 0x00, 0x38, 0x44, 0x44, 0x28, 0x00, 0x00, // Code pour char c
0x00, 0x00, 0x30, 0x48, 0x48, 0x7E, 0x00, 0x00, // Code pour char d
0x00, 0x00, 0x38, 0x54, 0x54, 0x58, 0x00, 0x00, // Code pour char e
0x00, 0x00, 0x7C, 0x0A, 0x0A, 0x02, 0x00, 0x00, // Code pour char f
0x00, 0x00, 0x18, 0xA4, 0xA8, 0x7C, 0x00, 0x00, // Code pour char g
0x00, 0x00, 0x7E, 0x08, 0x08, 0x70, 0x00, 0x00, // Code pour char h
0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x00, // Code pour char i
0x00, 0x00, 0x80, 0x80, 0x7A, 0x00, 0x00, 0x00, // Code pour char j
0x00, 0x00, 0x7E, 0x10, 0x28, 0x40, 0x00, 0x00, // Code pour char k
0x00, 0x00, 0x00, 0x7E, 0x40, 0x00, 0x00, 0x00, // Code pour char l
0x00, 0x7C, 0x08, 0x04, 0x78, 0x04, 0x78, 0x00, // Code pour char m
0x00, 0x00, 0x7C, 0x08, 0x04, 0x78, 0x00, 0x00, // Code pour char n
0x00, 0x00, 0x38, 0x44, 0x44, 0x38, 0x00, 0x00, // Code pour char o
0x00, 0x00, 0xFC, 0x28, 0x24, 0x18, 0x00, 0x00, // Code pour char p
0x00, 0x00, 0x18, 0x24, 0x28, 0xFC, 0x00, 0x00, // Code pour char q
0x00, 0x00, 0x7C, 0x08, 0x04, 0x08, 0x00, 0x00, // Code pour char r
0x00, 0x00, 0x08, 0x54, 0x54, 0x20, 0x00, 0x00, // Code pour char s
0x00, 0x00, 0x3E, 0x48, 0x40, 0x00, 0x00, 0x00, // Code pour char t
0x00, 0x00, 0x3C, 0x40, 0x40, 0x3C, 0x00, 0x00, // Code pour char u
0x00, 0x00, 0x1C, 0x60, 0x60, 0x1C, 0x00, 0x00, // Code pour char v
0x00, 0x3C, 0x40, 0x70, 0x70, 0x40, 0x3C, 0x00, // Code pour char w
0x00, 0x00, 0x6C, 0x10, 0x10, 0x6C, 0x00, 0x00, // Code pour char x
0x00, 0x00, 0x0C, 0x90, 0x90, 0x7C, 0x00, 0x00, // Code pour char y
0x00, 0x00, 0x64, 0x54, 0x54, 0x4C, 0x00, 0x00, // Code pour char z
0x00, 0x00, 0x08, 0x76, 0x81, 0x00, 0x00, 0x00, // Code pour char {
0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00, // Code pour char |
0x00, 0x00, 0x00, 0x81, 0x76, 0x08, 0x00, 0x00, // Code pour char }
0x00, 0x00, 0x10, 0x08, 0x10, 0x08, 0x00, 0x00, // Code pour char ~ 94 lignes
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x00, 0xFF, 0x08, 0x08, 0x08, 0x08, 0xFF, 0x00, // Code pour char H
0x00, 0xFF, 0x89, 0x89, 0x89, 0x81, 0x81, 0x00, // Code pour char E
0x00, 0xE0, 0x1C, 0x13, 0x13, 0x1C, 0xE0, 0x00, // Code pour char A
0x00, 0xFF, 0x09, 0x09, 0x09, 0x39, 0xC6, 0x00, // Code pour char R
0x00, 0x00, 0x01, 0x01, 0xFF, 0x01, 0x01, 0x00, // Code pour char T
0x00, 0x07, 0x08, 0xF0, 0xF0, 0x08, 0x07, 0x00, // Code pour char Y
0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, // Code pour char .
0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, // Code pour char .
0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, // Code pour char . 832
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // Code pour char .
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x0E, 0x1F, 0x3E, 0xFC, 0xFC, 0x3E, 0x1F, 0x0E, // Code for char ----
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x08, 0x1C, 0x8A, 0xFF, 0xFF, 0x8A, 0x1C, 0x08, // Code for char !
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x3C, 0x6E, 0xDB, 0xDF, 0xDF, 0xDB, 0x6E, 0x3C, // Code for char "
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, // Code for char #
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x00, 0x32, 0x62, 0x60, 0x60, 0x62, 0x32, 0x00, // Code for char $
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x80, 0x60, 0x7E, 0xFF, 0xFF, 0x7E, 0x60, 0x80, // Code for char %
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0xFF, 0x81, 0xBD, 0xA5, 0xA5, 0xBD, 0x81, 0xFF, // Code for char &
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x00, 0x7E, 0x42, 0x5A, 0x5A, 0x42, 0x7E, 0x00, // Code for char '
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Code pour char Espace
};
//******************************************************************************
//Interruption
void interrupt() {
rafraichir++;
vitesse++;
TMR0 = 240; // Valeur décimale préchargée à soustraire à 256
//Désactive l'interruption TMR0 (0xA0 = active)
INTCON = 0x20; // Met à 1 le bit TMROIE , Efface(0) le Flag TMROIF de débordement d'interruption
} //fin interruption
//******************************************************************************
void send_data(char HC595_0, char HC595_1, char HC595_2)
{
Spi1_Write(HC595_0); // données premier circuit
Spi1_Write(HC595_1); // données deuxième circuit
Spi1_Write(HC595_2); // données troisième circuit
Latch=1; // impulsion de validation sur LATCH
Latch=0;
}
//******************************************************************************
void test()
{ portc=0;
if(rafraichir>=10){
if (vitesse>=3000){ // vitesse de défilement
dat++; // scrolling caractères
vitesse=0;
}
rafraichir=0;
RB0_bit=1; // d'impulsion de l'entrée clock
RB0_bit=0; // du 4017
if(i>=8) // compteur sur la totalité des octets du tableau
{
i=0;
RB1_bit=1; // RAZ clock 4017
RB1_bit=0;
} // fin de If
i++;
HC595_0=ASCII[i+dat]; // données sur le premier 595
HC595_1=ASCII[(i+8)+dat]; // données sur le second 595
HC595_2=ASCII[(i+16)+dat]; // données sur le troisième 595
send_data(HC595_0,HC595_1,HC595_2); // envoie les données à afficher
Delay_ms(1);
} // fin de If
if(dat>=972) // Lorsqu'on arrive au dernier caractère
{
dat=0; // on revient au début du tableau
}
}
//******************************************************************************
// Programme principal
void main(){
INTCON=0xA0; // Activer l'interruption TMR0
OPTION_REG = 0x00; // Assigner prescaler sur TMR0 valeur 2 = 000
// TMR0=0;
ADCON0=0; // ADC désactivé
TRISA=1; // PORTA configuré en Entrée
TRISB=0; // PORTB configuré en sortie
TRISC=0; // PORTC configuré en sortie
PORTA=0; // mise à zéro des ports A
PORTB=0; // mise à zéro des ports B
PORTC=0; // mise à zéro des ports C
rafraichir=0; // rafraichissement des caractères
i=0;
dat=0; //initialisation du tableau de caractère
//Paramètre de configuration des ports pour la gestion du 74HC595
Spi1_Init_Advanced(_SPI_MASTER_OSC_DIV4,_SPI_DATA_SAMPLE_MIDDLE,_SPI_CLK_IDLE_HIGH,_SPI_LOW_2_HIGH);
//******************************************************************************
//boucle infinie
while(1)
{
test();
} //fin de while
} // fin de main
//***************************************************************************