; rev paulfjujo 02/10/2021; ; Ecran OLED 1,3p en SPI 132x64 grafique ou 8 lignes de 21 chars ; correctif +2 sur sens X ; CLS sur 132 pixels au lieu de 128 ; adaptation E/S pour BASE 18F26K22 ; inhibé softw PWM sur RC1 RC2 ;****************** "Ecran OLED 128x64(Ssd1306) et Ecran OLED 132x64(Ssd1106)" ***************** Errorlevel-302 ; Supprime le message "Ensure that bank bits are correct" radix dec ; par defaut en mode décimal list p=18f26K22 ; processeur utilisé #include ; Définitions des constantes ;*********************************************************************************************** ; CONFIG11H CONFIG FOSC = INTIO67 CONFIG FCMEN = OFF CONFIG IESO = OFF ; CONFIG2L CONFIG PWRTEN = OFF CONFIG BOREN = OFF CONFIG BORV = 190 ; CONFIG2H CONFIG WDTEN = OFF CONFIG WDTPS = 1 ; CONFIG3H CONFIG CCP2MX = PORTC1 CONFIG PBADEN = OFF CONFIG CCP3MX = PORTC6 CONFIG HFOFST = OFF CONFIG T3CMX = PORTC0 CONFIG P2BMX = PORTC0 CONFIG MCLRE = INTMCLR ; CONFIG4L CONFIG STVREN = OFF CONFIG LVP = OFF CONFIG XINST = OFF CONFIG DEBUG = OFF ; CONFIG5L CONFIG CP0 = OFF CONFIG CP1 = OFF CONFIG CP2 = OFF CONFIG CP3 = OFF ; CONFIG5H CONFIG CPB = OFF CONFIG CPD = OFF ; CONFIG6L CONFIG EBTR0 = OFF ; CONFIG6H CONFIG EBTR1 = OFF ; CONFIG7L CONFIG EBTR2 = OFF ; CONFIG7H CONFIG EBTR3 = OFF ;******** assignations ************ #DEFINE rst LATC,0 ; RC0 ==> reset de l'écran #DEFINE cs LATC,1 ; RC1 ==> activer ou désactiver la transmission #DEFINE dc LATC,2 ; RC2 ==> sélection du mode : commande = 0 , donnée = 1 #DEFINE pousoir PORTB,0 ; RB0 pousoir de mise en fonction du défilement de l'avion #DEFINE sck LATC,3 ; RC3 ==> horloge de synchronisation #DEFINE mosi LATC,5 ; RC5 ==> envoyer les données sur écran oled 128x64 #DEFINE led1 LATA,4 ; RA4 led rouge, témoin de mise en fonction de l'appareil ;******** "déclaration des variables" ********** CBLOCK H'20' ; bank0 loop1 :1 loop2 :1 loop3 :1 loop4 :1 loop5 :1 loop6 :1 loop7 :1 loop8 :1 loop9 :1 buzzer :1 curseur :1 registre :1 relever :1 virgule :1 passage :1 lecture :1 lettre :1 phrase :1 x1 :1 x2 :1 y1 :1 y2 :1 x :1 y :1 xdist :1 ydist :1 pas :1 erreur :1 couleur :1 fonts :1 bits :1 envoyer :1 posx :1 posy :1 temps :1 tmps :1 adresse_low :1 adresse_hi :1 donner :1 ENDC ;************ "Macro pour se positionner dans un tableau" ******** tableau MACRO adresse movlw UPPER(adresse) ; movwf TBLPTRU ; movlw HIGH(adresse) ; movwf TBLPTRH ; movlw LOW(adresse) ; movwf TBLPTRL ENDM ;********* Macro pour écrit dans l'eeprom ***** ecriture_eeprom MACRO valeur1,valeur2,valeur3 movlw valeur1 movwf adresse_hi movlw valeur2 movwf adresse_low movf valeur3,W movwf donner call eeprom_ecriture ENDM ;********** Macro pour lire dans l'eeprom ***** lecture_eeprom MACRO valeur1,valeur2 movlw valeur1 movwf adresse_hi movlw valeur2 movwf adresse_low call eeprom_lecture ENDM ;************************** "Macro pour se positionner sur l'écran" **************************** locate MACRO valeur1,valeur2,valeur3 local nombre4,good_bye4 movlw valeur3 btfss WREG,0 ; valeur3 = 0 que pour les nombres bra nombre4 ; valeur3 = 1 que pour les variables movf valeur1,W ; hauteur de l'écran 0 à 7 pages (8 lignes) movwf posy ; ne pas utiliser 8 movf valeur2,W ; longueur de l'écran 0 à 127 (128 pixels(colonnes)) movwf posx ; ne pas utiliser 128 bra good_bye4 nombre4 movlw valeur1 ; hauteur de l'écran 0 à 7 pages (8 lignes) movwf posy ; ne pas utiliser 8 movlw valeur2 ; longueur de l'écran 0 à 127 (128 pixels(colonnes)) movwf posx ; ne pas utilise 128 good_bye4 call position_oled ENDM ;************************** "Macro pour afficher le texte sur l'écran" ************************* print MACRO valeur1,valeur2,valeur3,valeur4,valeur5 local nombre5,good_bye5 clrf fonts ; remise à zéro de le fonts car nouvelle ; valeur va être affecté movlw valeur5 btfss WREG,0 ; valeur5 = 0 que pour les nombres bra nombre5 ; valeur5 = 1 que pour les variables movf valeur1,W ; movwf phrase ; longueur de la donnée movf valeur2,W ; movwf lecture ; emplacement du départ de la donnée movf valeur3,W ; fonts = 0 petit caractère movwf fonts ; fonts = 1 moyen caractère ; fonts = 2 gros caractère movf valeur4,W movwf couleur ; couleur du texte bra good_bye5 ; nombre5 movlw valeur1 ; movwf phrase ; longueur de la donnée ; movlw valeur2 ; movwf lecture ; emplacement du départ de la donnée movlw valeur3 ; fonts = 0 petit caractère movwf fonts ; fonts = 1 moyen caractère ; fonts = 2 gros caractère movlw valeur4 movwf couleur ; couleur du texte good_bye5 call affiche_oled ; ENDM ;************************** "Macro pour afficher 1 pixel sur l'écran" ************************** pset MACRO valeur1,valeur2,valeur3,valeur4 local nombre6,good_bye6 movlw valeur4 btfss WREG,0 ; valeur4 = 0 que pour les nombres goto nombre6 ; valeur4 = 1 que pour les variables movf valeur1,W ; longueur de l'écran 0 à 127 (128 pixels(colonnes)) movwf posx ; ne pas utiliser 128 movf valeur2,W ; hauteur de l'écran 0 à 63 (64 pixels) movwf posy ; ne pas utiliser 64 movf valeur3,W ; couleur du pixel movwf couleur goto good_bye6 nombre6 movlw valeur1 ; longueur de l'écran 0 à 127 (128 colonnes) movwf posx ; ne pas utiliser 128 movlw valeur2 ; hauteur de l'écran 0 à 63 (64 pixels) movwf posy ; ne pas utiliser 64 movlw valeur3 ; couleur du pixel movwf couleur good_bye6 call pset_oled ; ENDM ;*************** "Macro pour réunir deux points qui sont espacés par une ligne" **************** line MACRO valeur1,valeur2,valeur3,valeur4,valeur5,valeur6 local nombre7,good_bye7 movlw valeur6 btfss WREG,0 ; valeur6 = 0 que pour les nombres bra nombre7 ; valeur6 = 1 que pour les variables movf valeur1,W ; début de la longueur movwf x1 ; movf valeur2,W ; début de la hauteur movwf y1 ; movf valeur3,W ; fin de la longueur movwf x2 ; movf valeur4,W ; fin de la hauteur movwf y2 ; movf valeur5,W ; couleur du pixel movwf couleur ; bra good_bye7 nombre7 movlw valeur1 ; début de la longueur movwf x1 ; movlw valeur2 ; début de la hauteur movwf y1 ; movlw valeur3 ; fin de la longueur movwf x2 ; movlw valeur4 ; fin de la hauteur movwf y2 ; movlw valeur5 ; couleur du pixel movwf couleur ; good_bye7 call ligne ENDM ;******************************* "adresse de depart après reset" ******************************* ORG H'0' bra debut ORG H'8' retfie ORG H'18' retfie debut ;***************** "configuration de la bank sélectionné du microcontrôleur" ******************* movlw B'00000000' movwf BSR ;******************** "configuration de l'oscillateur du microcontrôleur" ********************** movlw B'01110100' ; oscillateur à 16 Mhz, fréquence stable sans PLL (16 Mhz ; movlw B'01100100' ; oscillateur à 8 Mhz, fréquence stable si PLL (8 * 4) = 32 Mhz ; movlw B'01010010' ; oscillateur à 4 Mhz, fréquence stable ; movlw B'01000010' ; oscillateur à 2 Mhz, fréquence stable ; movlw B'00110010' ; oscillateur à 1 Mhz, fréquence stable movwf OSCCON movlw B'00000000' ; movwf OSCCON2 ; ;**************************** configuration du registre OSCTUNE ******************************** ; movlw B'010000000' ; bit 6 à 1 : PLL * 4 movlw B'000000000' ; bit 6 à 0 : PLL désactivé movwf OSCTUNE ;*************************** configuration du registre ANSELA ********************************** movlw B'00000000' ; en mode numérique : movwf ANSELA ; en mode E/S : 2(RA0), 3(RA1), 4(RA2), 5(RA3), 7(RA5) ;**************************** configuration du registre ANSELB ********************************* movlw B'00000000' ; en mode numérique : movwf ANSELB ; en mode E/S : 21(RB0), 22(RB1) 23(RB2), 24(RB3), 25(RB4), 26(RB5) ;**************************** configuration du registre ANSELC ********************************* movlw B'00000000' ; en mode numérique : movwf ANSELC ; en mode E/S : 13(RC2), 14(RC3), 15(RC4), 16(RC5), 17(RC6), 18(RC7) ;*************************** configuration du registre ADCON0 ********************************** movlw B'00000000' ; b0 = ADON mise en service le convertiseur 0 = arrêt : 1 = marche movwf ADCON0 ; b1 = GO/DONE indique la fin de la conversion analogique, et permet de lancer la conversion ; b2 à b6 = réglage de la sélection du canal ;*************************** configuration du registre ADCON1 ********************************** movlw B'00000000' ; b2 à b3 = 00 : sélection de la tension de reférence, Vref+ = Vss movwf ADCON1 ; b0 à b1 = 00 : sélection de la tension de reférence, Vref- = Vdd ;*************************** configuration du registre ADCON2 ********************************** movlw B'00110110' ; b0 à b2 = FOSC/64 movwf ADCON2 ; b3 à b5 = 16 TAG ; ; b7 = détermine si le résultat de la conversion ; sera justifié à droite = 1 ou à gauche = 0 ;*********************************************************************************************** movlw B'00000000' ; comparateur 1 off movwf CM1CON0 movlw B'00000000' ; comparateur 2 off movwf CM2CON0 ;*********************** "configuration du pwm du microncontrôleur" **************************** ; movlw D'255' ; réglage du "débordement" de TMR2 ; movwf PR2 ; PR2 D'255' donc fréquence à 1950 Hz avec prédiviseur à 4; ; ; movlw B'00000101' ; "prédiviseur à 4" bit zéro à 1, bit un à 0 ; movwf T2CON ; "timer on", bit deux à 1 (mise en route du timer2. 0 : arrêt. 1 : marche) ; "postdiviseur à 1" bit trois à 0, bit quatre à 0, bit cinq à 0, bit six à 0 ; dans registre de contrôle ; movlw B'00001100' ; "1100" 4 bits mode pwm ; movwf CCP1CON ; "00" 2 bits pour variation du rapport cyclique(RC2) ; movwf CCP2CON ; "00" 2 bits pour variation du rapport cyclique(RC1) ;***************** configuration des registres TRISA & TRISB & TRISC & TRISE ******************* movlw B'00000011' ; RA0(2), RA1(3), RA2(4), RA3(5), RA4(6), RA5(7), RA6(10), RA7(9) movwf TRISA ; movlw B'11111111' ; RB0(21), RB1(22), RB2(23), RB3(24), RB4(25), RB5(26), RB6(27), RB7(28) movwf TRISB ; movlw B'10000000' ; RC0(11), RC1(12), RC2(13), RC3(14), RC4(15), RC5(16), RC6(17), RC7(18) movwf TRISC ; movlw B'00001000' ; RE3(1) movwf TRISE ; ; VSS(8), VSS(19), VDD(20) ;**************************** configuration du registre SSP1CON1 ******************************* ; movlw B'01000000' ; B7 = 0 : lecture des données au milieu ; movwf SSP1STAT ; B'01000000' ; movlw B'00100001' ; B0 ...B3 = spi en mode Maître, clock = FOSC/16, B5 = polarité négative ; movwf SSP1CON1 ; 16 /16(quartz) = 1Mbps B'00100001' ;**************************** configuration du registre INTCON2 ******************************** movlw B'00000000' ; B7 = 0 résistances en service movwf INTCON2 ; ;**************************** configuration du registre WPUB *********************************** movlw B'11111111' ; tirage de résistance sur : RB0(21), RB1(22), RB2(23), RB3(24), RB4(25), RB5(26), RB6(27), RB7(28) movwf WPUB ; pas de tirage de résistance sur : ;**************************** configuration du registre INTCON ********************************* movlw B'00000000' ; movwf INTCON ; interruption hors service ;************************************ départ du programme ************************************** ; clrf CCPR1L ; sortie du pwm(RC2) ; clrf CCPR2L ; sortie du pwm(RC1) clrf PORTA clrf PORTB clrf PORTC clrf LATA clrf LATB clrf LATC ;*********************************************************************************************** bsf cs ; désactivé l'émision du port spi ;**************************** " témoin visuel de mise en fonction" ***************************** movlw D'2' ; pour 2 clignotements movwf loop5 clignote bsf led1 rcall _1s bcf led1 rcall _1s decfsz loop5,F bra clignote ;******************************** "reset de l'écran OLED 128x64" ******************************* bsf cs ; transmission arrêté call _10ms bcf rst ; rcall _10ms ; bsf rst ; call _10ms ;*************************** "initialisation de l'écran OLED 128x64" *************************** movlw D'32' ; longueur de la donnée movwf phrase tableau configuration ; macro : qui permets de se positionner à l'adresse demandé ini_oled tblrd*+ ; effectue la lecture, et ensuite incrémente TBLPTR movff TABLAT,WREG ; transfére la donnée récupére dans W rcall command_oled ; charge la configuration nop nop nop nop nop nop nop nop nop nop decfsz phrase,F bra ini_oled ;*********************************************************************************************** incf phrase,F ; ;*********************************************************************************************** ici: rcall cls_oled ; efface l'écran ;*********************************************************************************************** locate 0,2,0 ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran print 21,0,0,0,0 ; macro : longueur de la donnée, emplacement du départ de la donnée à lire locate 1,2,0 print 21,22,0,0,0 locate 2,2,0 print 21,44,0,0,0 locate 3,2,0 print 21,66,0,0,0 locate 4,2,0 print 21,88,0,0,0 locate 5,2,0 print 21,110,0,0,0 locate 6,2,0 print 21,132,0,0,0 locate 7,2,0 print 21,154,0,0,0 ;************ "pause de 5 secondes, laisser temps de voir ce qu'il y a sur l'écran" ************ rcall _1s rcall _1s rcall _1s rcall _1s rcall _1s ;******************************************************************************************* rcall cls_oled ; efface l'écran ;**************************** "afficher une image sur tout l'écran" **************************** tableau graphique1 ; macro qui permets de se positionner a l'adresse demandé rcall graphique_oled ; affichage graphique N°1 ;************ "pause de 5 secondes, laisser temps de voir ce qu'il y a sur l'écran" ************ rcall _1s rcall _1s rcall _1s rcall _1s rcall _1s ;*********************************************************************************************** rcall cls_oled ; efface l'écran ;**************************** "afficher une image sur tout l'écran" **************************** tableau graphique2 ; macro qui permets de se positionner a l'adresse demandé rcall graphique_oled ; affichage graphique N°2 ;*********************************************************************************************** locate 0,2,0 ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran print 21,132,0,0,0 ; macro : longueur de la donnée, emplacement du départ de la donnée à lire locate 7,2,0 ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran print 21,154,0,0,0 ; macro : longueur de la donnée, emplacement du départ de la donnée à lire ;*********************************************************************************************** movlw 0x27 ; défilement horizontal rcall command_oled ; droite vers gauche 0x26, gauche vers la droite 0x27 movlw 0x00 ; rcall command_oled ; movlw 0x02 ; début de la page du défilemnt rcall command_oled movlw 0x07 ; vitesse du défilement, du plus vite, au plus lent rcall command_oled ; 0x07, 0x04, 0x05, 0x00, 0x06, 0x01, 0x02, 0x03 movlw 0x06 ; fin de la page du défilement rcall command_oled movlw 0x00 ; valider la fin de configuration du défilement rcall command_oled movlw 0xFF ; valider la fin de configuration du défilement rcall command_oled ;*********************************************************************************************** action btfsc pousoir bra $-D'2' movlw 0x2F ; défilement hors fonction rcall command_oled ; avion à l'arrêt rcall _10ms btfss pousoir bra $-D'2' movlw 0x2E ; défilement en fonction rcall command_oled ; avion en vol rcall _10ms bra action ;*********************************************************************************************** terminer bsf led1 ; signal la fin nop bra terminer ;*********************************************************************************************** ;************************ "affiche la lettre ou le texte sélectionné" ************************** affiche_oled tableau message ; macro : qui permets de se positionner à l'adresse demandé bcf STATUS,C ; pour additionner, mettre carry à zéro pour movf lecture,W ; addwf TBLPTRL,F ; btfsc STATUS,C ; si retenu ajouter à l'adresse high incf TBLPTRH,F ; incf lecture,F ; lecture pour le prochain passage tblrd* ; effectue la lecture de l’octet pointé par TBLPTR movf TABLAT,W ; transfére le caractère récupéredans TABLAT vers W lettre_oled movwf lettre ; transfére le caractère récupére dans "lettre" mullw D'5' ; multiplier W par 5, résultat dans PRODH PRODL(largeur de des fonts) movlw D'5' ; 5 passages pour créer un caractère(largeur des fonts) movwf passage tableau ascii ; macro : qui permets de se positionner à l'adresse demandé bcf STATUS,C ; pour additionner, mettre carry à zéro pour ; ne pas avoir d'erreur sur l'addition movf PRODL,W ; addwf TBLPTRL,F ; se positionner à l'adresse low btfsc STATUS,C ; si retenu ajouter à l'adresse high incf TBLPTRH,F ; movf PRODH,W ; addwf TBLPTRH,F ; se positionner à l'adresse high ret2 tblrd*+ ; effectue la lecture, et ensuite incrémente TBLPTR movff TABLAT,WREG ; transfére la donnée récupére dans W rcall donner_oled ; decfsz passage ; bra ret2 ; movlw B'00000000' ; avance d'un pixel sur la largeur rcall donner_oled decfsz phrase,F ; "phrase" est la longueur du texte bra affiche_oled ; incf phrase,F ; préparation au cas ou il faudrait lire un caractére return ;*********************"efface l'écran & position le curseur au début" ************************** cls_oled locate 0,0,0 movlw D'8' movwf loop7 movlw D'132' ; (128x64)/8 = 1056 movwf loop8 cls movlw B'00000000' rcall donner_oled ; effacer les données existantes decfsz loop8,F bra cls bsf loop2,7 ; 128 incf posy,F ; permet de se repositionner à la ligne clrf posx ; longueur à zéro rcall position_oled ; se placer à la ligne demandé decfsz loop7,F bra cls return ;************************** "remplissage de l'écran par un dessin" ***************************** graphique_oled locate 0,0,0 ; macro : se placer à la hauteur de l'écran, se placer à la largeur de l'écran movlw D'8' movwf loop1 movlw D'128' ; (132x64)/8 = 1056 movwf loop2 clrf loop8 lire_graphique tblrd*+ ; effectue la lecture, et ensuite incrémente TBLPTR movff TABLAT,WREG ; rcall donner_oled ; decfsz loop2,F bra lire_graphique bsf loop2,7 ; 128 incf posy,F ; permet de se repositionner à la ligne clrf posx ; longueur à zéro rcall position_oled ; se placer à la ligne demandé decfsz loop1,F bra lire_graphique return ;*********************************************************************************************** ligne clrf erreur clrf tmps+0 clrf tmps+1 clrf ydist clrf xdist clrf pas ;----------------------------------------------------------------------------------------------- movf x1,W ; x_dist = abs(x2-x1) subwf x2,W movwf xdist btfsc STATUS,C bra st1 movf xdist,W sublw D'0' movwf xdist ;----------------------------------------------------------------------------------------------- st1 movf y1,W ; y_dist = abs(y2-y1) subwf y2,W movwf ydist btfsc STATUS,C bra st2 movf ydist,W sublw D'0' movwf ydist ;----------------------------------------------------------------------------------------------- st2 movf y1,W ; if y2-y1 < -xdist then subwf y2,W movwf tmps+0 btfsc STATUS,C ; est ce que (y2-y1) est négatif bra st3 movf tmps+0,W sublw D'0' movwf tmps+0 movf tmps+0,W ; subwf xdist,W ; btfss STATUS,C bra permute ;----------------------------------------------------------------------------------------------- st3 movf x1,W ; if x2-x1 <= -ydist then subwf x2,W movwf tmps+0 btfsc STATUS,C ; est ce que (x2-x1) est négatif bra coin movf tmps+0,W sublw D'0' movwf tmps+0 movf tmps+0,W subwf ydist,W btfsc STATUS,C bra coin ;----------------------------------------------------------------------------------------------- permute movf x1,W ; swap x1,x2 movwf tmps+0 movf x2,W movwf tmps+1 movf tmps+1,W movwf x1 movf tmps+0,W movwf x2 movf y1,W ; swap y1,y2 movwf tmps+0 movf y2,W movwf tmps+1 movf tmps+1,W movwf y1 movf tmps+0,W movwf y2 ;----------------------------------------------------------------------------------------------- coin movf x1,W ; if x1 < x2 then xpas = 1 else xpas = -1 subwf x2,W btfsc STATUS,C bsf pas,0 ; x1 < x2 btfss STATUS,C bcf pas,0 ; x1 > x2 movf y1,W ; if y1 < y2 then ypas = 1 else ypas = -1 subwf y2,W btfsc STATUS,C bsf pas,1 ; y1 < y2 btfss STATUS,C bcf pas,1 ; y1 > y2 ;----------------------------------------------------------------------------------------------- movf ydist,W ; if ydist > xdist then subwf xdist,W btfsc STATUS,C bra remb3 bcf STATUS,C rrcf ydist,W movwf erreur ; erreur = ydist/2 movf x1,W ; x = x1 movwf x ;----------------------------------------------------------------------------------------------- movf y1,W ; for y = y1 TO y2 movwf y decf y,F remb1 incf y,F pset x,y,couleur,1 ; pset x,y,couleur,1 movf xdist,W subwf erreur,F ; erreur = erreur - xdist ; if erreur < 0 then btfsc STATUS,C bra remb2 btfsc pas,0 incf x,F ; x = x + 1 btfss pas,0 decf x,F ; x = x - 1 movf ydist,W addwf erreur,F ; erreur = erreur + ydist remb2 movf y2,W xorwf y,W btfss STATUS,Z bra remb1 ; next y return ;----------------------------------------------------------------------------------------------- remb3 ; else bcf STATUS,C rrcf xdist,W ; erreur = xdist/2 movwf erreur ; movf y1,W ; y = Y1 movwf y movf x1,W movwf x decf x,F remb4 ; for x = x1 TO x2 incf x,F pset x,y,couleur,1 ; pset x,y,couleur,1 movf ydist,W subwf erreur,F ; erreur = erreur - ydist btfsc STATUS,C ; if erreur < 0 then bra remb5 btfsc pas,1 incf y,F ; y = y + 1 btfss pas,1 decf y,F ; y = y - 1 movf xdist,W addwf erreur,F ; erreur = erreur + xdist remb5 ; end if movf x2,W xorwf x,W btfss STATUS,Z bra remb4 ; next x return ;************************************ "écriture d'un pixel" ************************************ pset_oled movf posy,W ; movwf relever ; sauvegarde de la hauteur de 0 à 63 (64 pixels) bcf STATUS,C ; se positionner à la page rrcf posy,F ; bcf STATUS,C ; rrcf posy,F ; bcf STATUS,C ; rrcf posy,F ; rcall position_oled ; se positionné à la page demandé, et la longueur demandé ; movf posy,W ; mullw D'8' ; début de la page, (page x 8 bits), résultat dans PRODH PRODL ; movf PRODL,W ; subwf relever,F ; position actuelle, (posy - (page x 8 bits)) movlw B'00000001' ; movwf loop9 pset_re movf relever,W ; xorlw D'0' btfss STATUS,Z ; bra pset_no bra pset_en ; pset_no decf relever,F bcf STATUS,C rlcf loop9,F ; bra pset_re pset_en lfsr FSR1,H'300' ; H'300' bank3 debut de l'écran qui est en mémoire sdram dans les ; bank3, bank4, bank5, bank6, bank7 movf posy,W mullw D'128' ; page x (128 pixels(colonnes)) = nombre d'octet bcf STATUS,C ; mettre carry à zéro, pour effectuer l'addition movf posx,W ; addwf PRODL,F ; nombre d'octet + posx = nombre d'octet total btfsc STATUS,C ; regarder si il y a eu une retenu de l'addition incf PRODH,F ; ajouter 1 si retenu, en mémoire high movf PRODH,W ; addwf FSR1H,F ; se positionner a l'adresse en mémoire high bcf STATUS,C ; mettre carry à zéro, pour effectuer l'addition movf PRODL,W ; addwf FSR1L,F ; se positionner a l'adresse en mémoire low btfsc STATUS,C ; regarder si il y a eu une retenu de l'addition incf FSR1H,F ; ajouter 1 si retenu, en mémoire high movf INDF1,W ; récupérer la valeur qui est en mémoire iorwf loop9,W ; fusionner les deux valeurs, en mettant le résultat dans W movff WREG,INDF1 ; mémoriser la donnée en sdram pset_sp rcall donner_oled ; envoies des données, pour affichage sur l'ecran return ;******************************** "position de y et x avec page" ******************************* position_oled ; 132x64(SH1106) & 128x64(SSD1306) btfsc posy,3 ; protection pour ne pas dépassé 111 =>7 return btfsc posx,7 ; protection pour ne pas dépassé 1000000 => 128 return movf posy,W addlw 0xB0 ; hauteur de l'écran 0 à 7 pages (8 lignes) rcall command_oled movf posx,W ; largeur de l'écran 0 à 127 (128 pixels(colonnes)) andlw B'00001111' ; rcall command_oled ; envoi du poid faible movf posx,W ; swapf WREG,W ; andlw B'00000111' ; envoi du poid fort bsf WREG,4 rcall command_oled ; return ;*********************************************************************************************** ;----------------- "fonction pour mettre l'écran oled 128x64 en mode commande" ----------------- command_oled bcf dc ; DC = 0 en mode commande bra spi ;------------------ "fonction pour mettre l'écran oled 128x64 en mode donnée" ------------------ donner_oled bsf dc ; DC = 1 en mode donnée bra spi ; ;************************************* "mode SPI bit bang" ************************************* spi movwf envoyer movlw D'8' ; envoies de 8 bits movwf bits bcf cs ; marche ev1_oled btfss envoyer,7 ; 1 lecture sur le bit 7 bra ev2_oled bsf mosi ; envoie 1 bsf sck ; bcf sck ; bra ev3_oled ev2_oled bcf mosi ; envoie 0 bsf sck ; bcf sck ; ev3_oled rlncf envoyer,F ; rotation des bits à gauche sans carry decfsz bits,F bra ev1_oled bsf cs return ;**************************************** "SPI normal" ***************************************** ;spi ; bcf cs ; movwf SSP1BUF ;attends ; btfss SSP1STAT,BF ; ; bra attends ; bsf cs ; movf SSP1BUF,W ; ; return ;************************* "pause de 1 seconde pour horloge de 16 Mhz" ************************* _1s movlw D'190' movwf loop1 movlw D'75' movwf loop2 movlw D'21' movwf loop3 decfsz loop1,F bra $-D'2' decfsz loop2,F bra $-D'6' decfsz loop3,F bra $-D'10' return ;**************** "pause de 500 millisecondes pour 18F avec horloge de 16 Mhz" ***************** _500ms movlw D'93' movwf loop1 movlw D'38' movwf loop2 movlw D'11' movwf loop3 decfsz loop1,F bra $-D'2' decfsz loop2,F bra $-D'6' decfsz loop3,F bra $-D'10' return ;********************* "pause de 100 millisecondes pour horloge de 16 Mhz" ********************* _100ms movlw D'119' movwf loop1 movlw D'8' movwf loop2 movlw D'3' movwf loop3 decfsz loop1 bra $-D'2' decfsz loop2 bra $-D'6' decfsz loop3 bra $-D'10' return ;********************** "pause de 10 millisecondes pour horloge de 16 Mhz" ********************* _10ms movlw D'241' movwf loop1 movlw D'52' movwf loop2 decfsz loop1 bra $-D'2' decfsz loop2 bra $-D'6' return ;****************************** "pour écrit dans l'eeprom" ************************************* eeprom_ecriture movf adresse_hi,W ; adresse du poid fort movwf EEADRH ; movf adresse_low,W ; adresse du poid faible movwf EEADR ; movf donner,W ; movwf EEDATA ; écriture de la donnée bcf EECON1,EEPGD ; préparation à l'autorisation bcf EECON1,CFGS ; access eeprom bsf EECON1,WREN ; Enable writes bcf INTCON,GIE ; couper les interruptions btfsc INTCON,GIE ; contrôl si les interruptions sont bien coupés bra $-D'2' ; remonte à la ligne 2 jusqu'a coupures des interruptions movlw H'55' ; séquence spécifique (c'est comme ça, il faut le savoir) movwf EECON2 ; séquence spécifique movlw H'AA' ; séquence spécifique movwf EECON2 ; séquence spécifique bsf EECON1,WR ; lance une opération d'écriture btfsc EECON1,WR ; on attend que l'operation d'ecriture soit finie (de l'ordre de la ms bra $-D'2' ; remonte à la ligne 2 jusqu'a fin d'écriture bcf EECON1, WREN ; interdiction de l'écriture return ;******************************** "pour lire dans l'eeprom" ************************************ eeprom_lecture movf adresse_hi,W ; adresse du poid fort movwf EEADRH ; movf adresse_low,W ; adresse du poid faible movwf EEADR ; bcf EECON1,EEPGD ; préparation à la lecture bcf EECON1,CFGS ; access EEPROM bsf EECON1,RD ; lecture de l'EEPROM movf EEDATA,W ; la valeur lue dans l'éeprom est placée dans W movwf donner return ;*********************************************************************************************** ;******************************** "configuration de l'écran" *********************************** ;*********************************************************************************************** ORG H'8D9C' configuration db 0xAE,0xD5,0x80,0xA8,0x3F,0xD3,0x00,0x40,0x8D,0x14,0x20,0x00,0xA1,0xC8,0xDA,0x12 db 0x81,0x7F,0xD9,0xF1,0xDB,0x40,0xA4,0xA6,0xAF,0x21,0x00,0x7F,0x22,0x00,0x07,0x2E ;*********************************************************************************************** ;************************* "affichage des phrases, 255 octets maximum" ************************* ;*********************************************************************************************** ORG H'8E00' message db "12345-A-9012345678901" ; ‚ 0 db "123456-B-012345678901" ; ‚ 22 db "1234567-C-12345678901" ; ‚ 44 db "12345678-D-2345678901" ; ‚ 66 db "123456789-E-345678901" ; ‚ 88 db "1234567890-F-45678901" ; ‚ 110 db "12345678901-G-5678901" ; ‚ 132 db "123456789012-H-567890" ; ‚ 154 db " Vol de l'avion A330 " ; ‚ 154 db " Mettez vos ceintures" ; ‚ 176 db " Avion A330 arrete " ; ‚ 176 ;*********************************************************************************************** ;***************************** "table des caractères ASCII" ************************************ ;*********************************************************************************************** ORG H'9000' ascii db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x14 db 0x7F,0x14,0x7F,0x14,0x24,0x2A,0x7F,0x2A,0x12,0x26,0x16,0x08,0x34,0x32,0x76,0x49 db 0x55,0x22,0x50,0x00,0x00,0x05,0x03,0x00,0x00,0x1C,0x22,0x41,0x00,0x00,0x41,0x22 db 0x1C,0x00,0x14,0x08,0x3E,0x08,0x14,0x08,0x08,0x3E,0x08,0x08,0x00,0x50,0x30,0x00 db 0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x60,0x60,0x00,0x00,0x20,0x10,0x08,0x04,0x02 db 0x3E,0x51,0x49,0x45,0x3E,0x00,0x42,0x7F,0x40,0x00,0x42,0x61,0x51,0x49,0x46,0x21 db 0x41,0x45,0x4B,0x31,0x18,0x14,0x12,0x7F,0x10,0x27,0x45,0x45,0x45,0x39,0x3C,0x4A db 0x49,0x49,0x30,0x01,0x01,0x79,0x05,0x03,0x36,0x49,0x49,0x49,0x36,0x06,0x49,0x49 db 0x29,0x1E,0x00,0x36,0x36,0x00,0x00,0x00,0x56,0x36,0x00,0x00,0x00,0x08,0x14,0x22 db 0x41,0x14,0x14,0x14,0x14,0x14,0x41,0x22,0x14,0x08,0x00,0x02,0x01,0x51,0x09,0x06 db 0x3E,0x41,0x49,0x55,0x5E,0x7E,0x11,0x11,0x11,0x7E,0x7F,0x49,0x49,0x49,0x36,0x3E db 0x41,0x41,0x41,0x22,0x7F,0x41,0x41,0x22,0x1C,0x7F,0x49,0x49,0x49,0x41,0x7F,0x09 db 0x09,0x09,0x01,0x3E,0x41,0x49,0x49,0x3A,0x7F,0x08,0x08,0x08,0x7F,0x00,0x41,0x7F db 0x41,0x00,0x20,0x41,0x41,0x3F,0x00,0x7F,0x08,0x14,0x22,0x41,0x7F,0x40,0x40,0x40 db 0x40,0x7F,0x02,0x0C,0x02,0x7F,0x7F,0x04,0x08,0x10,0x7F,0x3E,0x41,0x41,0x41,0x3E db 0x7F,0x09,0x09,0x09,0x06,0x3E,0x41,0x51,0x21,0x5E,0x7F,0x09,0x19,0x29,0x46,0x46 db 0x49,0x49,0x49,0x31,0x01,0x01,0x7F,0x01,0x01,0x3F,0x40,0x40,0x40,0x3F,0x1F,0x20 db 0x40,0x20,0x1F,0x3F,0x40,0x3C,0x40,0x3F,0x63,0x14,0x08,0x14,0x63,0x07,0x08,0x70 db 0x08,0x07,0x61,0x51,0x49,0x45,0x43,0x00,0x7F,0x41,0x41,0x00,0x02,0x04,0x08,0x10 db 0x20,0x00,0x41,0x41,0x7F,0x00,0x04,0x02,0x01,0x02,0x04,0x40,0x40,0x40,0x40,0x40 db 0x00,0x01,0x02,0x04,0x00,0x20,0x54,0x54,0x54,0x78,0x7F,0x48,0x44,0x44,0x38,0x38 db 0x44,0x44,0x44,0x20,0x38,0x44,0x44,0x48,0x7F,0x38,0x54,0x54,0x54,0x18,0x08,0x7E db 0x09,0x01,0x02,0x08,0x54,0x54,0x54,0x3C,0x7F,0x08,0x04,0x04,0x78,0x00,0x44,0x7D db 0x40,0x00,0x20,0x40,0x44,0x3D,0x00,0x7F,0x10,0x28,0x44,0x00,0x00,0x41,0x7F,0x40 db 0x00,0x7C,0x04,0x18,0x04,0x78,0x7C,0x08,0x04,0x04,0x78,0x38,0x44,0x44,0x44,0x38 db 0x7C,0x14,0x14,0x14,0x08,0x08,0x14,0x14,0x18,0x7C,0x7C,0x08,0x04,0x04,0x08,0x48 db 0x54,0x54,0x54,0x20,0x04,0x3F,0x44,0x40,0x20,0x3C,0x40,0x40,0x20,0x7C,0x1C,0x20 db 0x40,0x20,0x1C,0x3C,0x40,0x38,0x40,0x3C,0x44,0x28,0x10,0x28,0x44,0x0C,0x50,0x50 db 0x50,0x3C,0x44,0x64,0x54,0x4C,0x44,0x00,0x08,0x36,0x41,0x00,0x00,0x00,0x7F,0x00 db 0x00,0x00,0x41,0x36,0x08,0x00,0x08,0x08,0x2A,0x1C,0x08,0x08,0x1C,0x2A,0x08,0x08 db 0x1E,0xA1,0xE1,0x21,0x10,0x3D,0x40,0x40,0x20,0x7D,0x38,0x56,0x55,0x54,0x18,0x20 db 0x56,0x55,0x56,0x78,0x20,0x55,0x54,0x55,0x78,0x20,0x54,0x55,0x56,0x78,0x20,0x54 db 0x55,0x54,0x78,0x0E,0x51,0x71,0x11,0x08,0x38,0x56,0x55,0x56,0x18,0x38,0x55,0x54 db 0x55,0x18,0x38,0x54,0x55,0x56,0x18,0x00,0x45,0x7C,0x41,0x00,0x00,0x46,0x7D,0x42 db 0x00,0x00,0x45,0x7E,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38 db 0x46,0x45,0x46,0x38,0x38,0x45,0x44,0x45,0x38,0x38,0x45,0x46,0x44,0x38,0x3C,0x42 db 0x41,0x22,0x7C,0x3C,0x40,0x41,0x22,0x7C,0x0C,0x51,0x50,0x51,0x3C,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x20,0x54,0x56,0x55,0x78,0x00,0x46,0x7D,0x40,0x00,0x38,0x44,0x46,0x45,0x38,0x3C db 0x42,0x41,0x20,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x55,0x00,0x55,0x00,0x55,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x15,0x16,0x7C,0x16,0x15,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0xF8,0x54,0x54,0x54,0x28,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x40 db 0x40,0x20,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x05,0x02,0x00,0x00,0x38,0x44,0x48 db 0x30,0x4C,0xF8,0x54,0x54,0x54,0x28,0x38,0x44,0x4C,0x54,0x24,0x28,0x54,0x54,0x44 db 0x20,0x58,0x64,0x04,0x64,0x58,0x44,0x3C,0x04,0x7C,0x44,0x63,0x55,0x49,0x41,0x41 ;*********************************************************************************************** ;**************************"affichage d'un graphique N°1" ************************************** ;*********************************************************************************************** ORG H'EEEE' ; Bonne année graphique1 db 0x00,0x01,0xFF,0x93,0x93,0x93,0x93,0xEE,0x00,0x70,0xF8,0x8C,0x04,0x8C,0x9C,0xF8 db 0x70,0x84,0xFC,0x9C,0x0C,0x8C,0xFC,0xF8,0x00,0x84,0xFC,0x9C,0x0C,0x8C,0xFC,0x80 db 0x80,0x70,0xF8,0xAC,0x24,0xAC,0xBC,0xB0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0xE0,0xEC,0x34,0x34,0xBC,0xF8,0x00,0x00,0x84,0xFC,0x9C,0x0C,0x8C,0xFC,0x80 db 0x00,0x84,0xFC,0x8C,0x0C,0x8C,0xF8,0x80,0x00,0x70,0xF8,0xAE,0x27,0xAD,0xB8,0xB0 db 0x00,0x70,0xF8,0xAC,0x24,0xAC,0xB8,0xB0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x86,0xC7,0xE1,0xB1,0x9B,0x8E,0x00,0x00,0x3C,0xFE,0x83,0x81,0x83,0xFE,0x3C db 0x00,0x86,0xC7,0xE1,0xB1,0x9B,0x8E,0x00,0x00,0x3C,0xFE,0x83,0x81,0x83,0xFE,0x3C db 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00 db 0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x39,0x05,0x75,0x08,0x35,0x75,0xD1 db 0xD1,0x90,0x90,0x91,0x11,0x11,0x11,0x30,0x20,0x60,0x60,0x40,0xC0,0x80,0x00,0x00 db 0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x01 db 0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00 db 0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00 db 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0xFF,0x2C,0xE9,0x01,0x01,0x01,0x03,0x83,0x82,0xF6,0x74,0x1C,0x0C,0x05,0x27,0x26 db 0x30,0x1F,0x60,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0xC0 db 0xE0,0xE0,0xF0,0xF0,0xF0,0xF0,0xF0,0xE0,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0x80,0x80 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0xC0,0xE0,0xE0 db 0xE7,0xFC,0xF8,0xF0,0xF0,0xF0,0xF8,0x8C,0x06,0x01,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x80,0xE0,0xF8,0xC8,0xCC,0x4C,0x46,0x46,0x46,0x67,0x77,0x77,0x77,0xEF db 0x8F,0x8F,0xDF,0xDF,0xBF,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF db 0xFF,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xFF,0xFF db 0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x01,0x87,0xFC,0x00,0x00,0x00,0x80,0x60,0x30 db 0x18,0x07,0x07,0x63,0x61,0x39,0x9C,0xCC,0x66,0x33,0xD3,0xF3,0xF7,0x6E,0xD0,0xC8 db 0xEC,0x6D,0xED,0xCF,0x1B,0xFC,0x0C,0x18,0x20,0xE1,0x87,0x0F,0xFF,0xFF,0xFF,0xFF db 0xFF,0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07 db 0x07,0x03,0x03,0x01,0x01,0x03,0x03,0x01,0x01,0x00,0x00,0xFC,0x07,0x01,0x00,0x08 db 0x08,0x08,0x18,0x78,0xE8,0xC0,0xCF,0x8D,0x84,0x06,0x03,0x01,0x00,0x1E,0x3F,0x31 db 0x18,0x0E,0x77,0xD9,0x8C,0x0F,0x88,0x98,0x00,0x80,0xC1,0x5F,0x7F,0xFF,0xFF,0xFF db 0xFF,0x21,0x60,0xC0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x1C,0x20,0x40,0x80 db 0x00,0x00,0x00,0x00,0x03,0x1F,0x7F,0x7E,0xFD,0xFD,0xF9,0xF9,0xF9,0x79,0x7D,0x3D db 0x1F,0x0F,0x07,0x01,0x01,0x01,0x01,0x01,0x1E,0x7F,0xC1,0x80,0x00,0x00,0x01,0x01 db 0x00,0x80,0x80,0xC0,0x73,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01 db 0x01,0x06,0x08,0x18,0x30,0x30,0x20,0x60,0x40,0x40,0x40,0xC0,0x80,0x80,0x80,0xC0 db 0x40,0x40,0x40,0x40,0x40,0x20,0x30,0x10,0x18,0x08,0x06,0x03,0x01,0x01,0x01,0x01 db 0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;*********************************************************************************************** ;**************************"affichage d'un graphique N°2" ************************************** ;*********************************************************************************************** ORG H'F318' ; décolage de l'avion graphique2 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0xC0,0xE0,0x60,0x70,0x70,0xF0,0xF0,0xD0,0x90,0x90,0xB0 db 0x30,0x30,0x70,0x70,0x70,0xF0,0xE0,0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0 db 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xC0,0xC0 db 0xC0,0xC0,0xC0,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0xC0,0xE0,0x70,0x38,0x18,0x0C db 0x0C,0x8C,0xFC,0x7C,0x4C,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0xC6,0xEC,0x7C,0xBC,0xF8,0xF8,0xF9,0xF1 db 0xF1,0xF3,0x33,0x1A,0x0E,0x8E,0xC6,0x63,0x63,0x61,0xC1,0x01,0x00,0x00,0x00,0xC0 db 0xC0,0x40,0x40,0x40,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x81,0xC1,0xC1,0xC1,0xC1,0x81,0x01,0x83,0xC3,0x83 db 0x82,0x82,0x06,0x86,0x86,0x84,0x84,0x8C,0x0C,0x8C,0x88,0x88,0x98,0x18,0x18,0x9E db 0xBF,0xB3,0xB3,0x27,0x6D,0x6D,0x7F,0x7F,0x3F,0x3F,0x0F,0x00,0x00,0x00,0x00,0x00 db 0x00,0xFF,0xCF,0xE4,0xFE,0xFF,0xC1,0xC0,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x3F,0x70,0x6F,0x7F,0xFF,0xFF,0xFF db 0x83,0x80,0xF8,0xDC,0xC6,0x9E,0xBF,0xBF,0xFF,0xFB,0x7E,0x3E,0xF8,0xDC,0x9E,0x3E db 0x7E,0x7E,0xF6,0xF6,0xFE,0x7D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x80,0x80,0xC0,0xC0,0xC0,0x4F,0x7C,0x78,0x7F,0x3F,0x3F,0x20,0x2F,0x3D,0x79 db 0x7F,0x7F,0x70,0xFF,0xEF,0xA9,0xAF,0xAF,0xE0,0x67,0x6F,0x6B,0x7F,0xFF,0xF0,0xF7 db 0x9F,0x9B,0xDF,0xDF,0x78,0x78,0x38,0x38,0x38,0x38,0x38,0x38,0x30,0x30,0x60,0x60 db 0xC0,0xC0,0xC0,0xC1,0xC1,0xC3,0xC3,0xC3,0xC6,0xC7,0xE5,0xEF,0xEF,0xBB,0xBB,0xBE db 0xDE,0xCE,0x84,0x0E,0x3E,0x3B,0x33,0x60,0x61,0x61,0x39,0x3D,0x1F,0x0F,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0xF8,0x3C,0x0E,0x07,0x03,0x01,0x01 db 0x01,0x01,0x01,0x01,0x01,0x03,0x03,0x02,0x06,0x04,0x0C,0x1C,0x18,0x71,0xF1,0x91 db 0x19,0x19,0x19,0x09,0x08,0x08,0xCC,0xEC,0x6C,0xEC,0xE4,0x04,0x04,0x06,0x06,0x06 db 0x07,0x0F,0x8D,0xD9,0x79,0xF1,0xF1,0xE3,0xE3,0xE2,0xC6,0xC6,0x86,0x8C,0x8C,0x0C db 0x18,0x18,0x18,0x30,0x30,0x30,0x20,0x61,0x61,0x41,0xC3,0xC3,0xC2,0x82,0x86,0x86 db 0x06,0x07,0x0F,0x0F,0x0B,0x1B,0x1A,0x1E,0x1E,0x3E,0x3C,0x2C,0x2C,0x78,0x78,0xF0 db 0xF0,0xE0,0xC0,0x00,0x38,0x7C,0xE4,0xE6,0xC7,0xBF,0xBD,0x1C,0x8D,0x8D,0xC5,0xC4 db 0xC0,0x72,0x7B,0x3B,0x1F,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x07,0x0F,0x1C,0x18,0x30,0x30,0x20 db 0x60,0x60,0x60,0x40,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xFF,0xDF db 0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xE0,0xE0,0x70,0x7F,0x6F,0x60,0x60,0x20,0x20,0x30 db 0x30,0x7F,0xE3,0xC1,0xBC,0x7F,0xFF,0xFF,0xE3,0xE1,0xE1,0xE3,0x7F,0x8D,0xE1,0xFF db 0x9F,0x83,0xC2,0xC2,0xC6,0x46,0x64,0x64,0x6C,0x2C,0x3C,0x38,0x18,0x19,0x19,0x19 db 0x19,0x19,0x1B,0x1B,0x1B,0x1B,0x1A,0x1A,0x0A,0x0A,0x0E,0x0E,0x0E,0x06,0x07,0x07 db 0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x01,0x01,0x03,0x03,0x03,0x02,0x02,0x02,0x03,0x03,0x03,0x01,0x01 db 0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 End ************************************************************************************************ ************************************************************************************************ 0xAE ; mettre hors fonction l'écran 0xD5 ; display clock div & param 0x80 0xA8 ; set multiplex & param 0x3F 0xD3 ; set display offset & param 0x00 0x40 ; set start line 0x8D ; active l'élévation de tension pour l'écran 0x14 ; de 7 volts minimum à 15 vols maximum 0x20 ; sélection de la façon du balayage de l'écran méthode 1, méthode 2, méthode 3 0x00 ; j'ai choisi la méthode 2 0xA1 ; segremap (A0/A1, flip horizontally) 0xC8 ; comscandec (C0/C8, flip vertically) 0xDA ; set compins () . . . . . (default) 0x12 0x81 ; contrast minimum 0x00 à un maximum de 0xFF 0x7F ; réglage au milieu de sa valeur 0xD9 ; set precharge 0xF1 0xDB ; set vcom detect 0x40 0xA4 ; display allon_resume . . (default) 0xA6 ; normal display . . . . . (default) 0xAF ; mettre l'écran en fonction 0x21 ; Dit à l’écran qu'on lui envoie les limites de colonnes 0x00 ; Valeur 1ere colonne 0x7F ; Valeur dernière colonne 0x22 ; Dit à l’écran qu'on lui envoie les limites des pages 0x00 ; Valeur de la première page 0x07 ; Valeur de la dernière page 0x2E ; désactive le défilement de l'écran ************************************************************************************************