Orologio a 4 display pilotato da microprocessore

Sviluppo software :

Definizione variabili:

BD1	= 30h ;1 Buffer display n.ro 1
BD2	= 31h ;2 Buffer display n.ro 2
BD3	= 32h ;3 Buffer display n.ro 3
BD4	= 33h ;4 Buffer display n.ro 4

Tabella delle corrispondenze bit dei buffers al segmento dei display

Cella di memoria D1 (30H) D2 (31H) D3(32H) D4(32H)
Display DY1 DY2 DY3 DY4
bits
segmenti
7 6 5 4 3 2 1 0
a b c d e f g dp
7 6 5 4 3 2 1 0
a b c d e f g dp
7 6 5 4 3 2 1 0
a b c d e f g dp
7 6 5 4 3 2 1 0
a b c d e f g dp

;############### spegnimento display ###############
;Registri utilizzati: r0
;----------Prima fase (scaricamento buffer)--------------
SpDisp	mov r0,#36
	clr p1.0
	clr p1.1
lsdis	setb p1.1	;impulso di clock su P1.1
	clr p1.1
	djnz r0,lsdis
;----------Seconda fase (Azzeramento uscite buffer)--------------
	setb p1.0
	setb p1.1	; bit di start
	clr p1.1
	clr p1.0
	mov r0,#35
lsdis1	setb p1.1
	clr p1.1
	djnz r0,lsdis1
	ret

;--------Carica M5450---------------
;Registri utilizzati: r0,r1,r2
cr5450	setb p1.0	;Invia Bit di Start
	setb p1.1
	clr p1.1

	mov r2,#4	;carica il registo conteggio n.display
	mov r1,#BD1	;carica nel registro puntatore l'indirizzo di partenza 
lcr1	mov a,@r1	;buffer display
	call Tr8Bit	;chiama la subroutine che trasferisce gli 8 bit del buffer
	inc r1		;selezionato
	djnz r2,lcr1

	mov r0,#3	;Spedisce i due bit inutilizzati + 
lcr2	setb p1.1	;il bit di "DataEnable"
	clr p1.1	
	djnz r0,lcr2	
	ret
;------Trasferisce il contenuto del buffer al 5450----------------
Tr8Bit	mov r0,#8
linv	jb acc.7,uno
	clr p1.0
	jmp zero
uno	setb p1.0
zero	setb p1.1
	clr p1.1
	rl a
	djnz r0,linv
	ret

;########### Routine decimale a codice a 7 segmenti ############
;In ingresso l'accumulatore deve contenere il valore da convertire
;in uscita l'accumulatore conterrą il codice a 7 segmenti corrispondente
conv	mov dptr,#table_n
	movc a,@a+dptr
	ret
table_n	db 00000011b	;0
	db 10011111b	;1
	db 00100101b	;2
	db 00001101b	;3
	db 10011001b	;4
	db 01001001b	;5
	db 01000001b	;6
	db 00011111b	;7
	db 00000001b	;8
	db 00001001b	;9
table	db 11111100b	;0
	db 01100000b	;1
	db 11011010b	;2
	db 11110010b	;3
	db 01100110b	;4
	db 10110110b	;5
	db 10111110b	;6
	db 11100000b	;7
	db 11111110b	;8
	db 11110110b	;9

;########### Visualizza Minuti Secondi ###########
secondi	= 35h
minuti	= 36h
;Registri utilizzati: a,b
vminsec	mov a,secondi
	mov b,#10
	div ab
	call conv
	mov BD3,a
	mov a,b
	call conv
	mov BD4,a
	mov a,minuti
	mov b,#10
	div ab
	call conv
	mov BD1,a
	mov a,b
	call conv
	mov BD2,a
	call cr5450
	ret