[原创]偶地第2件独立作品:用SYN6288语音合成开发板制作的银行语音排队机[图片+视频]

2020-01-23 14:27发布

吼吼。。。 语音芯片玩上瘾了。。。
这次我把SYN6288和单片机集成到一起做了个语音合成开发板,
还用它做了个银行语音排队机实验。。。


(原文件名:14.jpg)


(原文件名:15.jpg)
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
hahacomcn
1楼-- · 2020-01-24 08:31
发音效果是一字一顿的吧。
不过科大讯飞的语音芯片XF-4041的效果还真是不错的说。
ryebread
2楼-- · 2020-01-24 12:35
 精彩回答 2  元偷偷看……
role_2099
3楼-- · 2020-01-24 16:06
手里拿的那个是?
icecoli
4楼-- · 2020-01-24 20:45
芯片价格太高
ciky
5楼-- · 2020-01-25 00:27
真是的,芯片价格高低关我什么事啊,
我也是买来玩的哈哈,
不过说心里话效果是真的不太理想,
我老公买了个XF4240,声音比这个好多啦!
谁说光照片是原创啊,源码也是好不好

这次实验的源码就不发了,发个以前写的6288实验源码吧

/***********************************************************
**
** 北京宇音天下公司 SYN6288 中文语音合成芯片测试程序演示版
**
** 本程序用于89C51/89C52/89S51/89S52及与其兼容的其他单片机
**
** 作    者:CIKY & SPP From Dreamon-II Labs.
**
** 版权所有:追梦计算机及电子技术实验室
**
** 最后修改:2010-05-06  凌晨 03:22
**
***********************************************************/

#include <reg51.h>

#define uchar unsigned char

#define KEY          P1  //P1用于键扫描

#define BUFLEN      255  //文字缓冲区的长度
#define HEADLEN       5  //数据包头的长度
#define LEN_OFFSET    2  //长度字节的偏移量(本例中长度不超过255字节,因此只使用1字节长度)

//数据包头(0xFD + 2字节长度 + 1字节命令字 + 1字节命令参数)
uchar head[HEADLEN] = {0xfd,0x00,0x00,0x01,0x00};

//文字(中间有需要变化的内容可在发送前修改)
code uchar text[BUFLEN] = {"蒸羊羔蒸熊掌蒸鹿尾烧雏鸡烧花鸭烧子鹅红丸子白丸子麻婆豆腐糖醋鲤鱼家常凉菜红烧肉水煮鱼麻辣小龙虾"};
//                          0,6  7,6  13,6 19,6 25,6 31,6 37,6 43,6 49,8   57,8   65,8   73,6 79,6 85,10

uchar val = 0;  //计数值
uchar old = 0;  //旧计数值(用来检测变化)

//延时1ms
void Delay1ms(uchar n)
{
    uchar i=112;

        while(n--)
        {
                while(i--);
        }
}

//串口初始化
void UART_InitBaud(void)
{
        SCON=0xD8 ;  //晶振为11.059MHZ时,设定串口波特率为9600bit/s,方式3  
        TMOD=0x20 ;
        PCON=0x00 ;
        TH1=0xFD ;
        TR1=1;       
}

//串口发送数据
void UART_Trans(uchar n)
{
        SBUF = n;   
        while(TI==0);  //发送数据   
        TI=0;       
}                               

//发声程序
void Speech(uchar *buf, uchar len)
{
        uchar i = 0;          //循环计数变量
        uchar xor = 0x00;     //校验码初始化
                       
        head[LEN_OFFSET] = len + 3;  //计算正文长度(1命令字 + 1命令参数 + 文字长度 + 1校验位)

        //发送数据包头(0xFD + 2字节长度 + 1字节命令字 + 1字节命令参数)
        for(i = 0; i < HEADLEN; i++)
        {
                xor ^= head;
                UART_Trans(head);
                Delay1ms(2);
           }

        //发送文字内容
        for(i = 0; i < len; i++)
        {
                xor ^= buf;
                UART_Trans(buf);
                Delay1ms(2);
        }

        UART_Trans(xor);        //发送校验位
}

//键扫描
void keyScan(void)
{
    uchar k;

    KEY = 0xff;            //置位P2口以读取键值

        if(KEY != 0xff)        //如果有键按下
        {
                k = KEY;           //取键值
                Delay1ms(1);       //消抖

                if(KEY == k)       //确认按下
                {
                        switch(k)
                        {
                        case 0xfe:
                                Speech(text,6);
                                break;
                        case 0xfd:
                                Speech(text+6,6);
                                break;
                        case 0xfb:
                                Speech(text+12,6);
                                break;
                        case 0xf7:
                                Speech(text+18,6);
                                break;
                        case 0xef:
                                Speech(text+24,6);
                                break;
                        case 0xdf:
                                Speech(text+30,6);
                                break;
                        case 0xbf:
                                Speech(text+36,6);
                                break;
                        case 0x7f:
                                Speech(text+42,6);
                                break;
                        case 0xfc:
                                Speech(text+48,8);
                                break;
                        case 0xf9:
                                Speech(text+56,8);
                                break;
                        case 0xf3:
                                Speech(text+64,8);
                                break;
                        case 0xe7:
                                Speech(text+72,6);
                                break;
                        case 0xcf:
                                Speech(text+78,6);
                                break;
                        case 0x9f:
                                Speech(text+84,10);
                                break;
                        default:
                                break;
                        }
                }
        }

        while(KEY != 0xff);  //等待按键抬起

        return;
}

//主函数
void main()
{
        uchar xor = 0;    //校验码(正文内容的异或)
        uchar i = 0;      //循环计数变量
       
        UART_InitBaud();  //初始化串口为 9600bps

        while(1)
        {
                keyScan();      //检查按键
                Delay1ms(100);        //延时
        }
}
zhenglu891028
6楼-- · 2020-01-25 03:53
谢谢分享

一周热门 更多>