精品国产Av无码久久久蜜臀-免费看a级淫秽真实动作衫视频-人妻无码一区二区三区免费视频-奶好大 好长 好紧免费视频

logo

【開源獲獎(jiǎng)案例】基于T5L智能屏的汽車抬頭顯示器方案

        ——來(lái)自迪文開發(fā)者論壇

本期為大家推送迪文開發(fā)者論壇獲獎(jiǎng)開源案例——?基于T5L智能屏的汽車抬頭顯示器方案?。該方案采用COF智能屏,通過(guò)T5L CAN接口,實(shí)時(shí)獲取汽車OBDII診斷接口的數(shù)據(jù),并將接收到的車速和轉(zhuǎn)速數(shù)據(jù)同步顯示在屏幕上,為駕駛員在行車過(guò)程中提供直觀、便捷的視覺(jué)輔助。

 

    【演示視頻】

 

 

視頻由論壇工程師實(shí)拍提供


完整開發(fā)資料含迪文屏DGUS工程資料與C51代碼,獲取方式:

1. 前往迪文開發(fā)者論壇獲?。?span style="font-size: 18px; text-decoration: underline; line-height: 150%; color: rgb(51, 102, 153); background: rgb(255, 255, 255);">http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=10904&extra=&_dsign=d701329d

2. 微信公眾號(hào)中回復(fù)“汽車抬頭顯示器”獲取。

 

UI素材展示

UI素材

 

【GUI工程設(shè)計(jì)】

  GUI工程設(shè)計(jì)

【程序代碼設(shè)計(jì)

通過(guò)T5L CAN接口,獲取車速和轉(zhuǎn)速數(shù)據(jù),部分參考代碼如下:

void main(void)

{

    T5LInit();

    T0_Init(); // 定時(shí)器0初始化

    EA = 1;

    //等待上電穩(wěn)定    

    TimerExtDelayMs(2000);

    GaugeViewInit();    

    while (1)

    {

        //obdii系統(tǒng)進(jìn)入識(shí)別

        if (ObdiiSysEnter())

        {

            break;

        }

    }

    //HUD功能主入口

    GaugeViewFunc();

}

 

void GaugeViewFunc(void)

{

    uint8_t rawDataBuff[256];

    uint8_t resultBuff[5];

    float vehicleSpeed = 0;

    float rotateSpeed = 0;

    uint32_t tempData = 0;

    while (1)

    {

        memset(rawDataBuff, 0, 256);

        // 讀取轉(zhuǎn)速

        if (ObdiiReadPid(rawDataBuff, 2, 0x01, 0x0C))

        {

            ObdiiLdsCalResult(0x0C, rawDataBuff, resultBuff);

            tempData = resultBuff[3];

            tempData = resultBuff[2] + (tempData << 8);

            tempData = resultBuff[1] + (tempData << 8);

            tempData = resultBuff[0] + (tempData << 8);

            rotateSpeed = (float)tempData;

            GaugeViewRotateSpeedSet(rotateSpeed);

        }

        memset(rawDataBuff, 0, 256);

        // 讀取車速

        if (ObdiiReadPid(rawDataBuff, 2, 0x01, 0x0D))

        {

            ObdiiLdsCalResult(0x0D, rawDataBuff, resultBuff);

            tempData = resultBuff[3];

            tempData = resultBuff[2] + (tempData << 8);

            tempData = resultBuff[1] + (tempData << 8);

            tempData = resultBuff[0] + (tempData << 8);

            vehicleSpeed = (float)tempData;

            GaugeViewPointerSet((uint8_t)vehicleSpeed);

            GaugeViewVehicleSpeedSet(vehicleSpeed);

        }

    }

}

void GaugeViewFunc(void)

{

    uint8_t rawDataBuff[256];

    uint8_t resultBuff[5];

    float vehicleSpeed = 0;

    float rotateSpeed = 0;

    uint32_t tempData = 0;

    while (1)

    {

    memset(rawDataBuff, 0, 256);

    // 讀取轉(zhuǎn)速

    if (ObdiiReadPid(rawDataBuff, 2, 0x01, 0x0C))

        {

        ObdiiLdsCalResult(0x0C, rawDataBuff, resultBuff);

        tempData = resultBuff[3];

        tempData = resultBuff[2] + (tempData << 8);

        tempData = resultBuff[1] + (tempData << 8);

        tempData = resultBuff[0] + (tempData << 8);

        rotateSpeed = (float)tempData;

        GaugeViewRotateSpeedSet(rotateSpeed);

        }

    memset(rawDataBuff, 0, 256);

    // 讀取車速

    if (ObdiiReadPid(rawDataBuff, 2, 0x01, 0x0D))

        {

        ObdiiLdsCalResult(0x0D, rawDataBuff, resultBuff);

        tempData = resultBuff[3];

        tempData = resultBuff[2] + (tempData << 8);

        tempData = resultBuff[1] + (tempData << 8);

        tempData = resultBuff[0] + (tempData << 8);

        vehicleSpeed = (float)tempData;

        GaugeViewPointerSet((uint8_t)vehicleSpeed);

        GaugeViewVehicleSpeedSet(vehicleSpeed);

        }

    }

}