Autor Tema: Marcador chapucero  (Leído 1546 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado akistartio

  • PIC10
  • *
  • Mensajes: 1
Marcador chapucero
« en: 16 de Octubre de 2009, 07:04:04 »
Hola a todos, soy nuevo en el foro y en el tema de los pics, he hecho mi primer programa aprendiendo cosas aquí y allá y en algunos tutoriales. El objetivo es hacer un marcador con 2 contadores independientes y sacarlos a sus respectivos displays de 2 digitos, la cuenta inicia en 20.Se han puesto 2 74ls47 que son decodificadores BCD a display. El programa funciona perfectamente pero se lo he mostrado a un amigo que entiende de esto más que yo y me ha dicho que es una chapuza. Puede ser porque conozco pocos comandos, si alguien me puede decir algo sobre como se puede hacer de otra manera... No me critiqueis, me ha costado mucho trabajo. Está hecho con el pic simulator ide. Por cierto el pic es el 16f84a

AllDigital
TRISA = %11111111
TRISB = %00000000

PORTA = 0
PORTB = 0

Dim cuenta1 As Byte  'valor para el display 1
Dim cuenta2 As Byte  'valor para el display 2
Dim a As Byte  'variable para el antirebote
Dim b As Byte  'variable para ajustar el tiempo de antirebote

cuenta1 = 32  '20 en BCD
cuenta2 = 32  '20 en BCD
a = 0
b = 0

loop:

For a = b To 0 Step -1  'temporizador antirebote, se ha puesto así en vez de wait por lo de refrescar los displays
PORTB.6 = 0
PORTB.7 = 1
PORTB.0 = cuenta1.0  'todo esto es para refrescar los displays
PORTB.1 = cuenta1.1  'si no lo hiciese así los portb.6 y .7
PORTB.2 = cuenta1.2  'cogerían el valor de la cuenta.
PORTB.3 = cuenta1.3  'Estos son lo que apagan y encienden los displays
PORTB.4 = cuenta1.4
PORTB.5 = cuenta1.5
WaitMs 10
PORTB.6 = 1
PORTB.7 = 0
PORTB.0 = cuenta2.0
PORTB.1 = cuenta2.1
PORTB.2 = cuenta2.2
PORTB.3 = cuenta2.3
PORTB.4 = cuenta2.4
PORTB.5 = cuenta2.5
WaitMs 10
Next a

b = 0

If PORTA.0 = 1 Then Goto adelante1

If PORTA.2 = 1 Then Goto adelante2

If PORTA.1 = 1 Then Goto atras1

If PORTA.3 = 1 Then Goto atras2

Goto loop

adelante1:
If cuenta1 = 57 Then Goto loop
cuenta1 = cuenta1 + 1
If cuenta1 = 10 Then cuenta1 = cuenta1 + 6  'Esto es un conversor manual de binario a BCD
If cuenta1 = 26 Then cuenta1 = cuenta1 + 6
If cuenta1 = 42 Then cuenta1 = cuenta1 + 6
PORTB.6 = 1
PORTB.7 = 1
b = 25  'Aqui se le pone el tiempo de antirebote
Goto loop

atras1:
If cuenta1 = 0 Then Goto loop
cuenta1 = cuenta1 - 1
If cuenta1 = 63 Then cuenta1 = cuenta1 - 6
If cuenta1 = 47 Then cuenta1 = cuenta1 - 6
If cuenta1 = 31 Then cuenta1 = cuenta1 - 6
If cuenta1 = 15 Then cuenta1 = cuenta1 - 6
PORTB.6 = 1
PORTB.7 = 1
b = 25
Goto loop


adelante2:
If cuenta2 = 57 Then Goto loop
cuenta2 = cuenta2 + 1
If cuenta2 = 10 Then cuenta2 = cuenta2 + 6
If cuenta2 = 26 Then cuenta2 = cuenta2 + 6
If cuenta2 = 42 Then cuenta2 = cuenta2 + 6
PORTB.6 = 1
PORTB.7 = 1
b = 25
Goto loop

atras2:
If cuenta2 = 0 Then Goto loop
cuenta2 = cuenta2 - 1
If cuenta2 = 63 Then cuenta2 = cuenta2 - 6
If cuenta2 = 47 Then cuenta2 = cuenta2 - 6
If cuenta2 = 31 Then cuenta2 = cuenta2 - 6
If cuenta2 = 15 Then cuenta2 = cuenta2 - 6
PORTB.6 = 1
PORTB.7 = 1
b = 25
Goto loop

« Última modificación: 16 de Octubre de 2009, 07:26:48 por akistartio »