Who's online

There are currently 0 users and 2 guests online.

Publicidade

Receptor RF

User login

PIC16: mostra1digito - exibe um dígito em displays multiplexados

A seguinte função para a família de microcontroladores PIC16 exibe um dígito BCD em um dos 4 displays de sete segmentos multiplexados através de transistores. A posição do dígito é especificado pela variável mostra1_posicao_7seg. Os 4 bits  menos significativos de PORT_DISPLAY_7SEGMENTOS referem-se aos dados e os 4 bits mais significativos, ao número (posição) do display em relação ao conjunto de 4 displays.

 

Variáveis utilizadas:

  • mostra1_digito_7seg
  • mostra1_posicao_7seg

 

Funções utilizadas:

  • Nenhuma. Apenas a constante PORT_DISPLAY_7SEGMENTOS (definida como PORTB no cabeçalho do programa).
;*********************************************************
;<FUNÇÃO> 
; mostra1digito
;{
; Exibe um dígito <digito> no display de 7 segmentos de nº <mostra1_posicao_7seg>
 
;<HARDWARE> 
; 4 displays de sete segmentos multiplexados 
; através de 4 transistores e o dado codificado em BCD.
; Os 8 bits estarão conectados na porta PORT_DISPLAY_7SEGMENTOS 
; <ARGUMENTOS>
; mostra1_digito_7seg (f) = um dígito (0 a 9) a ser exibido
; mostra1_posicao_7seg (f) = número (0 a 4) estabelece qual display 
; deve ser utilizado para exibir o dígito.
;*********************************************************
 
#ifdef DISPLAY_7SEGMENTOS
 
mostra1digito:
    banksel mostra1_posicao_7seg    
    movf mostra1_posicao_7seg, w
    andlw b'00000111' ; Posicação máxima = 4° display
    movwf mostra1_posicao_7seg
 
    sublw 4 ; Posicação máxima = 4° display
    btfss STATUS,C
        clrf mostra1_posicao_7seg ; posicao > 4 = nenhum display ativo
 
    movf mostra1_digito_7seg,w ; apenas o primeiro nibble é válido
    andlw b'00001111'
    movwf mostra1_digito_7seg
 
    movlw HIGH decodifica_7seg
    movwf PCLATH
    movf mostra1_posicao_7seg,w
    call decodifica_7seg ; 4 bits mais significativos
    iorwf mostra1_digito_7seg, w ; 4 bits menos significativos
    movwf PORT_DISPLAY_7SEGMENTOS
    return ; mostra1digito
 
#endif
;*********************************************************
 
;*********************************************************
;<TABELA> 
; decodifica_7seg
 
; <ARGUMENTOS>
; w = posicao do display em decimal a ser decodificado
;*********************************************************
 
#ifdef DISPLAY_7SEGMENTOS
; primeiros 4 bits = transistores de multiplexação
decodifica_7seg:
    addwf PCL,f
    retlw b'00000000' ; nenhum display
    retlw b'00010000' ; 1° display
    retlw b'00100000' ; 2° display
    retlw b'01000000' ; 3° display
    retlw b'10000000' ; 4° display
    retlw b'00000000' ; apenas em caso de erro
    retlw b'00000000' ; apenas em caso de erro
    retlw b'00000000' ; apenas em caso de erro
    return ; apenas em caso de erro, tabela
 
#endif
;}
;*********************************************************

Reply

The content of this field is kept private and will not be shown publicly.
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
Image CAPTCHA
Copy the characters (respecting upper/lower case) from the image.