—— Z forum programistów DWIN
W tym numerze przedstawiamy wielokrotnie nagradzany przypadek open source z forum programistów DWIN - waga wielofunkcyjna. Inżynier wykorzystuje 4-calowy inteligentny ekran COF, a dzięki interakcji danych między rdzeniem T5L OS a modułem HX711 i zestawem czujników ciśnienia o masie 5 kg użytkownicy mogą z łatwością korzystać z funkcji wyświetlania zliczania, takich jak waga, cena jednostkowa, cena całkowita, tara itp. ., a także funkcje liczenia, śledzenia krzywych zmian masy, korygowania dokładności wagi itp., dzięki czemu można łatwo przełączać się między różnymi scenariuszami zastosowań, aby cieszyć się wygodnym i wydajnym ważeniem.
1. Rozwój interfejsu użytkownika
![f26af533d43728cd210e0f7af5e7acc](https://ecdn6.globalso.com/upload/p/1355/source/2024-06/665f077223d2b27894.png)
2.C51 Projekt
Część kodu referencyjnego wagi do realizacji funkcji wyceny jest następująca:
// Strona cenowa===================
#zdefiniuj VALUATION_UNIT_PRICE_ADDR 0x1010
#zdefiniuj VALUATION_GRAM_ADDR 0x1000
#zdefiniuj VALUATION_TOTAL_PRICES_ADDR 0x1020
uint32_t wycena_dekorticate = 0; // Wycena wagi tary
uint32_t wycena_jednostkowa_cena = 0; //Cena jednostkowa
// Odświeżenie ceny jednostkowej
void page_valuation_unit_price_refresh()
{
uint8_t test_display[10] = {0};
if(cena_jednostki_wyceny
{
test_display[0] = wycena_jednostkowa_cena / 100% 10 + 0x30;
test_display[1] = '.';
test_display[2] = wycena_jednostkowa_cena / 10 % 10 + 0x30;
test_display[3] = cena_jednostki_wyceny / 1% 10 + 0x30;
dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);
}
else if(cena_jednostki_wyceny
{
test_display[0] = wycena_jednostkowa_cena / 1000 % 10 + 0x30;
test_display[1] = wycena_jednostkowa_cena / 100% 10 + 0x30;
test_display[2] = '.';
test_display[3] = wycena_jednostkowa_cena / 10% 10 + 0x30;
test_display[4] = cena_jednostki_wyceny / 1% 10 + 0x30;
dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);
}
else if(cena_jednostki_wyceny
{
test_display[0] = wycena_jednostkowa_cena / 10000 % 10 + 0x30;
test_display[1] = wycena_jednostkowa_cena / 1000 % 10 + 0x30;
test_display[2] = wycena_jednostkowa_cena / 100 % 10 + 0x30;
test_display[3] = '.';
test_display[4] = cena_jednostki_wyceny / 10% 10 + 0x30;
test_display[5] = cena_jednostki_wyceny / 1% 10 + 0x30;
dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);
}
else if(cena_jednostki_wyceny
{
test_display[0] = wycena_jednostkowa_cena / 100000 % 10 + 0x30;
test_display[1] = wycena_jednostkowa_cena / 10000 % 10 + 0x30;
test_display[2] = wycena_jednostkowa_cena / 1000 % 10 + 0x30;
test_display[3] = wycena_jednostkowa_cena / 100 % 10 + 0x30;
test_display[4] = '.';
test_display[5] = wycena_jednostkowa_cena / 10 % 10 + 0x30;
test_display[6] = cena_jednostki_wyceny / 1% 10 + 0x30;
dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);
}
}
// Odświeżanie wagi
void page_valuation_weight_refresh()
{
uint8_t test_display[10] = {0x30};
uint32_t gram_display = 0;
if(gram_value >= wycena_dekorticate)
{
gram_display = gram_wartość - wycena_dekorticate;
if(gram_display
{
test_display[0] = gram_display / 1% 10 + 0x30;
dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);
}
else if(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);
}
else if(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);
}
w przeciwnym razie (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);
}
else if(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);
}
}
w przeciwnym razie
{
dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);
}
}
// Odświeżenie ceny całkowitej
void page_valuation_price_refresh()
{
uint32_t wartość_ceny = 0;
uint8_t test_display[10] = {0x30, '.', 0x30, 0x30};
if(gram_value >= wycena_dekorticate)
{
wartość_ceny = (wartość_gramu - dekoracja_wyceny) * cena_jednostki_wyceny * 2 / 1000;
if(wartość_ceny
{
test_display[0] = wartość_ceny / 100% 10 + 0x30;
test_display[1] = '.';
test_display[2] = wartość_ceny / 10% 10 + 0x30;
test_display[3] = wartość_ceny / 1% 10 + 0x30;
dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
else if(wartość_ceny
{
test_display[0] = wartość_ceny / 1000% 10 + 0x30;
test_display[1] = wartość_ceny / 100% 10 + 0x30;
test_display[2] = '.';
test_display[3] = wartość_ceny / 10% 10 + 0x30;
test_display[4] = wartość_ceny / 1% 10 + 0x30;
dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
else if(wartość_ceny
{
test_display[0] = wartość_ceny / 10000% 10 + 0x30;
test_display[1] = wartość_ceny / 1000% 10 + 0x30;
test_display[2] = wartość_ceny / 100% 10 + 0x30;
test_display[3] = '.';
test_display[4] = wartość_ceny / 10% 10 + 0x30;
test_display[5] = wartość_ceny / 1% 10 + 0x30;
dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
else if(wartość_ceny
{
test_display[0] = wartość_ceny / 100000 % 10 + 0x30;
test_display[1] = wartość_ceny / 10000% 10 + 0x30;
test_display[2] = wartość_ceny / 1000% 10 + 0x30;
test_display[3] = wartość_ceny / 100% 10 + 0x30;
test_display[4] = '.';
test_display[5] = wartość_ceny / 10% 10 + 0x30;
test_display[6] = wartość_ceny / 1% 10 + 0x30;
dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
}
w przeciwnym razie
{
dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);
}
}
void page_valuation_decorticate()
{
wycena_dekorticate = gram_wartość;
page_valuation_weight_refresh();
}
unieważnij page_valuation_1()
{
if(cena_jednostki_wyceny
{
cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 1;
page_valuation_unit_price_refresh();
}
}
unieważnij page_valuation_2()
{
if(cena_jednostki_wyceny
{
cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 2;
page_valuation_unit_price_refresh();
}
}
unieważnij page_valuation_3()
{
if(cena_jednostki_wyceny
{
cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 3;
page_valuation_unit_price_refresh();
}
}
unieważnij page_valuation_4()
{
if(cena_jednostki_wyceny
{
cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 4;
page_valuation_unit_price_refresh();
}
}
unieważnij page_valuation_5()
{
if(cena_jednostki_wyceny
{
cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 5;
page_valuation_unit_price_refresh();
}
}
unieważnij page_valuation_6()
{
if(cena_jednostki_wyceny
{
cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 6;
page_valuation_unit_price_refresh();
}
}
unieważnij page_valuation_7()
{
if(cena_jednostki_wyceny
{
cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 7;
page_valuation_unit_price_refresh();
}
}
unieważnij page_valuation_8()
{
if(cena_jednostki_wyceny
{
cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 8;
page_valuation_unit_price_refresh();
}
}
unieważnij page_valuation_9()
{
if(cena_jednostki_wyceny
{
cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 9;
page_valuation_unit_price_refresh();
}
}
unieważnij page_valuation_0()
{
if(cena_jednostki_wyceny
{
cena_jednostkowa_wyceny = cena_jednostkowa_wyceny * 10 + 0;
page_valuation_unit_price_refresh();
}
}
unieważnij page_valuation_back()
{
cena_jednostkowa_wyceny = cena_jednostkowa_wyceny / 10;
page_valuation_unit_price_refresh();
}
unieważnij page_valuation_clear()
{
cena_jednostkowa_wyceny = 0;
page_valuation_unit_price_refresh();
}
Czas publikacji: 28 kwietnia 2024 r