——Iz foruma razvijalcev DWIN
V tej številki predstavljamo nagrajeni odprtokodni primer foruma za razvijalce DWIN - večfunkcijska tehtnica. Inženir sprejme 4-palčni pametni zaslon COF in prek podatkovne interakcije med jedrom T5L OS in modulom HX711 ter naborom senzorjev tlaka 5 kg lahko uporabniki preprosto uresničijo funkcije prikaza štetja, kot so teža, cena na enoto, skupna cena, tara itd. ., kot tudi funkcije štetja, sledenje krivuljam spreminjanja teže in popravljanje natančnosti tehtnice itd., tako da je preprosto preklapljanje med različnimi scenariji uporabe in uživanje v priročni in učinkoviti izkušnji tehtanja.
1. Razvoj uporabniškega vmesnika
![f26af533d43728cd210e0f7af5e7acc](https://ecdn6.globalso.com/upload/p/1355/source/2024-06/665f077223d2b27894.png)
2.C51 Oblikovanje
Del referenčne kode za tehtnico za izvajanje funkcije določanja cen je naslednji:
// Stran s cenami====================
#define VALUATION_UNIT_PRICE_ADDR 0x1010
#define VALUATION_GRAM_ADDR 0x1000
#define VALUATION_TOTAL_PRICES_ADDR 0x1020
uint32_t valuation_decorticate = 0; // Cena Tara teža
uint32_t cena_enote_vrednotenja = 0; //Cena na enoto
// Osvežitev cene na enoto
void page_valuation_unit_price_refresh()
{
uint8_t test_display[10] = {0};
if(valuation_unit_price
{
testni_prikaz[0] = cena_enote_vrednotenja / 100 % 10 + 0x30;
test_display[1] = '.';
testni_prikaz[2] = cena_enote_vrednotenja / 10 % 10 + 0x30;
testni_prikaz[3] = cena_enote_vrednotenja / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);
}
else if(valuation_unit_price
{
testni_prikaz[0] = cena_enote_vrednotenja / 1000 % 10 + 0x30;
testni_prikaz[1] = cena_enote_vrednotenja / 100 % 10 + 0x30;
test_display[2] = '.';
testni_prikaz[3] = cena_enote_vrednotenja / 10 % 10 + 0x30;
testni_prikaz[4] = cena_enote_vrednotenja / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);
}
else if(valuation_unit_price
{
testni_prikaz[0] = cena_enote_vrednotenja / 10000 % 10 + 0x30;
testni_prikaz[1] = cena_enote_vrednotenja / 1000 % 10 + 0x30;
testni_prikaz[2] = cena_enote_vrednotenja / 100 % 10 + 0x30;
test_display[3] = '.';
testni_prikaz[4] = cena_enote_vrednotenja / 10 % 10 + 0x30;
testni_prikaz[5] = cena_enote_vrednotenja / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);
}
else if(valuation_unit_price
{
testni_prikaz[0] = cena_enote_vrednotenja / 100000 % 10 + 0x30;
testni_prikaz[1] = cena_enote_vrednotenja / 10000 % 10 + 0x30;
testni_prikaz[2] = cena_enote_vrednotenja / 1000 % 10 + 0x30;
testni_prikaz[3] = cena_enote_vrednotenja / 100 % 10 + 0x30;
test_display[4] = '.';
testni_prikaz[5] = cena_enote_vrednotenja / 10 % 10 + 0x30;
testni_prikaz[6] = cena_enote_vrednotenja / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);
}
}
// Osveži težo
void page_valuation_weight_refresh()
{
uint8_t test_display[10] = {0x30};
uint32_t gram_display = 0;
if(gram_value >= value_decorticate)
{
gram_prikaz = gram_vrednost - vrednotenje_decorticate;
if(gram_display
{
testni_prikaz[0] = gramski_prikaz / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);
}
sicer če (gram_display
{
testni_prikaz [0] = gramski_prikaz / 10 % 10 + 0x30;
testni_prikaz [1] = gramski_prikaz / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);
}
sicer če (gram_display
{
testni_prikaz[0] = gramski_prikaz / 100 % 10 + 0x30;
testni_prikaz[1] = gram_prikaz / 10 % 10 + 0x30;
testni_prikaz[2] = gram_prikaz / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);
}
sicer če (gram_display
{
testni_zaslon[0] = gram_zaslon / 1000 % 10 + 0x30;
testni_zaslon[1] = gram_zaslon / 100 % 10 + 0x30;
testni_prikaz[2] = gram_prikaz / 10 % 10 + 0x30;
testni_zaslon[3] = gram_zaslon / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);
}
sicer če (gram_display
{
testni_zaslon[0] = gram_zaslon / 10000 % 10 + 0x30;
testni_zaslon[1] = gram_zaslon / 1000 % 10 + 0x30;
testni_zaslon [2] = gram_zaslon / 100 % 10 + 0x30;
testni_zaslon [3] = gram_zaslon / 10 % 10 + 0x30;
testni_zaslon [4] = gram_zaslon / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);
}
}
drugače
{
dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);
}
}
// Osvežitev skupne cene
void page_valuation_price_refresh()
{
uint32_t cena_vrednost = 0;
uint8_t test_display[10] = {0x30, '.', 0x30, 0x30};
if(gram_value >= value_decorticate)
{
cena_vrednost = (gramska_vrednost - vrednotenje_decorticate) * vrednotenje_cena_enote * 2 / 1000;
če(price_value
{
testni_prikaz [0] = cena_vrednost / 100 % 10 + 0x30;
test_display[1] = '.';
testni_prikaz [2] = cena_vrednost / 10 % 10 + 0x30;
testni_prikaz [3] = cena_vrednost / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
else if(price_value
{
testni_prikaz[0] = cena_vrednost / 1000 % 10 + 0x30;
testni_prikaz [1] = cena_vrednost / 100 % 10 + 0x30;
test_display[2] = '.';
testni_prikaz [3] = cena_vrednost / 10 % 10 + 0x30;
testni_prikaz [4] = cena_vrednost / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
else if(price_value
{
testni_prikaz[0] = cena_vrednost / 10000 % 10 + 0x30;
testni_prikaz[1] = cena_vrednost / 1000 % 10 + 0x30;
testni_prikaz [2] = cena_vrednost / 100 % 10 + 0x30;
test_display[3] = '.';
testni_prikaz [4] = cena_vrednost / 10 % 10 + 0x30;
testni_prikaz [5] = cena_vrednost / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
else if(price_value
{
testni_prikaz[0] = cena_vrednost / 100000 % 10 + 0x30;
testni_prikaz[1] = cena_vrednost / 10000 % 10 + 0x30;
testni_prikaz[2] = cena_vrednost / 1000 % 10 + 0x30;
testni_prikaz [3] = cena_vrednost / 100 % 10 + 0x30;
test_display[4] = '.';
testni_prikaz [5] = cena_vrednost / 10 % 10 + 0x30;
testni_prikaz [6] = cena_vrednost / 1 % 10 + 0x30;
dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
}
drugače
{
dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
}
void page_valuation_decorticate()
{
valuation_decorticate = gram_vrednost;
page_valuation_weight_refresh();
}
void page_valuation_1()
{
if(valuation_unit_price
{
cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 1;
page_valuation_unit_price_price_refresh();
}
}
void page_valuation_2()
{
if(valuation_unit_price
{
cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 2;
page_valuation_unit_price_price_refresh();
}
}
void page_valuation_3()
{
if(valuation_unit_price
{
cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 3;
page_valuation_unit_price_price_refresh();
}
}
void page_valuation_4()
{
if(valuation_unit_price
{
cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 4;
page_valuation_unit_price_price_refresh();
}
}
void page_valuation_5()
{
if(valuation_unit_price
{
cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 5;
page_valuation_unit_price_price_refresh();
}
}
void page_valuation_6()
{
if(valuation_unit_price
{
cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 6;
page_valuation_unit_price_price_refresh();
}
}
void page_valuation_7()
{
if(valuation_unit_price
{
cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 7;
page_valuation_unit_price_price_refresh();
}
}
void page_valuation_8()
{
if(valuation_unit_price
{
cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 8;
page_valuation_unit_price_price_refresh();
}
}
void page_valuation_9()
{
if(valuation_unit_price
{
cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 9;
page_valuation_unit_price_price_refresh();
}
}
void page_valuation_0()
{
if(valuation_unit_price
{
cena_enote_vrednotenja = cena_enote_vrednotenja * 10 + 0;
page_valuation_unit_price_price_refresh();
}
}
void page_valuation_back()
{
cena_enote_vrednotenja = cena_enote_vrednotenja / 10;
page_valuation_unit_price_price_refresh();
}
void page_valuation_clear()
{
cena_enote_vrednotenja = 0;
page_valuation_unit_price_price_refresh();
}
Čas objave: 28. aprila 2024