void UART_TxDecimalNumber(uint32_t var_decNumber_u32, uint8_t var_numOfDigitsToTransmit_u8) { uint8_t i=0,a[10]; if(var_decNumber_u32==0) { /* If the number is zero then update the array with the same for transmitting */ for(i=0;((i<var_numOfDigitsToTransmit_u8) && (i<C_MaxDigitsToTransmit_U8)) ;i++) a[i] = 0x00; } else { for(i=0;i<var_numOfDigitsToTransmit_u8;i++) { /* Continue extracting the digits from right side till the Specified var_numOfDigitsToTransmit_u8 */ if(var_decNumber_u32!=0) { /* Extract the digits from the number till it becomes zero. First get the remainder and divide the number by 10 each time. If var_number_u32 = 123 then extracted remainder will be 3 and number will be 12. The process continues till it becomes zero or max digits reached*/ a[i]=util_GetMod32(var_decNumber_u32,10); var_decNumber_u32=var_decNumber_u32/10; } else if( (var_numOfDigitsToTransmit_u8 == C_DefaultDigitsToTransmit_U8) || (var_numOfDigitsToTransmit_u8 > C_MaxDigitsToTransmit_U8)) { /* Stop the iteration if the Max number of digits are reached or the user expects exact(Default) digits in the number to be transmitted */ break; } else { /*In case user expects more digits to be transmitted than the actual digits in number, then update the remaining digits with zero. Ex: var_number_u32 is 123 and user wants five digits then 00123 has to be transmitted */ a[i]=0; } } } while(i) { /* Finally get the ascii values of the digits and transmit*/ UART_TxChar(util_Dec2Ascii(a[i-1])); i--; } }
void UART_TxNumber(uint8_t var_uartChannel_u8, uint8_t var_numericSystem_u8, uint32_t var_number_u32, uint8_t var_numOfDigitsToTransmit_u8) { uint8_t i=0,a[10]; if(C_BINARY_U8 == var_numericSystem_u8) { while(var_numOfDigitsToTransmit_u8!=0) { /* Start Extracting the bits from the specified bit positions. Get the Acsii values of the bits and transmit */ i = util_GetBitStatus(var_number_u32,(var_numOfDigitsToTransmit_u8-1)); UART_TxChar(var_uartChannel_u8,util_Dec2Ascii(i)); var_numOfDigitsToTransmit_u8--; } } else if(var_number_u32==0) { /* If the number is zero then update the array with the same for transmitting */ for(i=0;((i<var_numOfDigitsToTransmit_u8) && (i<C_MaxDigitsToTransmit_U8)) ;i++) UART_TxChar(var_uartChannel_u8,'0'); } else { for(i=0;i<var_numOfDigitsToTransmit_u8;i++) { /* Continue extracting the digits from right side till the Specified var_numOfDigitsToTransmit_u8 */ if(var_number_u32!=0) { /* Extract the digits from the number till it becomes zero. First get the remainder and divide the number by 10 each time. example for Decimal number: If var_number_u32 = 123 then extracted remainder will be 3 and number will be 12. The process continues till it becomes zero or max digits reached*/ a[i]=util_GetMod32(var_number_u32,var_numericSystem_u8); var_number_u32=var_number_u32/var_numericSystem_u8; } else if( (var_numOfDigitsToTransmit_u8 == C_DefaultDigitsToTransmit_U8) || (var_numOfDigitsToTransmit_u8 > C_MaxDigitsToTransmit_U8)) { /* Stop the iteration if the Max number of digits are reached or the user expects exact(Default) digits in the number to be transmitted */ break; } else { /*In case user expects more digits to be transmitted than the actual digits in number, then update the remaining digits with zero. Ex: var_number_u32 is 123 and user wants five digits then 00123 has to be transmitted */ a[i]=0; } } while(i) { /* Finally get the ascii values of the digits and transmit*/ UART_TxChar(var_uartChannel_u8,util_Hex2Ascii(a[i-1])); i--; } } }
void LCD_DisplayNumber(uint8_t v_numericSystem_u8, uint32_t v_number_u32, uint8_t v_numOfDigitsToDisplay_u8) { uint8_t i=0,a[10]; if(C_BINARY_U8 == v_numericSystem_u8) { while(v_numOfDigitsToDisplay_u8!=0) { /* Start Extracting the bits from the specified bit positions. Get the Acsii values of the bits and display */ i = util_GetBitStatus(v_number_u32,(v_numOfDigitsToDisplay_u8-1)); LCD_DisplayChar(util_Dec2Ascii(i)); v_numOfDigitsToDisplay_u8--; } } else if(v_number_u32==0) { /* If the number is zero then display Specified number of zeros*/ /*TODO: Display single zero or multiple. Currently single zero is displayed*/ for(i=0;((i<v_numOfDigitsToDisplay_u8) && (i<C_MaxDigitsToDisplay_U8));i++) LCD_DisplayChar('0'); } else { for(i=0;i<v_numOfDigitsToDisplay_u8;i++) { /* Continue extracting the digits from right side till the Specified v_numOfDigitsToDisplay_u8 */ if(v_number_u32!=0) { /* Extract the digits from the number till it becomes zero. First get the remainder and divide the number by TypeOfNum(10-Dec, 16-Hex) each time. example for Decimal number: If v_number_u32 = 123 then extracted remainder will be 3 and number will be 12. The process continues till it becomes zero or max digits reached*/ a[i]=util_GetMod32(v_number_u32,v_numericSystem_u8); v_number_u32=v_number_u32/v_numericSystem_u8; } else if( (v_numOfDigitsToDisplay_u8 == C_DisplayDefaultDigits_U8) || (v_numOfDigitsToDisplay_u8 > C_MaxDigitsToDisplay_U8)) { /* Stop the iteration if the Max number of digits are reached or the user expects exact(Default) digits in the number to be displayed */ break; } else { /* In case user expects more digits to be displayed than the actual digits in number, then update the remaining digits with zero. Ex: v_num_u32 is 123 and user wants five digits then 00123 has to be displayed */ a[i]=0; } } while(i!=0) { /* Finally get the ascii values of the digits and display*/ LCD_DisplayChar(util_Hex2Ascii(a[i-1])); i--; } } }