If mile = 3993 Then
mile = 0
segu = segu + 1
If segu > 59 Then
segu = 1
minu = minu + 1
If minu > 59 Then
minu = 0
hora = hora + 1
If hora > 23 Then
hora = 0
minuaire = 0
' dia = dia + 1
' If dia = 8 Then
' dia = 1
' Endif
Endif
Endif
Endif
Endif
Hola Elena!
¿Te referis a ejemplos de codigo en BASIC o a el hard?
Si es respecto del codigo (supongo que se trata de eso por donde posteaste), para hacer un reloj generalmente se utiliza un timer, que incremente una variable cada cierto tiempo. Basandote en ese valor, incrementas los segundos, horas, minutos y eventualmente la fecha, indicador de AM/PM, etc.
Tambien es una buena idea dotarlo de alguna(s) alarma(s), no te parece?
Segui preguntando, que seguro algun forista tiene un reloj armado y te puede ayudar.
Hola:
No hay ejemplos de relojes en los que he puesto, pero me parece que si hay uno que indica un contador utilizando un Display multiplexado, el tema es que decidas como mismo lo quieres, si debera ser preciso mejor opta por un RTC, pero eso ya depende deti, define bien que es lo que quieres para poder ayudarte.
segs var byte
mins var byte
hora var byte
mins=0
hora=0
cuenta:
for segs=0 to 59
pause 1000
next segs
mins=mins+1
if mins > 59 then
mins = 0
hora = hora+1
endif
if hora > 23 then
hora = 0
mins = 0
endif
goto cuenta
Hola Helena, es muy importante comenzar con ejemplos bien simple, para ir encontrando errores... supuestamente ya construiste un simple destalledor de led?
le fuiste cambiando los tiempos de destello? sensaste un interruptor?...
si la respuesta es si... pues entonces manos a la obra con el reloj! :D
Un abrazo!
Norberto
'*****************************************************************************************
'* Name : PicReloj.BAS *
'* Author : Lisandro (psykhon@yahoo.com) *
'* Notice : Copyright (c) 2006 *
'* : All Rights Reserved *
'* Date : 02/08/2006 *
'* Version : 1.3 *
'* Notes : se mejora la precision de la hora, se programa _ *
'* : el tmr0 con un preescalador de 256 como lo _ *
'* : explica la formula_ *
'* (reloj de intrucciones) / (preescaler de tmr0 * tmr) = overflows en 1 seg *
'*1,000,000,000 uS / (65,536 uS / TMRO overflow) = 15,258.78906 overflows for 1,000 S. *
'* luego solo resta subdividir por 16000 y esto d un margen teorico de error de *
'* 51,711.99345 (ver http://www.picbasic.co.uk/forum/showthread.php?t=2129) *
'*****************************************************************************************
CONFIG XT_OSC , WDT_OFF , PWRTE_ON , BODEN_OFF , LVP_OFF , PWRTE_ON , CP_OFF
Device = 16F628a
XTAL = 4
CMCON = 7 'establece las lineas como digitales
Declare LCD_TYPE 0 'caracterial
Declare LCD_DTPIN PORTb.4
Declare LCD_ENPIN PORTB.3
Declare LCD_RSPIN PORTB.0
Declare LCD_INTERFACE 4 ' bus de datos multiplexado a 4 pines
Declare LCD_LINES 2 ' numero de lineas de
DIM WBotonA AS BYTE ' Workspace para la instruccion BUTTON, botonA
DIM WBotonB AS BYTE ' Workspace para la instruccion BUTTON, botonB
Declare BUTTON_DELAY = 1500 ' no presente en documentacion, define la demora de repeticion del boton
dim Segundos as byte
dim Minutos as byte
Dim Horas as byte
dim Alarma as bit 'almacena si debe sonar la alarma o no
dim wtimer as word 'subdivisor del tmr0
Dim HoraAlarma as byte 'almacena la hora fijada para la alarma
Dim MinutoAlarma as byte 'almacena el minuto fijado para la alarma
symbol TiempoAlerta = 30 'constante que indica cuanto tiempo suena la alarma
dim wTiempoAlerta as byte
symbol PinAlarma = porta.2 'indica en que pin esta conectado el parlante
dim Parpadeo as bit 'almacena cuando parpadea el valor selec en pantalla
Dim Registro as byte 'almacena que registro se esta actualizando_
' 1 hora, 2 minuto, 3 hora alarma, 4 minuto alarma
'inicializacion de variables
segundos = 0
minutos = 0
horas = 0
horaalarma = 0
MinutoAlarma = 0
registro = 1
alarma = 0 ' seteo la alarma como apagada
wtimer = 15625 'medio segundo (4mhx xtal)
OPTION_REG = %10000111 'desabilita pull-ups, prescale TMR0 by 256
INTCON = 0 'desabilita interrupciones
TrisA = %11111 ' input ' seteo los dos primeros pines del PORTA como entradas
cls 'limpio la pantalla
Main:
if intcon.2=0 then goto main ' chekeo desbordamiento de tmr0 por polling
intcon.2 = 0 'borro el flag de desbordamiento
wtimer = wtimer - 1024
if wtimer < 1024 then
Segundos = segundos + 1 'Incremento los segundos
if segundos = 60 then 'Si los segundos = 60 incremento los minutos y pongo a 0 los segundos
segundos = 0
gosub IncrementarMinutos
cls ' limpio la pantalla
endif
gosub MostrarHora
if horas = horaalarma and minutos = minutoalarma and alarma = 1 then gosub SonarAlarma
wtimer = wtimer + 15625
else
'rutinas para verificar si se presiona algun boton, si es "mode" se va a edicion,_
'si es set se enciende la alarma
BUTTON porta.0 , 1 , 255 , 250 , wbotona, 0 , NoBotonA
gosub modoedicion
NoBotonA:
BUTTON porta.1 , 1 , 255 , 250 , wbotona, 0 , NoBotonB
if alarma = 1 then 'si la alarma esta encendida la apaga y viceversa
alarma = 0
else
alarma = 1
wTiempoAlerta = 0 'resetea el tiempo que suena la alarma
end if
NoBotonB:
end if
goto main
ModoEdicion:
if intcon.2=0 then goto modoedicion ' chekeo desbordamiento de tmr0 por polling
intcon.2 = 0 'borro el flag de desbordamiento
wtimer = wtimer - 1024
if wtimer < 1024 then
' genera el efecto parpadeo en el lcd sobre el registro seleccionado
select registro ' selecciona sobre que registro se etsa haciendo el parpadeo
case 1 ' parpadeo sobre las horas
if parpadeo = 1 then
print at 1,1," "
Parpadeo = 0
else
print at 1,1,dec horas
parpadeo = 1
endif
case 2 ' parpadeo sobre los minutos
if parpadeo = 1 then
print at 1,4," "
Parpadeo = 0
else
print at 1,4,dec minutos
parpadeo = 1
endif
case 3 ' parpadeo sobre la hora de alarma
print at 2,3, ":" ' muestro el separador de alarma
if parpadeo = 1 then
print at 2,1," "
Parpadeo = 0
else
print at 2,1,dec horaalarma
parpadeo = 1
endif
case 4 ' parpadeo sobre los minutos de alarma
if parpadeo = 1 then
print at 2,4," "
Parpadeo = 0
else
print at 2,4,dec minutoalarma
parpadeo = 1
endif
endselect
wtimer = wtimer + 15625
else
'control de botones
BUTTON porta.0 , 1 , 255 , 250 , wbotona, 0 , NoBotonA2 'rutina para detectar el primer boton "mode"
registro = registro + 1 'si se vuelve a apretar el boton incremento registro
if Registro = 5 then 'y si es 3 lo resetea a 1 y retorna al programa
registro = 1
segundos = 0 'cuando se sale de edicion los segundos arrancan en 0
cls
return
end if
NoBotona2: ' aqui continua la ejecucion si no es presinado el boton A
'rutina para detectar el boton "set" e incrementar el registro seleccionado
BUTTON porta.1 , 1 , 255 , 250 , wbotona, 0 , NoBotonBE
select registro ' controla que registro esta seleccionado
case 1
horas = horas + 1 ' incrementa las horas
if horas >= 24 then horas = 0 ' si el valor es mayor o = que 24 las pone en 0
case 2
minutos = minutos + 1 'incrementa los minutos
if minutos >= 60 then minutos = 0 'los pone en 0 si son 60 o mas
case 3
horaalarma = horaalarma + 1 'incrementa los minutos
if horaalarma >= 24 then horaalarma = 0 'los pone en 0 si son 60 o mas
case 4
minutoalarma = minutoalarma + 1 'incrementa los minutos
if minutoalarma >= 60 then minutoalarma = 0 'los pone en 0 si son 60 o mas
endselect
nobotonBE:
endif
goto modoedicion ' entra en loop hasta que se abandona
MostrarHora:
print at 1,1, dec horas 'muestro las horas
print at 1,3, ":" 'muestro el separador
print at 1,4, dec minutos 'muestro los minutos
print at 1,6, ":" 'muestro el separador
print at 1,7, dec segundos 'muestro los segundos
if alarma = 1 then
gosub mostrarAlarma
else
print at 2,1, " "
endif
return
MostrarAlarma:
print at 2,1, dec Horaalarma
print at 2,3, ":"
print at 2,4, dec minutoalarma
return
IncrementarMinutos: 'Incremento los minutos, si son 60 los pongo en 0 _
minutos = minutos + 1 'e incremento las horas
if minutos = 60 then
minutos = 0
gosub Incrementarhoras
endif
return
IncrementarHoras: 'Incremento las horas y si son 24 las pongo en 0
Horas = horas + 1
if horas = 24 then horas = 0
return
SonarAlarma:
sound pinalarma,[120,15] ' reproduce el sonido de la alarma
wTiempoAlerta = wTiempoAlerta + 1 'incrementa el valor que controla la duracion de la alarma
if wtiempoalerta = tiempoalerta then alarma = 0 'si pasan los segundos de alarma se apaga la misma
if parpadeo = 0 then 'rutina que hace parpadear la alarma en el display
gosub mostrarAlarma
parpadeo = 1
else
print at 2,1, " "
parpadeo = 0
endif
return
metele helena y que te quede bonito
nahhh, lo puse porque me recuenda al libro de vernemetele helena y que te quede bonito
De verdad estás en ISLANDIA???
¿Qué compilador es ese Navaismo?
¿Qué compilador es ese Navaismo?
por lo que veo es compilador es mikrobasic
nahhh, lo puse porque me recuenda al libro de vernemetele helena y que te quede bonito
De verdad estás en ISLANDIA???