Algoritmo de un cronometro de conteo de horas, segundos decenas de milisegundos, a partir del miltiplexado de 6 display de 7 segmentos.
Fork of Ticker_HelloWorld by
main.cpp
00001 /* mbed Program: Proyecto Cronometro mediante multiplexado de D7S */ 00002 #include "mbed.h"//Libreria para elementos básicos de mbed-OS 00003 #include "constantes.h"//Libreria de cabecera para almacenamiento de constantes 00004 #include "fnc_usuario.h"//Libreria para declaración de funciones de usuario 00005 00006 /******************************************************************************/ 00007 //Declaración para la utilización de hardware del sistema 00008 Ticker imp_d7s; //Interrupción temporizada para impresión en D7S multiplexados 00009 Ticker temp_cronometro; //Interrupción temporizada para cuantificación del tiempo del sistema 00010 DigitalOut led1(PTD5); //TEstigo led Verde 00011 DigitalOut led2(PTE29); //Testigo Led Rojo 00012 DigitalIn sw_arranque(PTD4); //Entrada digital para iniciar la cuantificacion de tiempo del sistema 00013 DigitalIn sw_paro(PTD2); //Entrada digital para parar la cuantificación de tiempo del sistema 00014 DigitalIn sw_reset(PTA13); //Entrada digital para reseteo de variables del sistema 00015 BusOut pines_disp7S(PTA17, PTB9, PTA7,PTA6,PTA14,PTA16,PTA15,PTC16); //Pines reservados para la impresión de información en los segmentos de los display 00016 BusOut pines_transist(PTC9,PTC8,PTA5,PTA4,PTA12,PTD3); //pines reservados para el control de transistores para conmutar displays 00017 00018 /******************************************************************************/ 00019 //Variables utilizadas para la logica del sistma 00020 int contador_digitos; //Contador para la impresión de datos en los displays 00021 int contador_ms; //Contador para cuantificacion de milisegundos 00022 int contador_decms; //Contador para cuantificacion de decenas de milisegundos 00023 int contador_seg; //Contador para cuantificacion de segundos 00024 int contador_min; //Contador para cuantificacion de minutos 00025 int impresion_d7s[6]; //Vector para almacenar información de los digitos a imprimir en D7S 00026 bool band_arranque; //Bandera para arranque del sistema 00027 00028 00029 /******************************************************************************/ 00030 //Tablas para control de grupos de pines, D7S y multiplexado 00031 int cod_disp7s[DIGITOS_D7S_ANODO]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //Codigo para vizualización de D7S de anodo comun 00032 int codigo_transist[MUX_D7S]={0x01,0x02,0x04,0x08,0x10,0x20}; //Tabla para despliegue del digito 0 al 5 00033 int codigo_transist_2[MUX_D7S]={0x20,0x10,0x08,0x04,0x02,0x01}; //Tabla para despliegue del digito 5 al 0 00034 00035 00036 /******************************************************************************/ 00037 //Rutina de Atención a la Interrupción para realizar la impresión de datos en el multiplexado de los D7S 00038 void impres_d7s() {//inicio ISR para impresión de D7S 00039 pines_disp7S=cod_disp7s[(impresion_d7s[contador_digitos])]; //Asignación de codigos para despliegue de datos en pines de segmentos de D7S 00040 pines_transist=codigo_transist_2[contador_digitos]; //Asignación de codigo para la conmutación de D7S 00041 contador_digitos--; //Contador decremental para variable de control de conmutación de D7S 00042 if(contador_digitos<0) //Condición para numeros menores a cero, reset de variable contadora 00043 contador_digitos=5; //Reset de variable contadora para inicio en D7S #5 00044 }//fin ISR para impresión de D7S 00045 00046 00047 /******************************************************************************/ 00048 //Rutina de Atención a la Interrupción para la cuantificación del tiempo del sistema 00049 void conteo_tiempo(){//inicio ISR para cuantificación de tiempos 00050 if(band_arranque==VERDADERO){ //Condición de arranque de la cuantificación del sistema 00051 contador_ms++;} //Variable contadora para cuantificacion de milisegundos del sistema 00052 led1 = !led1; //luz testigo para indicación de trabajo en el MCU 00053 00054 }//fin ISR para cuantificación de tiempos 00055 00056 /******************************************************************************/ 00057 int main() {//inicio funcion principal 00058 /*----------------------------------------------------------------------------*/ 00059 //Inicialización de variables y vinculacion de ISR a los servicios de interrupción 00060 imp_d7s.attach(&impres_d7s, 0.001); //viculación de la función de interrupción a la ISR para la vinculación de la impresión de datos en el D/S 00061 temp_cronometro.attach(&conteo_tiempo,0.001); //viculación de la función de interrupción a la ISR para la cuantificación de tiempo 00062 contador_digitos=5; //Inicialización de la variable contadora para impresión de los displays 00063 band_arranque=FALSO; //Inicialización de variable para el control de inicio de operación del sistema 00064 00065 /*----------------------------------------------------------------------------*/ 00066 //Inicio looop de trabajo iterativo 00067 00068 while(1) {//inicio loop de trabajo 00069 00070 if(sw_arranque==VERDADERO){//Inicio if-1 //Pregunta por el estado del boton arranque 00071 band_arranque=VERDADERO; //Habilitación de la bandera de arranque del sistema 00072 wait_ms(50); //Retardo de tiempo para la eliminación del rebote en el interruptor 00073 }//fin if-1 00074 00075 if(sw_paro==VERDADERO){//Inicio if-2 //Pregunta por el estado del boton paro 00076 band_arranque=FALSO; //Deshabilitación de la bandera de arranque del sistema 00077 wait_ms(50); //Retardo de tiempo para la eliminación del rebote en el interruptor 00078 } 00079 if(sw_reset==VERDADERO){//Inicio if-3 //Pregunta por el estado del boton paro 00080 band_arranque=FALSO; //Deshabilitación de la bandera de arranque del sistema 00081 contador_ms=0; //Reset contador de milisegundos 00082 contador_decms=0; //Reset contador de decenas de milisegundos 00083 contador_seg=0; //Reset contador de segundos 00084 contador_min=0; //Reset contador de minutos 00085 00086 for(int i=0;i<6;i++){ //Loop para reseteo de variable para impresion de información en D7S 00087 impresion_d7s[i]=0; //Limpieza de dato para D7S 00088 } 00089 wait_ms(50); //Retardo de tiempo para la eliminación del rebote en el interruptor 00090 }//fin if-3 00091 00092 //Sección de cuantificación de decenas de milisegundo 00093 if(contador_ms>DECENAS_MS){//inicio if-4 //condicion para el incremento de decenas de milisegundos 00094 contador_decms++; //Incremento de variable contadora de decenas de milisegundos 00095 num2dig(contador_decms,&impresion_d7s[0],&impresion_d7s[1]); //Transformación del contador de decenas de milisegundos a digitos y almacenaje para despliegue en D7S 00096 contador_ms=0; //Reset contador de milisegundos 00097 }//fin if-4 00098 //Sección de cuantificación de segundos 00099 if(contador_decms==MS2SEG){//inicio if-5 //condicion para el incremento de segundos 00100 contador_seg++; //Incremento de variable contadora de segundos 00101 num2dig(contador_seg,&impresion_d7s[2],&impresion_d7s[3]); //Transformación del contador de segundos a digitos y almacenaje para despliegue en D7S 00102 contador_decms=0; //Reset contador de decenas de milisegundos 00103 }//fin if-5 00104 //Sección de cuantificación de minutos 00105 if(contador_seg==SEG2MIN){//inicio if-6 //condicion para el incremento de minutos 00106 contador_min++; //Incremento de variable contadora de minutos 00107 num2dig(contador_min,&impresion_d7s[4],&impresion_d7s[5]); //Transformación del contador de minutos a digitos y almacenaje para despliegue en D7S 00108 contador_seg=0; //Reset contador de decenas de segundos 00109 }//fin if-6 00110 //Candado para la cuantificación de minutos 00111 if(contador_min==MIN){//inicio if-7 //Condicion para el reset de minutos 00112 contador_min=0; //Reset de la variable contadora de minutos 00113 }//fin if-7 00114 00115 }//fin loop de trabajo 00116 00117 }//Fin función principal
Generated on Fri Jul 22 2022 23:52:03 by 1.7.2