——От форума за разработчици на DWIN
В този брой представяме наградения случай с отворен код на форума за разработчици на DWIN - многофункционална теглилка. Инженерът използва 4-инчов COF интелигентен екран и чрез взаимодействието на данните между ядрото на T5L OS и модула HX711 и комплекта сензори за налягане от 5 кг, потребителите могат лесно да реализират функциите на дисплея за броене, като тегло, единична цена, обща цена, тара и т.н. ., както и функциите за броене, проследяване на кривите на промяна на теглото и коригиране на точността на везните и т.н., така че да е лесно да превключвате между различни сценарии на приложение, за да се насладите на удобно и ефективно изживяване при претегляне.
1. Разработка на потребителски интерфейс
![f26af533d43728cd210e0f7af5e7acc](https://ecdn6.globalso.com/upload/p/1355/source/2024-06/665f077223d2b27894.png)
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};
if(valuation_unit_price
{
тест_дисплей [0] = оценка_единична_цена / 100 % 10 + 0x30;
test_display[1] = '.';
тест_дисплей [2] = оценка_единична_цена / 10 % 10 + 0x30;
тест_дисплей [3] = оценка_единична_цена / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);
}
else if(valuation_unit_price
{
тест_дисплей[0] = оценка_единична_цена / 1000 % 10 + 0x30;
тест_дисплей [1] = оценка_единична_цена / 100 % 10 + 0x30;
test_display[2] = '.';
тест_дисплей[3] = оценка_единична_цена / 10 % 10 + 0x30;
тест_дисплей [4] = оценка_единична_цена / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);
}
else if(valuation_unit_price
{
тест_дисплей[0] = оценка_единична_цена / 10000 % 10 + 0x30;
тест_дисплей [1] = оценка_единична_цена / 1000 % 10 + 0x30;
тест_дисплей [2] = оценка_единична_цена / 100 % 10 + 0x30;
test_display[3] = '.';
тест_дисплей [4] = оценка_единична_цена / 10 % 10 + 0x30;
тест_дисплей [5] = оценка_единична_цена / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);
}
else if(valuation_unit_price
{
test_display[0] = цена_за_единична_оценка / 100000 % 10 + 0x30;
тест_дисплей [1] = оценка_единична_цена / 10000 % 10 + 0x30;
тест_дисплей [2] = оценка_единична_цена / 1000 % 10 + 0x30;
тест_дисплей[3] = оценка_единична_цена / 100 % 10 + 0x30;
test_display[4] = '.';
тест_дисплей [5] = оценка_единична_цена / 10 % 10 + 0x30;
тест_дисплей [6] = оценка_единична_цена / 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 >= value_decorticate)
{
грам_дисплей = грам_стойност - оценка_декортикация;
if(gram_display
{
тест_дисплей[0] = грам_дисплей / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);
}
иначе ако (gram_display
{
тест_дисплей[0] = грам_дисплей / 10 % 10 + 0x30;
тест_дисплей [1] = грам_дисплей / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);
}
иначе ако (gram_display
{
тест_дисплей[0] = грам_дисплей / 100 % 10 + 0x30;
тест_дисплей [1] = грам_дисплей / 10 % 10 + 0x30;
тест_дисплей [2] = грам_дисплей / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);
}
иначе ако (gram_display
{
тест_дисплей[0] = грам_дисплей / 1000 % 10 + 0x30;
тест_дисплей [1] = грам_дисплей / 100 % 10 + 0x30;
тест_дисплей [2] = грам_дисплей / 10 % 10 + 0x30;
тест_дисплей[3] = грам_дисплей / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);
}
иначе ако (gram_display
{
тест_дисплей[0] = грам_дисплей / 10000 % 10 + 0x30;
тест_дисплей [1] = грам_дисплей / 1000 % 10 + 0x30;
тест_дисплей [2] = грам_дисплей / 100 % 10 + 0x30;
тест_дисплей [3] = грам_дисплей / 10 % 10 + 0x30;
тест_дисплей [4] = грам_дисплей / 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 >= value_decorticate)
{
цена_стойност = (грам_стойност - оценка_декортикат) * оценка_единична_цена * 2 / 1000;
if(price_value
{
test_display[0] = price_value / 100 % 10 + 0x30;
test_display[1] = '.';
test_display[2] = price_value / 10 % 10 + 0x30;
test_display[3] = price_value / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
иначе ако (price_value
{
test_display[0] = price_value / 1000 % 10 + 0x30;
test_display[1] = price_value / 100 % 10 + 0x30;
test_display[2] = '.';
test_display[3] = price_value / 10 % 10 + 0x30;
test_display[4] = price_value / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
иначе ако (price_value
{
test_display[0] = price_value / 10000 % 10 + 0x30;
test_display[1] = price_value / 1000 % 10 + 0x30;
test_display[2] = price_value / 100 % 10 + 0x30;
test_display[3] = '.';
test_display[4] = price_value / 10 % 10 + 0x30;
test_display[5] = price_value / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
иначе ако (price_value
{
test_display[0] = price_value / 100000 % 10 + 0x30;
test_display[1] = price_value / 10000 % 10 + 0x30;
test_display[2] = price_value / 1000 % 10 + 0x30;
test_display[3] = price_value / 100 % 10 + 0x30;
test_display[4] = '.';
test_display[5] = price_value / 10 % 10 + 0x30;
test_display[6] = price_value / 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 = грам_стойност;
page_valuation_weight_refresh();
}
невалидна страница_оценка_1()
{
if(valuation_unit_price
{
оценъчна_единична_цена = оценъчна_единична_цена * 10 + 1;
page_valuation_unit_price_refresh();
}
}
невалидна страница_оценка_2()
{
if(valuation_unit_price
{
оценъчна_единична_цена = оценъчна_единична_цена * 10 + 2;
page_valuation_unit_price_refresh();
}
}
невалидна страница_оценка_3()
{
if(valuation_unit_price
{
оценъчна_единична_цена = оценъчна_единична_цена * 10 + 3;
page_valuation_unit_price_refresh();
}
}
void page_valuation_4()
{
if(valuation_unit_price
{
оценъчна_единична_цена = оценъчна_единична_цена * 10 + 4;
page_valuation_unit_price_refresh();
}
}
void page_valuation_5()
{
if(valuation_unit_price
{
оценъчна_единична_цена = оценъчна_единична_цена * 10 + 5;
page_valuation_unit_price_refresh();
}
}
void page_valuation_6()
{
if(valuation_unit_price
{
оценъчна_единична_цена = оценъчна_единична_цена * 10 + 6;
page_valuation_unit_price_refresh();
}
}
void page_valuation_7()
{
if(valuation_unit_price
{
оценъчна_единична_цена = оценъчна_единична_цена * 10 + 7;
page_valuation_unit_price_refresh();
}
}
невалидна страница_оценка_8()
{
if(valuation_unit_price
{
оценъчна_единична_цена = оценъчна_единична_цена * 10 + 8;
page_valuation_unit_price_refresh();
}
}
невалидна страница_оценка_9()
{
if(valuation_unit_price
{
оценъчна_единична_цена = оценъчна_единична_цена * 10 + 9;
page_valuation_unit_price_refresh();
}
}
невалидна страница_оценка_0()
{
if(valuation_unit_price
{
оценъчна_единична_цена = оценъчна_единична_цена * 10 + 0;
page_valuation_unit_price_refresh();
}
}
void page_valuation_back()
{
единична_цена_оценка = единична_цена_оценка / 10;
page_valuation_unit_price_refresh();
}
void page_valuation_clear()
{
оценка_единична_цена = 0;
page_valuation_unit_price_refresh();
}
Време на публикуване: 28 април 2024 г