程序部分- 由于我们产品的保密性,所以我们产品内部的程序细节,不方便暴露,这里就以官方的例程进行说明,其实移植还是非常简单的额
- #include "STK6037.h"
- //运行晶振:11.05926MHZ
- #define TIMER0_H (65536-1800)/256//定时2Ms
- #define TIMER0_L (65536-1800)%256
- #define SYS_Fosc 11059200 //晶振频率
- #define COMM_BAUD_RATE 9600 //串口波特率
- #define OSC_FREQ 11059200 //11059200
- static INT8U Send_buf[10] = {0} ;
- static INT8U Recv_buf[10] = {0} ;
- static INT8U SendDataLen = 0 ;
- static INT8U ResendDataLen = 0 ;
- /******************************串口1的波特率********************************/
- //T1作波特率发生器
- //在波特率加倍情况下
- #define BAUD_57600 256 - (OSC_FREQ/192L)/57600L // 254 FF
- #define BAUD_28800 256 - (OSC_FREQ/192L)/28800L // 254 FE
- #define BAUD_19200 256 - (OSC_FREQ/192L)/19200L // 253 FD
- #define BAUD_14400 256 - (OSC_FREQ/192L)/14400L // 252 FC
- #define BAUD_9600 256 - (OSC_FREQ/192L)/9600L // 250 FA
- /*****************************************************************************************************
- - 功能描述:10us的延时函数
- - 隶属模块:常用函数库(内部)
- - 参数说明:无
- - 返回参数:无
- - 注: 在这里的运行环境是51,晶振为12MHZ
- *****************************************************************************************************/
- void Delay_Us(INT32U z)
- {
- while(z--);
- }
- /***********************毫秒级别延时************************/
- void Delay_Ms(INT32U z)
- {
- INT32U x=0 , y=0;
- for(x=110 ; x>0 ;x--)
- for(y=z; y>0;y-- );
- }
- /*****************************************************************************************************
- - 功能描述: 串口1初始化
- - 隶属模块: 外部
- - 参数说明: 无
- - 返回说明: 无
- - 注: 都是9600波特率
- *****************************************************************************************************/
- void Serial_init(void)
- {
- TMOD = 0x20; // 设置 T1 为波特率发生器
- SCON = 0x50; // 0101,0000 8位数据位, 无奇偶校验
-
- PCON = 0x00; //PCON=0;
- TH1=256-(SYS_Fosc/COMM_BAUD_RATE/32/12);//设置为9600波特率
- TL1=256-(SYS_Fosc/COMM_BAUD_RATE/32/12);
- TR1 = 1; //定时器1打开
- REN = 1; //串口1接收使能
- ES = 1; //串口1中断使能
- }
- /********************************************************************************************
- - 功能描述: 串口发送一个字节
- - 隶属模块: 外部
- - 参数说明:
- - 返回说明:
- - 注:
- ********************************************************************************************/
- void Uart_PutByte(INT8U ch)
- {
- SBUF = ch;
- while(!TI){;}
- TI = 0;
- }
- /*****************************************************************************************************
- - 功能描述: 串口发送一帧数据
- - 隶属模块: 内部
- - 参数说明:
- - 返回说明:
- - 注:无
- *****************************************************************************************************/
- void SendCmd(INT8U len)
- {
- INT8U i = 0 ;
- Uart_PutByte(0x7E); //起始
- for(i=0; i<len; i++)//数据
- {
- Uart_PutByte(Send_buf[i]) ;
- }
- Uart_PutByte(0xEF) ;//结束
- }
- /********************************************************************************************
- - 功能描述: 串口向外发送命令[包括控制和查询]
- - 隶属模块: 外部
- - 参数说明: CMD:表示控制指令,请查阅指令表,还包括查询的相关指令
- feedback:是否需要应答[0:不需要应答,1:需要应答]
- data:传送的参数
- - 返回说明:
- - 注:
- ********************************************************************************************/
- #define WORD_HIGH(x) ((u8)((u16)(x)>>8))
- #define WORD_LOW(x) ((u8)((u16)(x)))
- void Uart_SendCMD(u8 CMD ,u16 len , u16 dat)
- {
- g_user.Send_buf[0] = CMD;
- g_user.Send_buf[1] = WORD_HIGH(len);
- g_user.Send_buf[2] = WORD_LOW(len);
- g_user.Send_buf[3] = WORD_HIGH(dat);
- g_user.Send_buf[4] = WORD_LOW(dat);
- SendCmd(5,1); //发送此帧数据
- }
- void Uart_SendDat(u8 CMD , u8 *pbf ,u8 len)
- {
- static u8 i = 0 ;
- g_user.Send_buf[0] = CMD ; //保留字节
- g_user.Send_buf[1] = WORD_HIGH(len);
- g_user.Send_buf[2] = WORD_LOW(len);
- for(i=0 ; i<len ; i++)
- {
- g_user.Send_buf[3+i] = *(pbf+i) ;
- }
- SendCmd(len+3 , 1 ); //发送此帧数据
- }
- u8 testbuf[6] = {01,01,02,02,03,03} ;
- u8 testlen = 6 ;
- void main()
- {
- Delay_Us(1) ;
- Delay_Ms(1) ;
- Serial_init() ;
- Delay_Ms(1000) ;//延时大概6S
-
- Uart_SendCMD(0x03 , 2 , 0x01) ;//播放第一首
-
- Delay_Ms(1000) ;//延时大概6S
-
- Uart_SendCMD(0x03 , 2 , 0x02) ;//播放第二首
- Delay_Ms(1000) ;//延时大概6S
- Uart_SendCMD(0x03 , 2 , 0x04) ;//播放第四首
-
- Delay_Ms(1000) ;//延时大概6S
- Uart_SendCMD(0x21 , testbuf , testlen) ;//组合播放文件夹01里面的001 ,文件夹02里面的002 ,文件夹03里面的003 ,
- while(1) ;
- }
|