|
用我这个吧,delay25us 的时间,需要你根据你的单片机时间自己重新定义一下 t 的初值,其他的,你直接调用 SendOrder_WT588() 即可 #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); //发送低八位指令 } #endif |
cba_cba 发表于 2021-12-13 15:34 例程到没有 自己写的不行,想问一下在原因 #include <reg52.h> #define UC8 unsigned char #define UI16 unsigned int #define one_line_DATA P1 sbit DATA = P0^1; sbit keys = P3^0; int z; void Delay_10us(z) //延时子程序1 { unsigned char a,b,c; for(a=15;a>0;a--) for(b=200;b>0;b--) for(c=100;c>0;c--); } void Line_1A_WT588H(UI16 USER_DATA) { UC8 i; bit B_DATA; UC8 num_temp=0; UI16 ddata_temp ,pdata_temp; 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; } void main() { while(1) { if(keys==0) { Delay_10us(100); if(keys==0) //接收低电平触发 { Line_1A_WT588H(0x0001); //播放1地址音乐 Line_1A_WT588H(0xFFF2); //循环1地址播放 } } } } |
| 一线串口DAC输出,是指一路音源吧,由DATA和BUSY控制输入,还是得两根线,就算全双工也是这样 |
| 资料上不全都有吗?只不过那个示例程序比较糙。最好是自己动手封装成一个函数。 |
| 官网不是用例程吗??。 |