/******************************************************************************
                         AFFICHEUR AERIEN - POV DISPLAY
                    Quartz 20Mhz         PIC16F876A  MikroC Pro
                           - fusibles par defaut -
                           FB Aka HEARTY Aout 2010

******************************************************************************/
//Déclaration des variables
int i,rafraichir,scroll,vitesse;
const unsigned short ASCII[] = {

        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   25 lignes _ 200 octets

         };

//Interruption
void interrupt() {
  rafraichir++;
  vitesse++;
  TMR0   = 240;           // Valeur décimale préchargée à soustraire à 256
                          //Désactive l'interruption TMR0   (0xA0 = active)
  INTCON = 0x20;          // Set T0IE, clear T0IF (Met à 1 le bit TMROIE , Efface(0) le Flag TMROIF de débordement d'interruption)
                 }        //fin interruption

//******************************************************************************
// Fonction permettant l'affichage des caratères du tableau
void affiche()
{
 if(vitesse>=100)
                 {
                  if(rafraichir>=1000)
                                    {
                                    rafraichir=0;
                                    scroll++;
                                     }
                  if(i>=8)
                         {
                          i=0;
                         }

                  if(scroll>=200)             //Arrivé en fin de tableau
                                 {            //dernier caractère
                                 scroll=0;    //On revient au début
                                 }
                  PORTB=ASCII[i+scroll];      //Envoi sur le portB le caractère "i" et scroll
                  i++;
                  vitesse=0;
                  }
}
//******************************************************************************
// Programme principal
void main(){

  INTCON=0xA0;                      // Activer l'interruption TMR0
  OPTION_REG = 0x00;                // Assigner prescaler sur TMR0  valeur 2   = 000
  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;                              // compteur d'incrémentation
  scroll=0;                  // initialisation du nombre total d'octets dans le tableau ASCII


while(1)
        {
        affiche();
        }// fin while
} // fin main