本帖最后由 188610329 于 2021-12-15 13:28 编辑 qwettyuio 发表于 2021-12-15 09:51 要是实在不行, 你先试试看两线串口协议能不能驱动? WT588H好像不支持按键操作, WT588D还能用按键测试一下。方便判断芯片是否正常工作。 |
188610329 发表于 2021-12-14 17:42 我用的是89c51,修改了延时的 |
188610329 发表于 2021-12-14 17:42 不是,修改了延时的 |
qwettyuio 发表于 2021-12-14 16:50 反正,我这边是可以用的, 你delay25us 里面的步进有没有根据你单片机实际 速度修改? 我这个147, 是在STC15系列 24MHz 情况下的设置。 你难道也是? |
188610329 发表于 2021-12-14 16:46 现在最顶层的就是他们给的一线串口通信函数 |
188610329 发表于 2021-12-14 16:44 官方烧录进去才发货给我的,地址是1地址 |
最关键的是: 测试的话,要这样写…… 你之前那样写, 不停的在发指令, WT588 压根没机会执行指令。 void main() { Delay25us(200); Delay25us(200); Delay25us(200); SendOrder_WT588(0x0010); while(1); } |
那你就要确认,你的 声音文件又没有正确烧录到 Flash 里面了。 如果 Flash 里面空的也是无法播放的。 |
188610329 发表于 2021-12-14 16:35 这是官方给的控制函数,和以前我使用的STM32一键连接JQ8400-FLJQ8900语音模块不一样,不知道那一步骤出现了问题 /*-------------------------------------- ;模块名称: Line_1A_WT588H(UI16 USER_DATA) ; 功 能:实现一线串口通信函数 ; 入 参:USER_DATA ; 出 参: ; one_line_DATA //数据线 ;-------------------------------------*/ #define UC8 unsigned char #define UI16 unsigned int #define one_line_DATA P1 void Line_1A_WT588H(uint USER_DATA) { uchar i; bit B_DATA; ddata_temp = USER_DATA; pdata_temp = ddata_temp& 0X00FF; ddata_temp>>= 8; pdata_temp<<= 8; ddata_temp |= pdata_temp;//用户数据赋值 num_temp = 16; one_line_DATA = 0; Delay_10us(500); //延时 5MS B_DATA = (bit)(ddata_temp&0X0001); for(i=0;i<num_temp;i++) { if(i==8) { one_line_DATA = 1; Delay_10us(200); //延时 2MS one_line_DATA = 0; Delay_10us(500); //延时 5MS } one_line_DATA = 1; //拉高数据传输线,准备传输数据 if(B_DATA==0) { /*表示逻辑电平 0*/ Delay_10us(20); // 延时 200us one_line_DATA = 0; Delay_10us(60); // 延时 600us } else { /*表示逻辑电平 1*/ Delay_10us(60); // 延时 600us one_line_DATA = 0; Delay_10us(20); // 延时 200us } ddata_temp = ddata_temp>>1; B_DATA = (bit)(ddata_temp&0x0001); } one_line_DATA = 1; } |
188610329 发表于 2021-12-14 16:35 P17连接到data端口 |
不是啊, 我用的是 P17 你应该 sbit 到你的 IO上才对吧? 你实际连接的的是单片机哪个IO? P01? |
188610329 发表于 2021-12-14 15:13 试用了一下代码,连接P17引脚LED不断变化,但是busy引脚没有变化,一直是高电平 #include <reg52.h> #define u8 unsigned char #define u16 unsigned int #ifndef _WT588_C_ #define _WT588_C_ sbit WT588IO = P1^7; void Delay25us(u8 DelayTime) { u8 t; while(DelayTime--) { t = 147; while (--t); } } void SendByte_WT588(u8 ByteDat) { u8 i; WT588IO = 0; Delay25us(200); //delay 5ms WT588IO = 1; for(i=0;i<8;i++) { Delay25us(8); //delay 200us ByteDat>>= 1; WT588IO= CY; //设置1/0 Delay25us(16); //delay 400us WT588IO= 0; //IO低电平 Delay25us(8); //delay 200us WT588IO= 1; //IO高电平 } } void SendOrder_WT588(u16 WTOrder) { SendByte_WT588(WTOrder >> 8); //发送高八位指令 Delay25us(80); //delay 2ms SendByte_WT588(WTOrder); //发送低八位指令 } void main() { while(1) { SendOrder_WT588(0x0010); } } |
你先用我给你的代码试试,可能的话,监测一下BUSY口是否有信号,然后再考虑 DAC输出的问题。 P.S. 你如果要连续发送两条指令的话,根据我的经验,两条指令之间应该间隔30ms以上。才能确保两条指令都被接受并且执行, Line_1A_WT588H(0x0001); //播放1地址音乐 Line_1A_WT588H(0xFFF2); //循环1地址播放 你这样写,很可能会作为噪音被直接抛弃。 |