void main(void) { _U08 u8Adc = 0; _U08 u8Val; _U16 u16Volts; ANCON0 = 0xff; ANCON1 = 0xff; Adc_Init(ADC_8BITS); Timers_Init(); /*inicializamos el driver para genere una interrupcion cada 5ms*/ _7segments_Init(); /*configuramos los pines como salidas*/ __ENABLE_INTERRUPTS(); /*se habilitan las interrupciones globales con prioridad*/ while (1) { if(Timers_u16GetTime(0) == 0)/*preguntamos si la interrupcion decrmento hasta llegar a 0 el canal 0*/ { Timers_SetTime(0, 5/timers_ms);/*se cumplen los 5ms asi que volvemos a recargar el mismo canal */ _7segments_Task(); /*actualiza el valor en el display y multiplexa al siguiente display*/ } if(Timers_u16GetTime(1) == 0)/*preguntamos si la interrupcion decrmento hasta llegar a 0 el canal 1*/ { Timers_SetTime(1, 100/timers_ms); /*se cumplen los 200ms asi que volvemos a recargar el mismo canal */ u8Adc = Adc_u16Read( 3 ); /*se lee el canal del adc*/ u16Volts = (_U16)u8Adc * (_U16)13; /*se trasnforma la lectura en milivolts*/ _7segments_SetNumber(u16Volts/10); /*actualizamos el display con el valor en volts*/ u8Val = _7segments_u8GetDisplay(2); /*se lee el tercer display*/ _7segments_SetDisplay(2, u8Val|0x80); /*se agrega el punto decimal*/ } } }
/**-----------------------------------------------------------------------------------------------*/ void _7segments_SetNumber(_U16 u16Value) { _U08 u8Digi; u8Digi = (_U08)(u16Value % (_U16)10); /*unidades*/ _7segments_SetDisplay(0, gua8Numbers[u8Digi]); #if _7SEGMENTS_DIGI_N > 1 u8Digi = ((u16Value / (_U16)10) % (_U16)10); /*decenas*/ _7segments_SetDisplay(1, gua8Numbers[u8Digi]); #endif #if _7SEGMENTS_DIGI_N > 2 u8Digi = (_U08)((u16Value / (_U16)100) % (_U16)10); /*centenas*/ _7segments_SetDisplay(2, gua8Numbers[u8Digi]); #endif #if _7SEGMENTS_DIGI_N > 3 u8Digi = (_U08)(u16Value / (_U16)1000); /*millares*/ _7segments_SetDisplay(3, gua8Numbers[u8Digi]); #endif }