——Са ДВИН форума за програмере
У овом издању представљамо награђивани случај отвореног кода ДВИН Девелопер Форум - Мулти-фунцтион Веигхер. Инжењер је усвојио ЦОФ паметни екран од 4 инча, а кроз интеракцију података између Т5Л ОС језгра и ХКС711 модула и сета сензора притиска од 5 кг, корисници могу лако да реализују функције приказа бројања као што су тежина, јединична цена, укупна цена, тара итд. ., као и функције бројања, праћења кривуља промене тежине и корекције тачности вага, итд., тако да је лако прелазити између различитих сценарија примене да бисте уживали у погодном и ефикасном искуству вагања.
1. Развој корисничког интерфејса
![ф26аф533д43728цд210е0ф7аф5е7ацц](https://ecdn6.globalso.com/upload/p/1355/source/2024-06/665f077223d2b27894.png)
2.Ц51 Дизајн
Део референтног кода за вагу за имплементацију функције одређивања цена је следећи:
// Страница са ценама====================
#дефине ВАЛУАТИОН_УНИТ_ПРИЦЕ_АДДР 0к1010
#дефине ВАЛУАТИОН_ГРАМ_АДДР 0к1000
#дефине ВАЛУАТИОН_ТОТАЛ_ПРИЦЕС_АДДР 0к1020
уинт32_т валуатион_децортицате = 0; // Прицинг Таре Веигхт
уинт32_т валуатион_унит_прице = 0; //Цена по јединици
// Освежавање цене јединице
воид паге_валуатион_унит_прице_рефресх()
{
уинт8_т тест_дисплаи[10] = {0};
иф(цена_јединице_вредновања
{
тест_дисплаи[0] = валуатион_унит_прице / 100 % 10 + 0к30;
тест_дисплаи[1] = '.';
тест_дисплаи[2] = валуатион_унит_прице / 10 % 10 + 0к30;
тест_дисплаи[3] = валуатион_унит_прице / 1 % 10 + 0к30;
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_УНИТ_ПРИЦЕ_АДДР, тест_дисплаи, 4);
}
елсе иф(цена_јединице_вредновања
{
тест_дисплаи[0] = валуатион_унит_прице / 1000 % 10 + 0к30;
тест_дисплаи[1] = валуатион_унит_прице / 100 % 10 + 0к30;
тест_дисплаи[2] = '.';
тест_дисплаи[3] = валуатион_унит_прице / 10 % 10 + 0к30;
тест_дисплаи[4] = валуатион_унит_прице / 1 % 10 + 0к30;
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_УНИТ_ПРИЦЕ_АДДР, тест_дисплаи, 4);
}
елсе иф(цена_јединице_вредновања
{
тест_дисплаи[0] = валуатион_унит_прице / 10000 % 10 + 0к30;
тест_дисплаи[1] = валуатион_унит_прице / 1000 % 10 + 0к30;
тест_дисплаи[2] = валуатион_унит_прице / 100 % 10 + 0к30;
тест_дисплаи[3] = '.';
тест_дисплаи[4] = валуатион_унит_прице / 10 % 10 + 0к30;
тест_дисплаи[5] = валуатион_унит_прице / 1 % 10 + 0к30;
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_УНИТ_ПРИЦЕ_АДДР, тест_дисплаи, 4);
}
елсе иф(цена_јединице вредности
{
тест_дисплаи[0] = валуатион_унит_прице / 100000 % 10 + 0к30;
тест_дисплаи[1] = валуатион_унит_прице / 10000 % 10 + 0к30;
тест_дисплаи[2] = валуатион_унит_прице / 1000 % 10 + 0к30;
тест_дисплаи[3] = валуатион_унит_прице / 100 % 10 + 0к30;
тест_дисплаи[4] = '.';
тест_дисплаи[5] = валуатион_унит_прице / 10 % 10 + 0к30;
тест_дисплаи[6] = валуатион_унит_прице / 1 % 10 + 0к30;
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_УНИТ_ПРИЦЕ_АДДР, тест_дисплаи, 4);
}
}
// Освежавање тежине
воид паге_валуатион_веигхт_рефресх()
{
уинт8_т тест_дисплаи[10] = {0к30};
уинт32_т грам_дисплаи = 0;
иф(грам_валуе >= валуатион_децортицате)
{
грам_дисплаи = грам_валуе - валуатион_децортицате;
иф(грам_дисплаи
{
тест_дисплаи[0] = грам_дисплаи / 1 % 10 + 0к30;
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_ГРАМ_АДДР, тест_дисплаи, 3);
}
елсе иф(грам_дисплаи
{
тест_дисплаи[0] = грам_дисплаи / 10 % 10 + 0к30;
тест_дисплаи[1] = грам_дисплаи / 1 % 10 + 0к30;
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_ГРАМ_АДДР, тест_дисплаи, 3);
}
елсе иф(грам_дисплаи
{
тест_дисплаи[0] = грам_дисплаи / 100 % 10 + 0к30;
тест_дисплаи[1] = грам_дисплаи / 10 % 10 + 0к30;
тест_дисплаи[2] = грам_дисплаи / 1 % 10 + 0к30;
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_ГРАМ_АДДР, тест_дисплаи, 3);
}
елсе иф(грам_дисплаи
{
тест_дисплаи[0] = грам_дисплаи / 1000 % 10 + 0к30;
тест_дисплаи[1] = грам_дисплаи / 100 % 10 + 0к30;
тест_дисплаи[2] = грам_дисплаи / 10 % 10 + 0к30;
тест_дисплаи[3] = грам_дисплаи / 1 % 10 + 0к30;
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_ГРАМ_АДДР, тест_дисплаи, 3);
}
елсе иф(грам_дисплаи
{
тест_дисплаи[0] = грам_дисплаи / 10000 % 10 + 0к30;
тест_дисплаи[1] = грам_дисплаи / 1000 % 10 + 0к30;
тест_дисплаи[2] = грам_дисплаи / 100 % 10 + 0к30;
тест_дисплаи[3] = грам_дисплаи / 10 % 10 + 0к30;
тест_дисплаи[4] = грам_дисплаи / 1 % 10 + 0к30;
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_ГРАМ_АДДР, тест_дисплаи, 3);
}
}
друго
{
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_ГРАМ_АДДР, тест_дисплаи, 3);
}
}
// Освежавање укупне цене
воид паге_валуатион_прице_рефресх()
{
уинт32_т прице_валуе = 0;
уинт8_т тест_дисплаи[10] = {0к30, '.', 0к30, 0к30};
иф(грам_валуе >= валуатион_децортицате)
{
цена_валуе = (грам_валуе - валуатион_децортицате) * валуатион_унит_прице * 2 / 1000;
иф(цена_валуе
{
тест_дисплаи[0] = цена_вредност / 100 % 10 + 0к30;
тест_дисплаи[1] = '.';
тест_дисплаи[2] = цена_вредност / 10 % 10 + 0к30;
тест_дисплаи[3] = цена_вредност / 1 % 10 + 0к30;
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_ТОТАЛ_ПРИЦЕС_АДДР, тест_дисплаи, 4);
}
елсе иф(прице_валуе
{
тест_дисплаи[0] = цена_вредност / 1000 % 10 + 0к30;
тест_дисплаи[1] = цена_вредност / 100 % 10 + 0к30;
тест_дисплаи[2] = '.';
тест_дисплаи[3] = цена_вредност / 10 % 10 + 0к30;
тест_дисплаи[4] = цена_вредност / 1 % 10 + 0к30;
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_ТОТАЛ_ПРИЦЕС_АДДР, тест_дисплаи, 4);
}
елсе иф(прице_валуе
{
тест_дисплаи[0] = цена_вредност / 10000 % 10 + 0к30;
тест_дисплаи[1] = цена_вредност / 1000 % 10 + 0к30;
тест_дисплаи[2] = цена_вредност / 100 % 10 + 0к30;
тест_дисплаи[3] = '.';
тест_дисплаи[4] = цена_вредност / 10 % 10 + 0к30;
тест_дисплаи[5] = цена_вредност / 1 % 10 + 0к30;
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_ТОТАЛ_ПРИЦЕС_АДДР, тест_дисплаи, 4);
}
елсе иф(прице_валуе
{
тест_дисплаи[0] = цена_вредност / 100000 % 10 + 0к30;
тест_дисплаи[1] = цена_вредност / 10000 % 10 + 0к30;
тест_дисплаи[2] = цена_вредност / 1000 % 10 + 0к30;
тест_дисплаи[3] = цена_вредност / 100 % 10 + 0к30;
тест_дисплаи[4] = '.';
тест_дисплаи[5] = цена_вредност / 10 % 10 + 0к30;
тест_дисплаи[6] = цена_вредност / 1 % 10 + 0к30;
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_ТОТАЛ_ПРИЦЕС_АДДР, тест_дисплаи, 4);
}
}
друго
{
дгус_схов_тект_валуе_сет(ВАЛУАТИОН_ТОТАЛ_ПРИЦЕС_АДДР, тест_дисплаи, 4);
}
}
воид паге_валуатион_децортицате()
{
валуатион_децортицате = грам_валуе;
паге_валуатион_веигхт_рефресх();
}
воид паге_валуатион_1()
{
иф(цена_јединице_вредновања
{
валуатион_унит_прице = валуатион_унит_прице * 10 + 1;
паге_валуатион_унит_прице_рефресх();
}
}
воид паге_валуатион_2()
{
иф(цена_јединице_вредновања
{
валуатион_унит_прице = валуатион_унит_прице * 10 + 2;
паге_валуатион_унит_прице_рефресх();
}
}
воид паге_валуатион_3()
{
иф(цена_јединице_вредновања
{
валуатион_унит_прице = валуатион_унит_прице * 10 + 3;
паге_валуатион_унит_прице_рефресх();
}
}
воид паге_валуатион_4()
{
иф(цена_јединице_вредновања
{
валуатион_унит_прице = валуатион_унит_прице * 10 + 4;
паге_валуатион_унит_прице_рефресх();
}
}
воид паге_валуатион_5()
{
иф(цена_јединице_вредновања
{
валуатион_унит_прице = валуатион_унит_прице * 10 + 5;
паге_валуатион_унит_прице_рефресх();
}
}
воид паге_валуатион_6()
{
иф(цена_јединице_вредновања
{
валуатион_унит_прице = валуатион_унит_прице * 10 + 6;
паге_валуатион_унит_прице_рефресх();
}
}
воид паге_валуатион_7()
{
иф(цена_јединице_вредновања
{
валуатион_унит_прице = валуатион_унит_прице * 10 + 7;
паге_валуатион_унит_прице_рефресх();
}
}
воид паге_валуатион_8()
{
иф(цена_јединице_вредновања
{
валуатион_унит_прице = валуатион_унит_прице * 10 + 8;
паге_валуатион_унит_прице_рефресх();
}
}
воид паге_валуатион_9()
{
иф(цена_јединице_вредновања
{
валуатион_унит_прице = валуатион_унит_прице * 10 + 9;
паге_валуатион_унит_прице_рефресх();
}
}
воид паге_валуатион_0()
{
иф(цена_јединице_вредновања
{
валуатион_унит_прице = валуатион_унит_прице * 10 + 0;
паге_валуатион_унит_прице_рефресх();
}
}
воид паге_валуатион_бацк()
{
валуатион_унит_прице = валуатион_унит_прице / 10;
паге_валуатион_унит_прице_рефресх();
}
воид паге_валуатион_цлеар()
{
валуатион_унит_прице = 0;
паге_валуатион_унит_прице_рефресх();
}
Време поста: 28. април 2024