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