[Открытый исходный код] Многофункциональное устройство для взвешивания

—— С форума разработчиков DWIN

В этом выпуске мы рассказываем о отмеченном наградами проекте форума разработчиков DWIN с открытым исходным кодом — многофункциональном весовом дозаторе. Инженер использует 4-дюймовый интеллектуальный экран COF, и благодаря взаимодействию данных между ядром ОС T5L, модулем HX711 и набором датчиков давления 5 кг пользователи могут легко реализовать функции отображения подсчета, такие как вес, цена за единицу, общая цена, тара и т. д. ., а также функции подсчета, отслеживания кривых изменения веса, корректировки точности весов и т. д., что позволяет легко переключаться между различными сценариями применения и наслаждаться удобным и эффективным процессом взвешивания.

1. Разработка пользовательского интерфейса

f26af533d43728cd210e0f7af5e7acc

2.C51 Дизайн

Часть справочного кода весов для реализации функции ценообразования выглядит следующим образом:

// Страница цен===================

#define VALUATION_UNIT_PRICE_ADDR 0x1010

#define VALUATION_GRAM_ADDR 0x1000

#define VALUATION_TOTAL_PRICES_ADDR 0x1020

uint32_t valuation_decorticate = 0; // Цена тары

uint32_t valuation_unit_price = 0; //Цена за единицу товара

// Обновление цены за единицу

void page_valuation_unit_price_refresh()

{

uint8_t test_display[10] = {0};

если (value_unit_price

{

test_display[0] = valuation_unit_price / 100 % 10 + 0x30;

test_display[1] = '.';

test_display[2] = valuation_unit_price / 10 % 10 + 0x30;

test_display[3] = valuation_unit_price / 1 % 10 + 0x30;

dgus_show_text_value_set (VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

иначе, если (value_unit_price

{

test_display[0] = valuation_unit_price / 1000 % 10 + 0x30;

test_display[1] = valuation_unit_price / 100 % 10 + 0x30;

test_display[2] = '.';

test_display[3] = valuation_unit_price / 10 % 10 + 0x30;

test_display[4] = valuation_unit_price / 1 % 10 + 0x30;

dgus_show_text_value_set (VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

иначе, если (value_unit_price

{

test_display[0] = valuation_unit_price / 10000 % 10 + 0x30;

test_display[1] = valuation_unit_price / 1000 % 10 + 0x30;

test_display[2] = valuation_unit_price / 100 % 10 + 0x30;

test_display[3] = '.';

test_display[4] = valuation_unit_price / 10 % 10 + 0x30;

test_display[5] = valuation_unit_price / 1 % 10 + 0x30;

dgus_show_text_value_set (VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

иначе, если (value_unit_price

{

test_display[0] = valuation_unit_price / 100000 % 10 + 0x30;

test_display[1] = valuation_unit_price / 10000 % 10 + 0x30;

test_display[2] = valuation_unit_price / 1000 % 10 + 0x30;

test_display[3] = valuation_unit_price / 100 % 10 + 0x30;

test_display[4] = '.';

test_display[5] = valuation_unit_price / 10 % 10 + 0x30;

test_display[6] = valuation_unit_price / 1 % 10 + 0x30;

dgus_show_text_value_set (VALUATION_UNIT_PRICE_ADDR, test_display, 4);

}

}

 

// Обновление веса

void page_valuation_weight_refresh()

{

uint8_t test_display[10] = {0x30};

uint32_t gram_display = 0;

if(gram_value >= valuation_decorticate)

{

gram_display = gram_value - valuation_decorticate;

если (gram_display

{

test_display[0] = gram_display / 1 % 10 + 0x30;

dgus_show_text_value_set (VALUATION_GRAM_ADDR, test_display, 3);

}

иначе, если (gram_display

{

test_display[0] = gram_display / 10 % 10 + 0x30;

test_display[1] = gram_display / 1 % 10 + 0x30;

dgus_show_text_value_set (VALUATION_GRAM_ADDR, test_display, 3);

}

иначе, если (gram_display

{

test_display[0] = gram_display / 100 % 10 + 0x30;

test_display[1] = gram_display / 10 % 10 + 0x30;

test_display[2] = gram_display / 1 % 10 + 0x30;

dgus_show_text_value_set (VALUATION_GRAM_ADDR, test_display, 3);

}

иначе, если (gram_display

{

test_display[0] = gram_display / 1000 % 10 + 0x30;

test_display[1] = gram_display / 100 % 10 + 0x30;

test_display[2] = gram_display / 10 % 10 + 0x30;

test_display[3] = gram_display / 1 % 10 + 0x30;

dgus_show_text_value_set (VALUATION_GRAM_ADDR, test_display, 3);

}

иначе, если (gram_display

{

test_display[0] = gram_display / 10000 % 10 + 0x30;

test_display[1] = gram_display / 1000 % 10 + 0x30;

test_display[2] = gram_display / 100 % 10 + 0x30;

test_display[3] = gram_display / 10 % 10 + 0x30;

test_display[4] = gram_display / 1 % 10 + 0x30;

dgus_show_text_value_set (VALUATION_GRAM_ADDR, test_display, 3);

}

}

еще

{

dgus_show_text_value_set (VALUATION_GRAM_ADDR, test_display, 3);

}

}

 

// Обновление общей цены

void page_valuation_price_refresh()

{

uint32_t цена_значение = 0;

uint8_t test_display[10] = {0x30, '.', 0x30, 0x30};

if(gram_value >= valuation_decorticate)

{

цена_значение = (значение_граммы - оценка_украшения) * цена_единицы_оценки * 2/1000;

если (цена_значение

{

test_display[0] = значение_цены / 100 % 10 + 0x30;

test_display[1] = '.';

test_display[2] = значение_цены / 10 % 10 + 0x30;

test_display[3] = значение_цены / 1 % 10 + 0x30;

dgus_show_text_value_set (VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

иначе, если (цена_значение

{

test_display[0] = значение_цены / 1000 % 10 + 0x30;

test_display[1] = значение_цены / 100 % 10 + 0x30;

test_display[2] = '.';

test_display[3] = значение_цены / 10 % 10 + 0x30;

test_display[4] = значение_цены / 1 % 10 + 0x30;

dgus_show_text_value_set (VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

иначе, если (цена_значение

{

test_display[0] = значение_цены / 10000 % 10 + 0x30;

test_display[1] = значение_цены / 1000 % 10 + 0x30;

test_display[2] = значение_цены / 100 % 10 + 0x30;

test_display[3] = '.';

test_display[4] = значение_цены / 10 % 10 + 0x30;

test_display[5] = значение_цены / 1 % 10 + 0x30;

dgus_show_text_value_set (VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

иначе, если (цена_значение

{

test_display[0] = значение_цены / 100000 % 10 + 0x30;

test_display[1] = значение_цены / 10000 % 10 + 0x30;

test_display[2] = значение_цены / 1000 % 10 + 0x30;

test_display[3] = значение_цены / 100 % 10 + 0x30;

test_display[4] = '.';

test_display[5] = значение_цены / 10 % 10 + 0x30;

test_display[6] = значение_цены / 1 % 10 + 0x30;

dgus_show_text_value_set (VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

}

еще

{

dgus_show_text_value_set (VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

}

}

void page_valuation_decorticate()

{

valuation_decorticate = gram_value;

page_valuation_weight_refresh();

}

недействительный page_valuation_1()

{

если (value_unit_price

{

цена_единицы_оценки = цена_единицы_оценки * 10 + 1;

page_valuation_unit_price_refresh();

}

}

недействительный page_valuation_2()

{

если (value_unit_price

{

цена_единицы_оценки = цена_единицы_оценки * 10 + 2;

page_valuation_unit_price_refresh();

}

}

недействительный page_valuation_3()

{

если (value_unit_price

{

цена_единицы_оценки = цена_единицы_оценки * 10 + 3;

page_valuation_unit_price_refresh();

}

}

недействительный page_valuation_4()

{

если (value_unit_price

{

цена_единицы_оценки = цена_единицы_оценки * 10 + 4;

page_valuation_unit_price_refresh();

}

}

недействительный page_valuation_5()

{

если (value_unit_price

{

цена_единицы_оценки = цена_единицы_оценки * 10 + 5;

page_valuation_unit_price_refresh();

}

}

недействительный page_valuation_6()

{

если (value_unit_price

{

цена_единицы_оценки = цена_единицы_оценки * 10 + 6;

page_valuation_unit_price_refresh();

}

}

недействительный page_valuation_7()

{

если (value_unit_price

{

цена_единицы_оценки = цена_единицы_оценки * 10 + 7;

page_valuation_unit_price_refresh();

}

}

недействительный page_valuation_8()

{

если (value_unit_price

{

цена_единицы_оценки = цена_единицы_оценки * 10 + 8;

page_valuation_unit_price_refresh();

}

}

недействительный page_valuation_9()

{

если (value_unit_price

{

цена_единицы_оценки = цена_единицы_оценки * 10 + 9;

page_valuation_unit_price_refresh();

}

}

недействительный page_valuation_0()

{

если (value_unit_price

{

цена_единицы_оценки = цена_единицы_оценки * 10 + 0;

page_valuation_unit_price_refresh();

}

}

void page_valuation_back()

{

valuation_unit_price = valuation_unit_price / 10;

page_valuation_unit_price_refresh();

}

void page_valuation_clear()

{

valuation_unit_price = 0;

page_valuation_unit_price_refresh();

}


Время публикации: 28 апреля 2024 г.