——Од форумот за програмери на DWIN
Во ова издание, го туркаме наградуваниот случај со отворен код на форумот за програмери на DWIN - Повеќефункционален вагач. Инженерот усвојува паметен екран COF од 4 инчи и преку интеракцијата на податоци помеѓу јадрото на T5L OS и HX711 модулот и комплетот сензор за притисок од 5 кг, корисниците можат лесно да ги реализираат функциите на приказот за броење како тежина, единечна цена, вкупна цена, тара итн. ., како и функциите на броење, следење на кривите на промена на тежината и корекција на точноста на вагачот итн., за да може лесно да се префрлате помеѓу различни сценарија на апликации за да уживате во практично и ефикасно искуство со мерење.
1. Развој на UI
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 вреднување_цена_единица = 0; //Единечната цена
// Освежување на единечна цена
void page_valuation_unit_price_refresh()
{
uint8_t test_display[10] = {0};
ако (цена_единица_вредност
{
тест_приказ[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);
}
друго ако (цена_единица_вредност
{
тест_приказ[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);
}
друго ако (цена_единица_вредност
{
тест_приказ[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);
}
друго ако (цена_единица_вредност
{
тест_приказ[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;
ако (грам_вредност >= вреднување_декортикат)
{
gram_display = gram_value - valuation_decorticate;
ако (грам_приказ
{
тест_приказ[0] = грам_приказ / 1 % 10 + 0x30;
dgus_show_text_value_set (VALUATION_GRAM_ADDR, test_display, 3);
}
друго ако (грам_приказ
{
тест_приказ[0] = грам_приказ / 10 % 10 + 0x30;
тест_приказ[1] = грам_приказ / 1 % 10 + 0x30;
dgus_show_text_value_set (VALUATION_GRAM_ADDR, test_display, 3);
}
друго ако (грам_приказ
{
тест_приказ[0] = грам_приказ / 100 % 10 + 0x30;
тест_приказ[1] = грам_приказ / 10 % 10 + 0x30;
тест_приказ[2] = грам_приказ / 1 % 10 + 0x30;
dgus_show_text_value_set (VALUATION_GRAM_ADDR, test_display, 3);
}
друго ако (грам_приказ
{
тест_приказ[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);
}
друго ако (грам_приказ
{
тест_приказ[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};
ако (грам_вредност >= вреднување_декортикат)
{
цена_вредност = (грам_вредност - valuation_decorticate) * вреднување_единична_цена * 2 / 1000;
ако (цена_вредност
{
тест_приказ[0] = цена_вредност / 100 % 10 + 0x30;
test_display[1] = '.';
тест_приказ[2] = цена_вредност / 10 % 10 + 0x30;
тест_приказ[3] = цена_вредност / 1 % 10 + 0x30;
dgus_show_text_value_set (VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
друго ако (цена_вредност
{
тест_приказ[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_TOTAL_PRICES_ADDR, test_display, 4);
}
друго ако (цена_вредност
{
тест_приказ[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_TOTAL_PRICES_ADDR, test_display, 4);
}
друго ако (цена_вредност
{
тест_приказ[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_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();
}
void page_valuation_1()
{
ако (цена_единица_вредност
{
вреднување_цена_единица = вреднување_цена_единица * 10 + 1;
page_valuation_unit_price_refresh();
}
}
void page_valuation_2()
{
ако (цена_единица_вредност
{
вреднување_цена_единица = вреднување_цена_единица * 10 + 2;
page_valuation_unit_price_refresh();
}
}
неважечка страница_вреднување_3()
{
ако (цена_единица_вредност
{
вреднување_цена_единица = вреднување_цена_единица * 10 + 3;
page_valuation_unit_price_refresh();
}
}
неважечка страница_вреднување_4()
{
ако (цена_единица_вредност
{
вреднување_цена_единица = вреднување_цена_единица * 10 + 4;
page_valuation_unit_price_refresh();
}
}
void page_valuation_5()
{
ако (цена_единица_вредност
{
вреднување_цена_единица = вреднување_цена_единица * 10 + 5;
page_valuation_unit_price_refresh();
}
}
void page_valuation_6()
{
ако (цена_единица_вредност
{
вреднување_цена_единица = вреднување_цена_единица * 10 + 6;
page_valuation_unit_price_refresh();
}
}
void page_valuation_7()
{
ако (цена_единица_вредност
{
вреднување_цена_единица = вреднување_цена_единица * 10 + 7;
page_valuation_unit_price_refresh();
}
}
неважечка страница_вреднување_8()
{
ако (цена_единица_вредност
{
вреднување_цена_единица = вреднување_цена_единица * 10 + 8;
page_valuation_unit_price_refresh();
}
}
неважечка страница_вреднување_9()
{
ако (цена_единица_вредност
{
вреднување_цена_единица = вреднување_цена_единица * 10 + 9;
page_valuation_unit_price_refresh();
}
}
void page_valuation_0()
{
ако (цена_единица_вредност
{
вреднување_цена_единица = вреднување_цена_единица * 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