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:
Funções utilizadas:
;********************************************************* ;<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 ;} ;*********************************************************