Electronica e Informatica todo para los amantes y aficionados a la electronica

Reloj digital con pantalla LCD simulacion Code Proteus

Reloj digital basado en PIC16F877 con pantalla LCD (simulación Code+Proteus)


Usando el simulador PIC16 ( Proteus ) puede verificar este código de reloj digital y cambiarlo según sus necesidades. Este código está escrito en lenguaje C usando MPLAB con el compilador C HI-TECH. Puede descargar este código desde la sección ' Descargas ' en la parte inferior de esta página.

⚠️Al leer este artículo, se supone que usted sabe

  • Cómo conectar la pantalla LCD con el microcontrolador PIC16F877. Si no sabe lea  esta página .
  • Cómo configurar timer0 del microcontrolador PIC16F877. Si no sabe, lea  esta página .

El siguiente diagrama (hecho en  Proteus ) muestra el diagrama del circuito del microcontrolador PIC.



La figura anterior se tomó después de 2 minutos y 59 segundos de simulación de código en  Proteus . En el código, timer0 se usa como base para la generación de relojes digitales. Timer0 se usa aquí para generar interrupciones de 1 mseg. Después de cada 1 ms, se incrementa una variable global denominada  msCounter  . Cuando  msCounter  alcanza un valor de 1000, se incrementa otra variable global llamada  secCounter  y este proceso se repite. De manera similar, cuando  secCounter  llega a 60,   minCounter  se incrementa. Y cuando  minCounter  llega a 60, entonces  hrCounter  incrementa. Este proceso continúa hasta  hrCounter llega a 24, entonces todas estas variables restablecen sus valores. La pantalla LCD se actualiza con los nuevos valores de  hrCounter ,  minCounter  y  secCounter  después de cada segundo.

En este circuito se utiliza un cristal de 4 MHz de valor, lo que hace que este PIC16F877 funcione a una velocidad de 1 MIPS (millones de instrucciones por segundo).

Código

El código de la función principal se muestra a continuación.



En la función principal, en primer lugar, la pantalla LCD se inicializa mediante  la función InitLCD()  . Luego, Timer0 se inicializa para generar interrupciones de 1 mseg. Después de eso, en el  bucle   while(1) , cada vez que msCounter  alcanza un valor de cero [1] , se actualizan  nuevos valores de  hrCounter ,  minCounter  y  secCounter  en la pantalla LCD. La función UpdateTimeCounters()  se llama cada vez y corrige los valores de cada variable de contador según el valor de  msCounter , que se incrementa en la función ISR de timer0 (que se muestra a continuación).



En la figura anterior, se muestra el código de interrupción para timer0. El temporizador 0 expira cada 1 mseg y se genera una interrupción que ejecuta la función  de interrupción ISR()  que se muestra arriba. En esta función, el registro del temporizador 0 se inicializa con un valor de 0x08, lo que hace que el temporizador 0 caduque después de exactamente 1 ms. Después de eso, el indicador de interrupción timer0 se borra y  la variable msCounter  se incrementa. Entonces, esto significa que  la variable msCounter  se incrementa después de cada 1 mseg.

El código utilizado para inicializar Timer0 se muestra a continuación.



En la función  Init1msecTimerInterrupts() , timer0 se inicializa para generar una interrupción cada 1 mseg. El temporizador 0 cuenta de 0 a 249 y un preescalar de 1:4 significa que se generará una interrupción cada 250 × 4 = 1 ms de tiempo.

El código de la función UpdateTimeCounters()  se muestra a continuación.



En esta función, está claro que cuando  msCounter  alcanza un valor de 1000,  secCounter  aumenta y  msCounter  se convierte en cero. De manera similar, cuando  secCounter  llega a 60,   minCounter  se incrementa y  secCounter  se convierte en cero. Y cuando  minCounter  llega a 60,  hrCounter  se incrementa y  minCounter  se convierte en cero. Este proceso continúa hasta que  hrCounter  llega a 24, luego todas estas variables restablecen sus valores.

Este código pretende ser un ejemplo simple de cómo se puede usar PIC16F877 para hacer una pantalla de reloj digital. Puede dejar sus comentarios en la sección de comentarios a continuación.

Notas y referencias

[1]   msCounter  aumenta a un valor de 1000, luego se restablece a 0 y comienza a incrementarse nuevamente. Entonces,  msCounter  vuelve a ser cero después de cada segundo exactamente. Entonces, la pantalla LCD se actualiza con un nuevo valor de tiempo después de cada segundo.

Descargas

 ?

El código de visualización del reloj digital que utiliza PIC16F877 se compiló en MPLAB v8.85 con el compilador HI-TECH C v9.83 y la simulación se realizó en Proteus v7.10. Para descargar el código y  la simulación  de Proteus  , haga clic aquí .



Blogarama - Blog Directory