【开源获奖案例】多功能称重器

                ——来自迪文开发者论坛


    本期为大家推送迪文开发者论坛获奖开源案例——多功能称重器。工程师采用4英寸COF智能屏,通过T5L OS核与HX711模块及5kg压力传感器套装进行数据交互,用户可轻松查看重量、单价、总价、去皮等计价显示功能,以及计数、重量变化曲线跟踪和称重器精准度矫正等功能,轻松切换不同应用场景,享受便捷高效称重体验。

 【演示视频】

                         


完整开发资料含迪文屏DGUS工程资料与C51代码,获取方式:

1. 前往迪文开发者论坛获取:http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=10017&extra=page%3D1

2. 微信公众号中回复“多功能称重器”获取。

 

 

【UI开发示例】

UI界面

 


【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 valuation_unit_price = 0;    //单价

//单价刷新

void page_valuation_unit_price_refresh()

{

    uint8_t test_display[10] = {0};

    if(valuation_unit_price < 1000)

    {

        test_display[0] = valuation_unit_price / 100 % 10 + 0x30;

        test_display[1] = '.';

        test_display[2] = valuation_unit_price / 10 % 10 + 0x30;

        test_display[3] = valuation_unit_price / 1 % 10 + 0x30;

        dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

    }

    else if(valuation_unit_price < 10000)

    {

        test_display[0] = valuation_unit_price / 1000 % 10 + 0x30;

        test_display[1] = valuation_unit_price / 100 % 10 + 0x30;

        test_display[2] = '.';

        test_display[3] = valuation_unit_price / 10 % 10 + 0x30;

        test_display[4] = valuation_unit_price / 1 % 10 + 0x30;

        dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

    }

    else if(valuation_unit_price < 100000)

    {

        test_display[0] = valuation_unit_price / 10000 % 10 + 0x30;

        test_display[1] = valuation_unit_price / 1000 % 10 + 0x30;

        test_display[2] = valuation_unit_price / 100 % 10 + 0x30;

        test_display[3] = '.';

        test_display[4] = valuation_unit_price / 10 % 10 + 0x30;

        test_display[5] = valuation_unit_price / 1 % 10 + 0x30;

        dgus_show_text_value_set(VALUATION_UNIT_PRICE_ADDR, test_display, 4);

    }

    else if(valuation_unit_price < 1000000)

    {

        test_display[0] = valuation_unit_price / 100000 % 10 + 0x30;

        test_display[1] = valuation_unit_price / 10000 % 10 + 0x30;

        test_display[2] = valuation_unit_price / 1000 % 10 + 0x30;

        test_display[3] = valuation_unit_price / 100 % 10 + 0x30;

        test_display[4] = '.';

        test_display[5] = valuation_unit_price / 10 % 10 + 0x30;

        test_display[6] = valuation_unit_price / 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;

    if(gram_value >= valuation_decorticate)

    {

        gram_display = gram_value - valuation_decorticate;

        if(gram_display < 10)

        {

            test_display[0] = gram_display / 1 % 10 + 0x30;

            dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

        }

    else if(gram_display < 100)

    {

        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 < 1000)

    {

        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);

    }

    else if(gram_display < 10000)

    {

        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 < 100000)

    {

        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);

        }

    }

    else

    {

        dgus_show_text_value_set(VALUATION_GRAM_ADDR, test_display, 3);

    }

}

 

//总价刷新

void page_valuation_price_refresh()

{

    uint32_t price_value = 0;

    uint8_t test_display[10] = {0x30, '.', 0x30, 0x30};

    if(gram_value >= valuation_decorticate)

    {

        price_value = (gram_value - valuation_decorticate) * valuation_unit_price * 2 / 1000;

        if(price_value < 1000)

        {

            test_display[0] = price_value / 100 % 10 + 0x30;

            test_display[1] = '.';

            test_display[2] = price_value / 10 % 10 + 0x30;

            test_display[3] = price_value / 1 % 10 + 0x30;

            dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

        }

        else if(price_value < 10000)

        {

            test_display[0] = price_value / 1000 % 10 + 0x30;

            test_display[1] = price_value / 100 % 10 + 0x30;

            test_display[2] = '.';

            test_display[3] = price_value / 10 % 10 + 0x30;

            test_display[4] = price_value / 1 % 10 + 0x30;

            dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

        }

        else if(price_value < 100000)

        {

            test_display[0] = price_value / 10000 % 10 + 0x30;

            test_display[1] = price_value / 1000 % 10 + 0x30;

            test_display[2] = price_value / 100 % 10 + 0x30;

            test_display[3] = '.';

            test_display[4] = price_value / 10 % 10 + 0x30;

            test_display[5] = price_value / 1 % 10 + 0x30;

            dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

        }

        else if(price_value < 1000000)

        {

            test_display[0] = price_value / 100000 % 10 + 0x30;

            test_display[1] = price_value / 10000 % 10 + 0x30;

            test_display[2] = price_value / 1000 % 10 + 0x30;

            test_display[3] = price_value / 100 % 10 + 0x30;

            test_display[4] = '.';

            test_display[5] = price_value / 10 % 10 + 0x30;

            test_display[6] = price_value / 1 % 10 + 0x30;

            dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

        }

    }

    else

    {

        dgus_show_text_value_set(VALUATION_TOTAL_PRICES_ADDR, test_display, 4);

    }

}

void page_valuation_decorticate()

{

    valuation_decorticate = gram_value;

    page_valuation_weight_refresh();

}

void page_valuation_1()

{

    if(valuation_unit_price < 100000)

    {

        valuation_unit_price = valuation_unit_price * 10 + 1;

        page_valuation_unit_price_refresh();

    }

}

void page_valuation_2()

{

    if(valuation_unit_price < 100000)

    {

        valuation_unit_price = valuation_unit_price * 10 + 2;

        page_valuation_unit_price_refresh();

    }

}

void page_valuation_3()

{

    if(valuation_unit_price < 100000)

    {

        valuation_unit_price = valuation_unit_price * 10 + 3;

        page_valuation_unit_price_refresh();

    }

}

void page_valuation_4()

{

    if(valuation_unit_price < 100000)

    {

        valuation_unit_price = valuation_unit_price * 10 + 4;

        page_valuation_unit_price_refresh();

    }

}

void page_valuation_5()

{

    if(valuation_unit_price < 100000)

    {

        valuation_unit_price = valuation_unit_price * 10 + 5;

        page_valuation_unit_price_refresh();

    }

}

void page_valuation_6()

{

    if(valuation_unit_price < 100000)

    {

        valuation_unit_price = valuation_unit_price * 10 + 6;

        page_valuation_unit_price_refresh();

    }

}

void page_valuation_7()

{

    if(valuation_unit_price < 100000)

    {

        valuation_unit_price = valuation_unit_price * 10 + 7;

        page_valuation_unit_price_refresh();

    }

}

void page_valuation_8()

{

    if(valuation_unit_price < 100000)

    {

        valuation_unit_price = valuation_unit_price * 10 + 8;

        page_valuation_unit_price_refresh();

    }

}

void page_valuation_9()

{

    if(valuation_unit_price < 100000)

    {

        valuation_unit_price = valuation_unit_price * 10 + 9;

        page_valuation_unit_price_refresh();

    }

}

void page_valuation_0()

{

    if(valuation_unit_price < 100000)

    {

        valuation_unit_price = valuation_unit_price * 10 + 0;

        page_valuation_unit_price_refresh();

    }

}

void page_valuation_back()

{

    valuation_unit_price = valuation_unit_price / 10;

    page_valuation_unit_price_refresh();

}

void page_valuation_clear()

{

    valuation_unit_price = 0;

    page_valuation_unit_price_refresh();

}