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

logo

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

時(shí)間:2024-09-23 分類:產(chǎn)品資訊

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

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

 

    【演示視頻】

 

 

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


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

1. 前往迪文開發(fā)者論壇獲取:http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=10904&extra=&_dsign=d701329d

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

 

UI素材展示

UI素材

 

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

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

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

通過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)入識別

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

        }

    }

}