Primero que nada no entiendo por que las universidades usan BASIC cuando los fabricantes imponen C en sus compiladores, mas cuando es un lenguaje "nuevo" para el usuario y que le costaria lo mismo empezar con C que con BASIC. No es solo en tu lugar, sino en mi universidad tambien me ocurrio con un alumno de otra carrera
Tu proyecto es DEMASIADO largo.
Software:
Todo depende del PIC que tengas.
La base de tiempos podes usar un Timer con interrupciones y un cristal de 32.768 Hz, de esa forma dividiendo te aproximas lo mas cercano a lo que es 1 segundo (1/32768), tambien se volveria mas facil si el PIC presenta un timer de 16bits ya que permite contar mucho mas que uno de 8. Por que interrupciones ? por que te permite estar a la "escucha" de las entradas y el tiempo se acumula solo y con menos error. Si posee modulo CCP podrias tambien hacer que se autoresetee de esa forma se vuelve mas exacto y mas afcil el trabajo de la base de tiempos.
No me quedaron claro todavia lo de las entradas.. Cuantos botones hay ? Si haces un antirebote por hardware te complicarias menos agregando delays por software, mas cuando tenes que medir tiempos.
Deberias usar las interrupciones de cambio de nivel o flanco para al menos la tapa y el reset(este estaria bueno por flanco), de esa forma obtenes el tiempo rapida y con mas certeza que preguntando constantemente por el pin.
Sobre guardar los datos te referis a que si le cortas la alimentacion estas sigan con el mismo valor ? Si es asi tendrias que ver como grabar/leer en la EEPROM del micro.
T1 controla las unidades y T2 las fracciones, pero como reseteas ese valor ? suponete que te pasate y lo pusiste 7.50 y era 6.50, cual el maximo? sino tendrias que seguir hasta un ejemplo de 999.50 y volver a 0.
Te podria hacer un programa en lenguaje hombre, por que realmente no programo en BASIC pero te ayudaria a guiarte masomenos como es el tema.
Conf inicial:
Aca configuro puertos entrada salida, pongo a 0 todo, creo variables etc
Configuro timer
Configuro interrupciones ( flanco ascendente )
Activo interrupciones menos la del timer
Interrupcion timer (esta depende la forma que se haga segun lo que tenga el PIC, supongo timer de 16 bits + modulo CCP):
Reseteo flag de interrupcion (el timer se pone a 0 solo)
Estoy contando?
Si->
segundos = Segundos + 1
segundos es igual a 60 ?
SI(segundos) - >
minuto = minuto +1
segundo = 0
minuto es igual a 60 ?
SI(minuto) ->
hora = hora +1
minuto = 0
Estoy midiendo el reset?
Si->
contador de reset + 1
Fin interrupcion timer
Interrupcion botones(supongo solo tapa por nivel y reset por flanco, pero podrian ir todas las demas por nivel) :
Se activo tapa?
Si ->
Desactivo interrupciones timer
Activo flag de tapa ( para el programa principal )
Se activo reset?
Si -> es Flanco positivo ?
Si ->
contador de reset = 0
activo flag para la interrupcion del timer asi sabe que estoy contando
cambio la interrupcion a flanco descendiente
No -> ( significa que lo solte o sea flanco descendiente )
desactivo flag para que me cuente en el timer
contador de reset mayor a 4? ( Si no lo es entonces no hago nada, es como si no lo hubiera presionado )
Si ->
Reseteo segundos , minutos y horas.
Activo flag de reset
Fin interrupcion de botones
Programa principal:
Inicio LCD
Bucle infinito -> While ,do, lo que sea.
Esta activado el flag de tapa?
Si ->
Muestro hora en el micro
Flag de tapa = 0
Se presiono OK?
Si ->
Muestro el precio ( tengo que hacer lso calculos obviamente)
Se presiono T1?
Si ->
Incremetno unidad de tarifa
Muestro en LCD
delay ? ( puede ser para que no cuente como loco cuando lo presiones apenas )
Se presiono T2?
Si ->
Incremetno fracciones de tarifa
Muestro en LCD
delay
Se presiono SET?
Si->
Guardo valores de tarifa en la EEPROM ( esto es necesario solo si necesitas que cuando se corte la tension del micro queden los valores de tarifa, solo tenes que recordar que en la EEPROM no se puede guardar constantemente, tiene ciclos de escritura limitados)
Se activo el flag de reset?
Si->
muestro todo en 00:00:00
borro flag de reset
Tu programa creo que seria algo asi aproximadamente, a lo mejor algunos errores por que no se bien los botones, pero mas ayuda no puedo darte. Si te parecio chino todo lo que dije entonces vas a tener que echarle una mirada al datasheet del microcontrolador, ahi estan explicados todos los modulos 1 por 1 aunque en ingles, sino podes buscar por internet que siemrpe hay tutoriales de los modulos y explicaciones de como funcionan, aunque sea de algun PIC similar, o directamente podes preguntar aca si te da pereza xD.
El programa no es para NADA corto. Y se puede complicar a un mas si haces una maquina de estados. Pero tal ves asi funcione exactametne como vos queres. Sin complicarsela tanto
Podria comenzar buscando ejemplos simples e intentar comprender los modulos como:
Ejemplo de timer
Ejemplo de interrupciones ( timer y entradas)
Ejemplo de LCD
Hardware
Sobre el circuito depende del micro tambien, ya que algunos poseen oscilador interno y podes sacar el pin de MCLR, de esa forma te ahorrarias algunos comopnentes externos, el LCD tambien depende de como se maneje en BASIC, si es a 4 bits o 8 bits. Hay algunos pines del integrado que solo tienen interrupciones, no son todos.
Reguladores de 5V por si lo alimentas con otra tension, sino con 5V tendrias el PIC mas algunos capacitores en la alimentacion , mas el cristal de 32k mas algunos cap para el cristal, si haces un antirebote en hw , necesiatarias una resistencia y un cap para cada boton. El lcd lleva creo que 1 resistencia para el backligth + un ptenciometro para controlar el contraste. Y esos serian todos los componentes.