Dim t2_ms As Word
Dim t2_ms_contar As Word
Dim t1_ms As Word
Dim t1_ms_contar As Word
Dim n_rand As Byte
Dim i As Byte
Dim d_var As Byte
Dim d_set(7) As Byte
Dim un As Byte
Dim de As Byte
Dim d_varu As Byte
Dim d_vard As Byte
AllDigital
t1_ms = 0
t1_ms_contar = 2000 'milisegundos a contar
t2_ms = 0
t2_ms_contar = 500 'base para intermitencia
TMR0 = 0
TRISA = %000010
TRISB = 0
TRISC = 0
PORTB = 0
PORTC = 0
d_var = 20 'predeterminado 20
d_set(0) = 4
d_set(1) = 6
d_set(2) = 8
d_set(3) = 10
d_set(4) = 12
d_set(5) = 20
d_set(6) = 99
OPTION_REG.T0CS = 0
OPTION_REG.PSA = 0
OPTION_REG.PS0 = 1
OPTION_REG.PS1 = 0
OPTION_REG.PS2 = 0
INTCON.TMR0IF = 0
INTCON.TMR0IE = 1
INTCON.PEIE = 1
Enable
Goto main
opcion:
i = 0
While t1_ms < 3000
d_var = d_set(i)
If d_var < 10 Then
d_varu = d_var
d_vard = 10
Else
d_varu = d_var - (d_var / 10) * 10
d_vard = d_var / 10
Endif
Select Case t2_ms
Case <= 300 'uso la base de t2 para generar la intermitencia en Opciones
Call display(d_varu, d_vard)
Case < 600 '600
Call display(11, 11)
Case Else
t2_ms = 0
EndSelect
If PORTA.1 = 1 Then
While PORTA.1 = 1
Select Case t2_ms
Case <= 300 '300
Call display(d_varu, d_vard)
Case < 600 '600
Call display(11, 11)
Case Else
t2_ms = 0
EndSelect
Wend
i = i + 1
If i = 7 Then i = 0
t1_ms = 0
Endif
Wend
main:
Call display(10, 10) 'del 0 al 9 son numeros, el 10 es "-" y el 11 es vacio
If PORTA.1 = 1 Then
t1_ms = 0
TMR0 = 0
t1_ms_contar = 2000
While RA1 = 1
Call display(10, 10)
If t1_ms = 2000 Then
TMR0 = 0
t1_ms = 0
t1_ms_contar = 5000
t2_ms = 0
t2_ms_contar = 600
While RA1 = 1
Wend
Goto opcion
Endif
Wend
n_rand = TMR0 Mod d_var
If n_rand = 0 And d_var = 99 Then n_rand = 0
If n_rand = 0 And d_var <> 99 Then n_rand = 1
Select Case n_rand 'select case para separar Unidad y Decena
Case < 10
un = n_rand
de = 0
Case Else
un = n_rand - (n_rand / 10) * 10
de = n_rand / 10
EndSelect
t1_ms = 0
t1_ms_contar = 1000
TMR0 = 0
While t1_ms < 1000
Call display(un, de)
Wend
Endif
Goto main
End
Proc display(unidad As Byte, decena As Byte)
PORTB = LookUp(0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x18, 0xbf, 0xff), unidad
PORTC = %01
WaitMs 5
PORTC = %11
WaitMs 2
PORTB = LookUp(0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x18, 0xbf, 0xff), decena
PORTC = %10
WaitMs 5
PORTC = %11
WaitMs 2
End Proc
On Interrupt
Save System
If t1_ms < t1_ms_contar Then t1_ms = t1_ms + 1
If t2_ms < t2_ms_contar Then t2_ms = t2_ms + 1
TMR0 = 0
INTCON.TMR0IF = 0
Resume