迪文科技论坛

 找回密码
 立即注册
搜索
查看: 39|回复: 0

【开源】录音显示播放

[复制链接]

13

主题

15

回帖

1153

积分

金牌会员

Rank: 6Rank: 6

积分
1153
QQ
发表于 3 天前 | 显示全部楼层 |阅读模式
这次主要结构是, STM32+屏幕+录音板,它们之间通过串口进行连接

效果如下:

界面




代码如下:

迪文屏幕
void main(){
        INIT_CPU();  //系统初始化
        PORT_Init(); //IO口初始化

        T0_Init();//定时器0初始化
        T2_Init();//定时器2初始化
        my_UART4_Init(115200);
        uart_init();// 串口初始化

        while(1){
                Uart_Handle_all();
                OneMsHandle();//1Ms一次
                TenMsHandle();

        Read_0xF00();//数据自动上传
        }
}

u8 uartHandle(u8 *Tdata,u8 len)
{
        u16 Wlen=0;
        u16 CRC_1=0,BegAddr=0;
        u8  xdata  RetData[Uart4_Rx_Maxlen+10];
        u8  errnum=0;

  CRC_1=CalcCrcAll(0xffff,Tdata,len-2);
        if(CRC_1 != ((Tdata[len-1])<<8 | (Tdata[len-2])))
                return 0;

        //这个为写指令
        if(Tdata[0]==0 && Tdata[1]!=0x06)
        {
                return 0;
        }
        else if(Tdata[0]!=DevAddr) //设备地址
        {
                return 0;
        }

        //这个为写指令
        if(Tdata[1]!=0x03 && Tdata[1]!=0x06 && Tdata[1]!=0x10 )
        {
                SendModbusAckErr(Tdata,1);
                return 0;
        }

        Wlen=(Tdata[4]<<8|Tdata[5]);                 //长度
        BegAddr=(Tdata[2]<<8|Tdata[3]);        //开始地址

        if(Tdata[1]==0x06) //写内存
        {
                write_dgusii_vp(BegAddr,&Tdata[4],1);
        }
        else if(Tdata[1]==0x10)
        {
                write_dgusii_vp(BegAddr,&Tdata[7],Wlen);
        }

        //读操作响应
        //[01][0x03][00][6B][00][02][CRC高][CRC低]
        if(Tdata[1]==0x03)
        {
                RetData[0]=Tdata[0];
                RetData[1]=0x03;
                RetData[2]=Wlen*2;
                Read_Dgusii_Vp(BegAddr,&RetData[3],Wlen);
                CRC_1=CalcCrcAll(0xFFFF,RetData,3+Wlen*2);
                RetData[Wlen*2+3]=CRC_1;
                RetData[Wlen*2+3+1]=CRC_1>>8;
                SendModbusAckOK(RetData,3+Wlen*2+2);
        }
        else if(Tdata[1]==0x10)
        {
                memcpy(RetData,Tdata,6);
                CRC_1=CalcCrcAll(0xFFFF,(u8 *)&RetData,6);
                RetData[6]=CRC_1 ;
                RetData[7]=CRC_1>>8;
                SendModbusAckOK(RetData,8);
        }
        else if(Tdata[1]==0x06 && Tdata[0]) //当地址码为真,才应答
        {
                memcpy(RetData,Tdata,8);
                SendModbusAckOK(RetData,8);               
        }

        return 1;
}

void RecordPlaySliderLogo(void)
{
        static u8 VolC=102;
        u8 data Readdtata[2];
        VolCutDispLog_Para_s UpanPlayLog;

        if(NowPage[1]!=21)
        {
                VolC=0x102;
                return;
        }

        Read_Dgusii_Vp(0x17B8,Readdtata,1);
        if(VolC==Readdtata[1])
                return;
        VolC=Readdtata[1];

        UpanPlayLog.LogoLen=459;//长度
        UpanPlayLog.CutPage=24;//剪切图形所在页面
        UpanPlayLog.CutDispaddr=0x7600;//基本图形地址
        UpanPlayLog.Vol=VolC;//0~100音量值
        UpanPlayLog.CutbegXY[0]=245;//剪切图形左上角开始地址X
        UpanPlayLog.CutbegXY[1]=366;//剪切图形左上角开始地址Y
        UpanPlayLog.CutendXY[0]=UpanPlayLog.CutbegXY[0]+UpanPlayLog.LogoLen;//剪切图形右下角开始地址X
        UpanPlayLog.CutendXY[1]=366+12;//剪切图形右下角结束地址Y
        UpanPlayLog.localPageXY[0]=248;
        UpanPlayLog.localPageXY[1]=379;

        VolCutDisp(&UpanPlayLog);
}

Stm32如下:
void HW_Init(void)
{
   my_mem_init(SRAMIN);    //初始化内部内存池

        uart1_init(115200);        //外置MP3
        uart3_init(115200);        //屏幕收发
        uart5_init(115200); //内置 MP3
        uart4_init(115200); //串口4初始化

        LED_Init();                                  //初始化LED
        Mp3RecCtrIOinit();
}


void LoopHandle_task(void *p_arg)
{
        Init_TotalSet();
        Init_Mp3data();
        DMT_ChangePage(1);

        while(1)
        {
                LCD_Handle();
                Mp3PlayProcess();                                      
UdiskDisInOut();                                       
                vTaskDelay(LoopHandle_ms/portTICK_PERIOD_MS);
        }
}

void DMT_Action1(void)
{
        MainMeanKey();
        UpanSDPlayKey();     
        EnterKeyRET();                        

        RecordRPage();
        RecordPlayPage();

        AllRetKey();
}

录音板代码:
void RECRToReady(void)
{
    u8 BOper=0;
        u8 SecialNum=0;

    if(!ModWriteReg[WR_RECFileReady][1])
        return;
    BOper=ModWriteReg[WR_RECFileReady][1];
        SecialNum=ModWriteReg[WR_RECFileReady][0];
    ModWriteReg[WR_RECFileReady][1]=0;
        ModWriteReg[WR_RECFileReady][0]=0;
        ModReadReg[RD_RECisOk][0]=0;//清除目录准备

        MsgUserPara[0]=BOper;
        MsgUserPara[1]=SecialNum;        
        User_printf("%s\r\n",__FUNCTION__);
        task_post_msg(NULL, 1, MSG_MUSIC_RECtoReady);
}

void RECSongToPoint(void)
{
    u16 BOper=0;

        BOper=ModWriteReg[WR_RECFilePoint][0]<<8|ModWriteReg[WR_RECFilePoint][1];
    if(!BOper)
        return;
        MsgUserPara[0]=ModWriteReg[WR_RECFilePoint][0];
        MsgUserPara[1]=ModWriteReg[WR_RECFilePoint][1];

    ModWriteReg[WR_RECFilePoint][1]=0;
    ModWriteReg[WR_RECFilePoint][0]=0;
        ModReadReg[RD_RECisOk][1]=0;//清除歌曲准备

        User_printf("%s\r\n",__FUNCTION__);
        task_post_msg(NULL, 1, MSG_MUSIC_RECtoBuffNum);
}

有兴趣自已下载看看




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2025-5-13 02:07 , Processed in 0.034711 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表