Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

test affichage a MAX7219
ducran lapoigne
Avatar de l’utilisateur
Débutant
Débutant
Messages : 93
Enregistré en : septembre 2015

#1 Message par ducran lapoigne » ven. 30 mars 2018 17:24

bonjour tous

vous connaissez peut être ces afficheurs vendus pour une poignée de yuans
si vous ne les trouvez pas tapez MAX7219 display dans le moteur de recherche de la bay

7219_displ.jpg


j' ai pensé que le code pourrait intéresser quelques membres du forum
ci dessous,test avec un 16F84

7219_tst.JPG


Code : Tout sélectionner

;**********************************************************************
;
;
    NOM:      max7219 / 16F84
;    Date:     25/11/2014
;     Release   30/03/2018    
;    Version:  1.1
;    Circuit: 
;    Auteur:   Ducran Lapoigne
;
;**********************************************************************
;
                                                                     
;    Fichier requis: P16F84.inc                                       
;                                                                     
;**********************************************************************
;
                                                                     
;    Notes: affiche le contenu de Digit .... Digit + 7
;     sur un afficheur chinois 8 digits à MAX7219       
;    Digit est l' afficheur le + a droite; Digit + 7 le plus a gauche       
;                                                    
;             ________________________                _______________
;            |                        |              |               |
;            |1 RA2            RA1 18 |              |               |
;            |                        |              |               |
;            |2 RA3            RAO 17 |              |               |
;            |                        |              |               |
;            |3 RA4/TOCKI     OSC1 16 |              |               |
;            |                        |              |               |
;            |4 /MCLR         OSC2 15 |              |               |
;            |                        |              |               |
;            |5 Vss            VDD 14 |              |               |
;            |                        |              |               |
;            |6 RBO/INT        RB7 13 |------------- | D_in          |
;            |                        |              |               |
;            |7 RB1            RB6 12 |------------- | Clk           |
;            |                        |              |               |
;            |8 RB2            RB5 11 |------------- | LOAD          |
;            |                        |              |               |
;            |9 RB3            RB4 10 |              |               |
;            |_______________________ |              |_______________|
;
;                PIC16F84                                 MAX7219
;
    LIST      p=16F84            ; Définition de processeur
    #include <p16F84.inc>        ; Définitions de variables

 __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC


;*********************************************************************
;                              ASSIGNATIONS                          *
;*********************************************************************

OPTIONVAL    EQU    H'
0008'    ; Valeur registre option
                        ; Résistance pull-up ON
                        ; Pas de préscaler

;*********************************************************************
;                             DEFINE                                 
;*********************************************************************

#DEFINE PAGE0 bcf STATUS,RP0
#DEFINE PAGE1 bsf STATUS,RP0
#define    CLK_Pin        PORTB, 6
#define    DATA_Pin    PORTB, 7
#define    LATCH_Pin    PORTB, 5

;*********************************************************************
;                      CONSTANTES  DU MAX 7219                            
;*********************************************************************
MAX_Digit_0            equ 0x01
MAX_Digit_1            equ 0x02
MAX_Digit_2            equ 0x03
MAX_Digit_3            equ 0x04
MAX_Digit_4            equ 0x05
MAX_Digit_5            equ 0x06
MAX_Digit_6            equ 0x07
MAX_Digit_7            equ 0x08
MAX_decode_mode        equ 0x09
MAX_Intensity        equ 0x0A
MAX_Scan_Limit        equ 0x0B
MAX_Shutdown        equ 0x0C
MAX_display_Test    equ 0x0F

;*********************************************************************
;                             MACRO                                  
;*********************************************************************



;*********************************************************************
;                   DECLARATIONS DE VARIABLES                        
;*********************************************************************

    CBLOCK 0x00C        ; début de la zone variables

    Digit        : 8        ; 8 octets pour les variables a afficher
    bit_counter    : 1        ;
    nbre_aff    : 1     ; nombre de digit a afficher
    addr_aff     : 1        ; addresse afficheur
    maxim_hi    : 1        ;
    maxim_lo    : 1        ;

    ENDC                ; Fin de la zone 
  


;*********************************************************************
;                      DEMARRAGE SUR RESET                           
;*********************************************************************

    org     0x000         ; Adresse de départ après reset
    call    initports    ; initialisation des ports du 16F84
;---------------------------------------------------------------------
;                Chargement des datas a afficher
;---------------------------------------------------------------------
    movlw    D'
0'            ; 
    movwf    Digit            ; sera affiché sur digit le + a droite
    movlw    D'
1'
    movwf    Digit +1    
    movlw    D'
2'
    movwf    Digit +2    
    movlw    D'
3'
    movwf    Digit +3    
    movlw    D'
4'
    movwf    Digit +4    
    movlw    D'
5'
    movwf    Digit +5    
    movlw    D'
6'
    movwf    Digit +6    
    movlw    D'
7'
    movwf    Digit +7        ; sera affiché sur digit le + a gauche
;---------------------------------------------------------------------    
    call    init_MAX7219    ; initialiser le max7219
    call    disp_32         ; afficher 
  
forever      
      nop                        ; une fois le boulot fait, on boucle ici ;-)
      goto forever

;*********************************************************************
;           INITIALISATION DES PORTS ET DES VARIABLES                             
;*********************************************************************
initports
    CLRF    PORTA                    ;
    CLRF    PORTB                    ;
    PAGE1                            ;page 1
    MOVLW    B'
00000001'                ;tout le port en sortie sauf b0
    MOVWF    TRISB                    ;configuration port B
    MOVLW    B'
00011111'                ;pour l' exemple
    MOVWF    TRISA                    
;configuration port A
    MOVLW    OPTIONVAL                
;B'00000000'            ;
    MOVWF    OPTION_REG                ;configuration OPTION
    PAGE0                            
;page 0
    CLRF    PORTB                    
;
    return
;*************************************************************************
;
                        initialisation du MAX7219
;**************************************************************************
init_MAX7219
    movlw   00
    movwf   PORTB

;-------------------------------------------------------------------------
;
 shutdown: registre 0x0C du max7219
; xxxxxxx0 : arret
; xxxxxxx1 : normal operation
;-------------------------------------------------------------------------
shutdown
    movlw   MAX_Shutdown
    movwf   maxim_hi
    movlw   0x01                
; turn on display
    movwf   maxim_lo
    call    disp_write
;------------------------------------------------------------------------
;
 decode mode registre 0x09 du max7219
; 00000000 (0x00) :pas de décodage bcd
; 00000001 (0x01) :décodage pour digit 0 pas décodage pour 7 à 1
; 00001111 (0x0F) :décodage pour digit 3-0 pas décodage pour 7 à 4
; 11111111 (0xFF) :décodage pour digit 7-
;-------------------------------------------------------------------------
decode_mode
    movlw   MAX_decode_mode        
; adresse registre 'Decode mode'du MAX7219
    movwf   maxim_hi
    movlw   0xFF                
; code pour decode for all digits
    movwf   maxim_lo
    call   disp_write
;-------------------------------------------------------------------------
;
 intensity registre 0x0A du max7219
; règle l'intensité 0x00 :min    0xFF :max
;-------------------------------------------------------------------------
intensity
    movlw   MAX_Intensity        ; adresse registre '
Intensity 'du MAX7219
    movwf   maxim_hi
    movlw   0x0B                ; max intensity (min 01  max 0F )
    movwf   maxim_lo
    call    disp_write
;-------------------------------------------------------------------------
; scan limit registre 0x0B du max7219
; display digit 0: 0xX0
; display digit 0-1: 0xX1
; display digit 0-1-2: 0xX2
; display digit 0-1-2-3: 0xX3
; display digit 0-1-2-3-4: 0xX4
; display digit 0-1-2-3-4-5: 0xX5
; display digit 0-1-2-3-4-5-6: 0xX6
; display digit 0-1-2-3-4-5-6-7: 0xX7
;-------------------------------------------------------------------------
scan_limit
    movlw   MAX_Scan_Limit        ; adresse registre '
scan limit 'du MAX7219
    movwf   maxim_hi
    movlw   H'
07'                ; 8 digits
    movwf   maxim_lo
    call    disp_write
;-------------------------------------------------------------------------
; disp test registre 0x0F du max7219
;-------------------------------------------------------------------------
disp_test
    movlw   MAX_display_Test    ; adresse registre '
Display test'du MAX7219
    movwf   maxim_hi
    movlw   H'
00'                ; test
    movwf   maxim_lo
    call    disp_write
    return
;*************************************************************************
;  sous routine envoi de commandes ou data vers le max7219
;  sous la forme d'
 un mot de 16 bits
;  Le MSB (bit15) est envoyé le premier                      
;**************************************************************************
disp_write:
    movlw   h'00'
    movwf   PORTB
    movlw   h
'08'                ; 
    movwf   bit_counter            
; compteur bits
    bcf     STATUS 
,C            ; clear carry
loop_hi
    rlf     maxim_hi
,f            ;
    btfss   STATUS ,C
    goto    toggle_clock_hi
    bsf     DATA_Pin
toggle_clock_hi
    bsf     CLK_Pin                
; front montant impulsion sur CLK
    bcf     CLK_Pin                
; front descendant impulsion sur CLK
    bcf     DATA_Pin            
; if set,reset it.
    decfsz  bit_counter,f
    goto    loop_hi
    movlw   h
'08'                ; counter
    movwf   bit_counter
    bcf     STATUS 
,C            ; clear carry
loop_lo
    rlf     maxim_lo
,f
    btfss   STATUS 
,C
    goto    toggle_clock_lo
    bsf     DATA_Pin
toggle_clock_lo
    bsf     CLK_Pin
    bcf     CLK_Pin
    bcf     DATA_Pin            
; if set,reset it.
    decfsz  bit_counter,f
    goto    loop_lo
toggle_load
    bsf     LATCH_Pin
    bcf     LATCH_Pin
    return                        
;
;**************************************************************************
       
; affiche le contenu de Digit sur le digit de droite, puis Digit+1 Digit+2.....
;
 jusque Digit +
; Digit +7 affiché sur le digit le + a gauche
;**************************************************************************  
disp_32
    movlw   Digit                
; addresse de "Digit"
    movwf   FSR                    ; data-pointer
    movlw   h
'08'                ; counter : number digits to display
    movwf   nbre_aff            
; to var 'nbre_aff'
    movlw   h'01'                ; adresse 1er digit
    movwf   addr_aff                
; to var 'addr_aff'
    
next_digit
    movf    addr_aff
,w            ; addr digit -> W
    movwf   maxim_hi            
;
    movf    INDF,w                ; data to display -> W
    movwf   maxim_lo            
;
    call    disp_write            ;
    incf    FSR,f                ; pointer data suivante
    incf    addr_aff
,f            ; addr digit = addr digit+
    decfsz  nbre_aff
,f            ; 
    goto    next_digit            
; fini ???
    return

    end
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

test affichage a MAX7219
F6FCO
Avatar de l’utilisateur
Passioné
Passioné
Messages : 470
Âge : 64
Enregistré en : décembre 2017
Localisation : Furtif je suis.
Contact :

#2 Message par F6FCO » ven. 30 mars 2018 19:48

Merci Antoine, effectivement çà pourra servir.
Une porte nand prend 2 bits en entrée... cochonne va !!!

test affichage a MAX7219
Temps-x
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 849
Enregistré en : juillet 2016
Localisation : Terre

#3 Message par Temps-x » ven. 30 mars 2018 20:24

Bonjour ducran lapoigne, F6FCO, et tout le forum,

:bravo: pour le code, super d'avoir fait ça avec un Pic16F84

Comme c'est un super boulot je mets le datasheet du Max7219 : https://drive.google.com/open?id=1_ej0V ... hWlyfvXmVg

Merci !

==> A+
Quand la souris nargue le chat, c'est que son trou n'est pas loin.


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités