|
2.硬件结构:
这次主要结构是, STM32+屏幕+录音板,它们之间通过串口进行连接。
3.界面展示:
4.代码如下:
- 迪文屏幕
- 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);
- }
复制代码
备注说明:如需源码,请参考此链接:http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=12400&extra=&_dsign=8a3dbad6
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|