[Отворен извор] Мултифункционален уред за мерење

——Од форумот за програмери на DWIN

Во ова издание, го туркаме наградуваниот случај со отворен код на форумот за програмери на DWIN - Повеќефункционален вагач. Инженерот усвојува паметен екран COF од 4 инчи и преку интеракцијата на податоци помеѓу јадрото на T5L OS и HX711 модулот и комплетот сензор за притисок од 5 кг, корисниците можат лесно да ги реализираат функциите на приказот за броење како тежина, единечна цена, вкупна цена, тара итн. ., како и функциите на броење, следење на кривите на промена на тежината и корекција на точноста на вагачот итн., за да може лесно да се префрлате помеѓу различни сценарија на апликации за да уживате во практично и ефикасно искуство со мерење.

1. Развој на UI

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 вреднување_цена_единица = 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