【开源获奖案例】基于T5L智能屏的FM收音机

描述

——来自迪文开发者论坛

 

本期为大家推送迪文开发者论坛获奖开源案例——基于T5L智能屏的FM收音机。该方案基于T5L智能屏,通过串口4与FM收音机模块进行通讯,实现自动搜索获取不同频段电台,同时支持选台、频率调节、音量控制等功能,为用户提供便捷操作体验。

 


  UI素材展示   
 
收音机收音机

  GUI工程设计   
 收音机
  C51工程设计   
 
(1)屏幕代码如下:   

 

void resetFreChannelValue(void){    Write_Dgus(0x1510,10800);    Write_Dgus(0x1511,1);}INIT_CPU();//系统初始化PORT_Init();//IO口初始化T0_Init();//定时器0初始化T2_Init();//定时器2初始化my_UART4_Init(115200);uart_init();//串口初始化ws2812_writ_byte(8);//LED初始化resetFreChannelValue();ChangePage(1);

(2)屏幕显示频率,频道代码如下:

 

void DispFreChannel(void){    if(Uart4_Rx[0]!=0x51)    return;    if(Uart4_Rx[1]!=0x10)    return;    Write_Dgus(0x1510,Uart4_Rx[2]<<8|Uart4_Rx[3]);    Write_Dgus(0x1511,Uart4_Rx[4]);}

(3)屏幕处理触摸数据代码如下:

 

 

void FMCtrol(void){    u8Read[2];    u8sendda[10],i=0;    memset(Read,0,sizeof(Read));    Read_Dgusii_Vp(0x1500,Read,1);    if(!Read[1])    return;    memset(sendda,0,sizeof(sendda));    sendda[0]=0x51;    switch(Read[1])    {        case1:        sendda[1]=0x10;        break;        case2:        sendda[1]=0x11;        break;        case3:        sendda[1]=0x12;        break;        case4:        sendda[1]=0x13;        break;        case5:        sendda[1]=0x14;        break;        case6:        sendda[1]=0x15;        break;        case7:        sendda[1]=0x16;        break;        case8:        sendda[1]=0x17;        break;    }    UART4_SendStr(sendda,2);    Write_Dgus(0x1500,0);}

(4)FM收音机板数据解析核心代码如下:

  •  

void FmModeUpdateFrmChannel(void){    static uint16_t Frebuf=0xffff,Channelbuf=0xffff;    static uint16_t delayin=80;    uint8_t sendbufl[10];    if(delayin)    {        delayin--;        return;    }    if(app_get_curr_task() != APP_FM_TASK)    return;    if(get_fm_channel()!=Channelbuf||    get_fm_frq()!=Frebuf)    {        Channelbuf=get_fm_channel();        Frebuf=get_fm_frq();        sendbufl[0]=0x51;        sendbufl[1]=0x10;        sendbufl[2]=Frebuf>>8;        sendbufl[3]=Frebuf;        sendbufl[4]=Channelbuf;        //UserUartRetRec(AI_uart_bus,sendbufl,5);        AI_uart_bus->write(sendbufl, 5);    }}void UserUartRecHandle(const uart_bus_t*uart_bus,u8 *data,u16 len){    u8 retdata[30];    u8 i=0;    if(data[0]!=DwinLocal_addr)    return;    switch(data[1])    {        case 0x10:        app_task_put_key_msg(KEY_MUSIC_PP,0);        break;        case 0x11:        app_task_put_key_msg(KEY_FM_SCAN_ALL,0);        break;        case 0x12:        app_task_put_key_msg(KEY_FM_NEXT_STATION,0);        break;        case 0x13:        app_task_put_key_msg(KEY_FM_PREV_STATION,0);        break;        case 0x14:        app_task_put_key_msg(KEY_FM_NEXT_FREQ,0);        break;        case 0x15:        app_task_put_key_msg(KEY_FM_PREV_FREQ,0);        break;        case 0x16:        app_task_put_key_msg(KEY_VOL_UP,0);        break;        case 0x17:        app_task_put_key_msg(KEY_VOL_DOWN,0);        break;    }}

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分