/******************************************************************************
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