Введение
Иногда при программировании микроконтроллеров требуется выводить на дисплей или терминал какие-то числовые данные. Это могут быть показания АЦП, значение внутренних часов, коды ошибок, состояния автомата и т.п. Процедура вывода числа состоит из следующих шагов, нужно преобразовать двоичное число в двоично-десятичное, перевести двоично-десятичное число в символьное представление и после этого передать полученный результат какой-то функции вывода. Для выполнения этой задачи я написал небольшую библиотеку.
Особенности
- работает с любыми микроконтроллерами и компиляторами,
- быстрый алгоритм без использования операции деления,
- работает с 8, 16 и 32 разрядными двоичными числами,
- есть функции для работы с десятичными числами заданной разрядности,
- может сохранять результат преобразования в виде строки в буфере,
- если определена внешняя функция вывода, может сразу передавать результат ей.
Подключение к проекту
1. Переписываем файлы bcd.h и bcd.c в папку проекта.
2. Подключаем bcd.c к проекту внутри среды разработки.
3. Инклюдим заголовочный файл bcd.h к сишному файлу, в котором будут использоваться функции преобразования.
4. Настраиваем конфигурацию в заголовочном файле bcd.h.
5. Прописываем в код вызов функций библиотеки.
Настройка конфигурации
Настройка конфигурации включает в себя следующие шаги.
1. Подключение внешней библиотеки для вывода данных. Если этот функционал не используется, эту строчку можно закомментировать.
//подключаю библиотеку для вывода на lcd
#include "lcd_lib.h"
2. Переопределение функции вывода. Если этот функционал не используется макрос нужно оставить пустым.
//вывод не используется оставляем макрос пустым
#define BCD_SendData(data)
//вывод используется, переопределяем функцию
#define BCD_SendData(data) LCD_WriteData(data)
3. Отображение нуля в старших разрядах. Если закомментировать настройку ноль выводиться не будет, вместо него будет сохраняться символ пробела. Если оставить, ноль будет отображаться.
//при такой настройке BCD_Uchar(3) отобразит на экране 003
#define MIRROR_NULL
//если закомментировать BCD_Uchar(3) отобразит на экране 3
//#define MIRROR_NULL
4. Использование буфера.
В зависимости от настроек библиотеки, функции преобразования чисел могут сохранять результат в буфере в виде строки, которую потом можно передать какой-нибудь функции вывода. Если эту настройку закомментировать, то запись в буфер производиться не будет.
#define BCD_BUF_USE
5. Требуемый конечный результат. Библиотека позволяет переводить двоичные числа в двоично-десятичный вид или в символьный. Если данная настройка закомментирована используется двоично-десятичное представление, если нет, то символьное.
#define BCD_SYM
Описание функций
Общие функции для преобразования 8, 16 и 32 разрядных двоичных чисел.
void BCD_Uchar(uint8_t value) - преобразует числа от 0 до 255
void BCD_Uint(uint16_t value) - преобразует числа от 0 до 65535
void BCD_Ulong(uint32_t value) - преобразует числа от 0 до 4294967295
Пример
#define F_CPU 9600000UL
...
uint8_t count = 120;
uint16_t adc_value = 1020;
...
BCD_Uchar(count);
BCD_Uint(adc_value);
BCD_Ulong(F_CPU);
Функции для преобразования десятичных чисел заданной разрядности.
void BCD_1(uint8_t value) - преобразует числа от 0 до 9
void BCD_2(uint8_t value) - преобразует числа от 0 до 99
void BCD_3(uint8_t value) - преобразует числа от 0 до 255
void BCD_3Int(uint16_t value) - преобразует числа от 0 до 999
void BCD_4Int(uint16_t value) - преобразует числа от 0 до 9999
void BCD_5Int(uint16_t value) - преобразует числа от 0 до 65535
Пример
#define DATA 23
...
//переменная которая всегда < 10
uint8_t index = 0;
//счетчик до 999
uint8_t count;
...
BCD_1(index);
BCD_2(DATA);
BCD_3Int(count);
//а это неправильно
BCD_1(DATA);
BCD_3(count);
Функция для получения указателя на буфер, в котором сохраняется результат. Если буфер не используется, функция возвращает нулевой указатель.
uint8_t* BCD_GetPointerBuf(void);
Пример
//определяем переменную указатель на буфер
uint8_t* pBuf;
//инициализируем эту переменную
pBuf = BCD_GetPointerBuf();
//преобразуем число, а затем выводим строку на экран
BCD_3Int(counter);
LCD_SendStr(pBuf);
Файлы
bcd.rar - библиотека для перевода двоичных чисел в двоично-десятичные и символы