|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2010-11-27 20:31:47
|
显示全部楼层
真是的,芯片价格高低关我什么事啊,
我也是买来玩的哈哈,
不过说心里话效果是真的不太理想,
我老公买了个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); //延时
}
} |
|