Autor Tema: Reloj Cartel con Doble Display 4 digitos y 7 segmentos pic16f84  (Leído 3913 veces)

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

Desconectado andrestecno

  • PIC10
  • *
  • Mensajes: 3
Reloj Cartel con Doble Display 4 digitos y 7 segmentos pic16f84
« en: 08 de Enero de 2010, 14:25:31 »
Tome parte de el programa que hizo ariel en neoteo, pero tengo un problema, que pienso que me podrían aclarar.. Tengo el reloj funcionando y no me doy cuenta cuales son los errores, por otra parte quisiera hacer que se pueda configurar la hora con botones, intenté hacerlo con interrupciones pero al parecer no me funciona con mikrobasic.
La otra duda que tengo es sí tendrá muchos retrasos el reloj con el programa que hice (Dará la hora correcta??).
Agradezco toda la ayuda que me puedan dar al respecto (con el tema del seteo de hora).

Y adjunto van todos los documentos de programación y, archivos para simular en proteus, todo incluido en archivo de Winrar.

Muchas Gracias
Saludos
Andrés
« Última modificación: 11 de Enero de 2010, 08:54:27 por dogflu66 »

Desconectado andrestecno

  • PIC10
  • *
  • Mensajes: 3
Re: Reloj Cartel con Doble Display 4 digitos y 7 segmentos pic16f84
« Respuesta #1 en: 12 de Enero de 2010, 20:16:26 »
Aquí está el programa que realize en Mikrobasic, pero no se por que razon al mostrar los numeros parpadea mostrando todos los display encendidos a medias.


Abajo está el archivo adjunto del circuito que utilizo.



program clockpicpro2
'----------SYMBOL--------------
Symbol CLOCK = PORTB.1
Symbol dato = PORTB.2
symbol STB1 = PORTB.4
symbol STB2 = PORTB.5
symbol STB3 = PORTB.6
symbol STB4 = PORTB.7


'-----------DIM-----------------
Dim v,i,n,u,p As Byte
Dim aux As byte


'----Rutinas, funciones y procedues-------------
sub function writedata (dim x as byte) as byte
'Si DATO es 0, segmento encendido.
if x = 0 then
dato = 1
else
dato = 0
end if

delay_Us(2)
clock = 0
delay_Us(2)
clock = 1
delay_Us(2)
result = x
end sub

'Imprime un digito del 0 al 9
sub function writedigit (dim x as byte) as byte
select case x
case 1
aux = writedata(1)
aux = writedata(0)
aux = writedata(0)
aux = writedata(1)
aux = writedata(1)
aux = writedata(1)
aux = writedata(1)
aux = writedata(1)
case 2
aux = writedata(0)
aux = writedata(1)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(1)
aux = writedata(0)
aux = writedata(1)
case 3
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(1)
aux = writedata(1)
aux = writedata(0)
aux = writedata(1)
case 4
aux = writedata(1)
aux = writedata(0)
aux = writedata(0)
aux = writedata(1)
aux = writedata(1)
aux = writedata(0)
aux = writedata(0)
aux = writedata(1)
case 5
aux = writedata(0)
aux = writedata(0)
aux = writedata(1)
aux = writedata(0)
aux = writedata(1)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
case 6
aux = writedata(0)
aux = writedata(0)
aux = writedata(1)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(1)
case 7
aux = writedata(1)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(1)
aux = writedata(1)
aux = writedata(1)
aux = writedata(1)
case 8
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
case 9
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(1)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
case 0
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(1)
aux = writedata(0)
case 10
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(0)
aux = writedata(1)
aux = writedata(0)
end select
result = 1
end sub

sub procedure interrupt
delay_ms(10)
  v = v+1
INTCON.intf=0
end sub



'---Programa principal------------
main:

OPTION_REG=%10000000   'Resistencias de weak pull-up desabilitadas

INTCON=%10010000            'Interrupciones Generales Habilitadas
                        


'Configuro el portA:
TRISA.0 = 0 'Salida
TRISA.1 = 1 'Entrada
TRISA.2 = 1 'Entrada
TRISA.3 = 1 'Entrada
TRISA.4 = 1 'Entrada


'Configuro el portB:
TRISB.0 = 1 'Salida (INT)
TRISB.1 = 0 'Salida (CLOCK)
TRISB.2 = 0 'Salida (DATA)
TRISB.3 = 1 'Salida
TRISB.4 = 0 'salida
TRISB.5 = 0 'Salida
TRISB.6 = 0 'Salida
TRISB.7 = 0 'Salida





'---------PROGRAMA PRINCIPAL------------
v = 0
i = 0
n = 0
u = 0
p = 0

STB1 = 1
STB2 = 1
STB3 = 1
STB4 = 1
aux = writedigit(0)

loop:
'------------botones----------
if porta.2 = 1 then
delay_ms(100)
n = n + 1
end if

if porta.3 = 1 then
delay_ms(100)
p = p + 1
end if


'---------rutina segmentos--------

STB1 = 1
aux = writedigit(n)
STB1 = 0

STB2 = 1
aux = writedigit(u)
STB2 = 0

STB3 = 1
aux = writedigit(p)
STB3 = 0

STB4 = 1
aux = writedigit(i)
STB4 = 0


if v = 60 then
n = n+1
v = 0
end if

if n = 10 then
n = 0
u=u+1
end if

if u = 6 then
u = 0
p = p + 1
end if

if p = 10 then
p = 0
i = i + 1
end if

if p = 4 then
if i = 2 then
p = 0
i = 0
end if
end if
Goto loop
End.
« Última modificación: 12 de Enero de 2010, 20:26:48 por andrestecno »