AllDigital
'DECLARACION DE LAS CONFIGURACIONES DE LOS PUERTOS
'_...................................................._
TRISA = %000000
TRISC = %00000000
TRISD = %00000011
'_...................................................._
'DECLARACION DE VARIABLES
'_...................................................._
Dim a1 As Word
Dim uni As Byte
Dim dec As Byte
Dim cen As Byte
Dim und As Byte
'_...................................................._
'Asignaciones
a1 = 0
uni = 0
dec = 0
cen = 0
PORTC = 0x40
RA.0 = 1 'Unidades
RA.1 = 1 'Decenas
'Rutina principal
main:
If RD.0 = 1 Then
While RD.0 = 1
Wend
a1 = a1 + 1
Endif
If RD.1 = 1 Then
While RD.1 = 1
Wend
a1 = a1 - 1
Endif
Gosub unidades
Gosub decenass
Goto main
End
'SUBRUTINAS PARA LAS UNIDADES
unidades:
'_...................................................._
Dim digito As Byte
If a1 > 99 Then a1 = 0
uni = a1
RA.1 = 0
digito = _nmrbcd(uni, 0)
PORTC = _nmr7seg(digito)
RA.0 = 1
WaitMs 17
Return
'Goto unidades
'_...................................................._
'SUBRUTINAS PARA LAS DECENAS
'_...................................................._
decenass:
Dim digito As Byte
If a1 > 99 Then a1 = 0
uni = a1
RA.0 = 0
digito = _nmrbcd(uni, 1)
PORTC = _nmr7seg(digito)
RA.1 = 1
WaitMs 17
Return
'Goto decenass
'_...................................................._
'SUBRUTINAS PARA LAS CENTENAS
'_...................................................._
centenas:
PORTC = LookUp(0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x38, 0x00, 0x18), cen
WaitMs 17
Return
'Goto centenas
'_...................................................._
'SUBRUTINAS PARA LAS UNIDADES DE MILLAR
'_...................................................._
unidades_d_m:
RA.1 = 0
PORTC = LookUp(0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x38, 0x00, 0x18), und
RA.0 = 1
WaitMs 17
Return
'Goto unidades_d_m
'_...................................................._
'******************************************************
'FUNCIONES PARA TRABAJAR CON DISPLAY DE 7 SEGMENTOS.
'******************************************************
'Codigo BCD, decimal codificado en binario
'Extrae el digito indicado, hasta 4 digitos (_nmrbcd=Word)
'Extrae el digito indicado, hasta 10 digitos (_nmrbcd=Long)
'numero = Cifra a descomponer
'digito = Digito a extraer de 0 a 3 (_nmrbcd=Word)
'digito = Digito a extraer de 0 a 9 (_nmrbcd=Long)
'Los digitos se nombras de derecha a izquierda, cero es el primero
'_nmrbcd, retorna el digito.
Function _nmrbcd(_numero As Word, _digito As Byte) As Long
'Descompone el numero a mostrar en digitos
Dim _nn As Byte
For _nn = 1 To _digito
_numero = _numero / 10
Next _nn
_nmrbcd = _numero Mod 10
End Function
'Numero a mascara tipo digito display 7 segmentos
'numero = numero a procesar
'_nmr7seg, retorna la mascara de los segmentos a activar
Function _nmr7seg(_numero As Byte) As Byte
_nmr7seg = LookUp(0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f), _numero
End Function