Isto é um exemplo de rotina, em assembler, para os microcontroladores da linha PIC. Ela tem a capacidade de imprimir qualquer caractere de 7 segmentos em seis displays ao "mesmo tempo".
;************************************************************************** ; Rotina de Display ;************************************************************************** ; ; display0 clrf status0 clrf tect comf tect,f ; display01 comf tect,f btfsc mode,0 ;testa modo de programacao goto display1 btfsc tect,0 goto display02 movf prog,w ;carrega w com valor de temp prog movwf display ;1100100b=64h=100d clrf cem0 goto display2 ; display02 bsf tect,0 movf tempera,w movwf display clrf cem0 goto display2 ; display1 btfsc tect,0 goto display101 movf progu,w ;move umid. prog. pra w movwf display ;move w pra display clrf status0 clrf cem0 movlw 0x64 ;carrega w com 100d goto display2 ; display101 bsf tect,0 movf umide,w movwf display clrf status0 clrf cem0 movlw 0x64 ;carrega w com 100d ; display2 movlw 0x64 ;carrega w com 100d subwf display,f ;display - 100d btfss status0,c ;testa se subtracao de positivo ou nao goto display3 incf cem0,f ;movlw 0x01 ;carrega w com 1 goto display2 ;goto display4 ; display3 addwf display,f ;display + 100 movf cem0,w ; display4 call table ;chama tabela de conversao pra 7 seg. btfsc tect,0 goto display40 movwf cem1 goto display401 ; display40 movwf cem2 ; display401 clrf status0 movlw 0x0a ;carrega w com 10d clrf decim0 ; display5 subwf display,f ;f - w btfss status0,c ;testa se - ou + goto display6 incf decim0,f ;incrementa bcd goto display5 ; display6 addwf display,f ;f + w movf decim0,w call table ;bcd p/ 7 segmentos btfsc tect,0 goto display60 movwf decim1 ;carrega decim1 c/ valor em 7 segm. goto display601 ; display60 movwf decim2 ; display601 clrf status0 movlw 0x01 ;carrega w c/ 1 clrf unid0 ; display7 subwf display,f ;f - w btfss status0,c ;testa se deu - ou + goto display8 incf unid0,f ;incrementa unidade bcd goto display7 ; display8 movf unid0,w ;carrega w c/ unidade em bcd call table ;chama conversao p/ 7 segmentos btfsc tect,0 goto display80 movwf unid1 ;carrega unid1 c/ valor em 7 segmentos goto display801 ; display80 movwf unid2 ; display801 btfss tect,0 goto display01 goto display_atual ;call display_atual ; return ; display_atual ; movf cem1,w ; movwf portc clrf status0 movlw 0x3f subwf cem1,w btfsc status0,z clrf cem1 movf cem1,w movwf portc btfss mode,1 goto display_atual1 bsf portc,4 bcf portc,5 goto display_atual2 ; display_atual1 bcf portc,4 bsf portc,5 ; display_atual2 ;selecao bsf portb,0 ;1 call display_temp ;limpa selecao bcf portb,0 movf decim1,w movwf portc ;selecao bsf portb,2 call display_temp ;limpa selecao bcf portb,2 movf unid1,w movwf portc ;selecao bsf portb,3 call display_temp ;limpa selecao bcf portb,3 clrf status0 movlw 0x3f subwf cem2,w btfsc status0,z clrf cem2 movf cem2,w movwf portc ; bcf portb,3 ; movf cem2,w ; movwf portc ;selecao bsf portb,6 call display_temp ;limpa selecao bcf portb,6 movf decim2,w movwf portc ;selecao bsf portb,7 call display_temp ;limpa selecao bcf portb,7 movf unid2,w movwf portc ;selecao bsf portc,7 call display_temp ;limpa selecao bcf portc,7 return ; display_temp movlw 0x0a movwf esper1 ; esp1 movlw 0x0a movwf esper ; esp decfsz esper,f ;temporização goto esp decfsz esper1,f ;temp goto esp1 return ; org 0xdc ; table addwf PC,f retlw 0x3f ;0 retlw 0x06 ;1 retlw 0x5b ;2 retlw 0x4f ;3 retlw 0x66 ;4 retlw 0x6d ;5 retlw 0x7d ;6 retlw 0x07 ;7 retlw 0x7f ;8 retlw 0x67 ;9 end