找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1475|回复: 5
收起左侧

想请教一唯创芯片WT588H16-16S芯片怎么使用一线串口通信

[复制链接]
ID:858009 发表于 2021-12-13 10:37 | 显示全部楼层 |阅读模式
首次接触这种芯片,想请教一下怎么通过单片机控制其播放音乐,一线串口通信,先请教一下控制代码流程


电路图

电路图
回复

使用道具 举报

ID:336378 发表于 2021-12-13 15:34 | 显示全部楼层
官网不是用例程吗??。
回复

使用道具 举报

ID:509408 发表于 2021-12-13 16:26 | 显示全部楼层
资料上不全都有吗?只不过那个示例程序比较糙。最好是自己动手封装成一个函数。
回复

使用道具 举报

ID:979299 发表于 2021-12-13 16:43 | 显示全部楼层
一线串口DAC输出,是指一路音源吧,由DATA和BUSY控制输入,还是得两根线,就算全双工也是这样
回复

使用道具 举报

ID:858009 发表于 2021-12-14 13:06 | 显示全部楼层
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地址播放
                        }
                }               
        }
}
回复

使用道具 举报

ID:624769 发表于 2021-12-14 14:40 | 显示全部楼层
用我这个吧,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
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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