【增强版TX-1C 51单片机开发板试用体验】+公交站语音报站
-
-
wuxiaokang
- LV3工程师
-
| 2017-11-15 21:46:14
- 浏览量 1324
- 回复:1
这块板子十分好用,非常感谢云汉电子社区!感谢管理员!自己在“增强版TX-1C 51单片机开发板” 十分有收获。这是一个公交站报站项目,采用科大讯飞的语音合成开发板,(若是不知道,淘宝买一块科大讯飞的开发板)现在也就是刚刚可以实现可以语音报站了,后期会在这个项目上更新其他功能,大神别喷啊。
代码如下:
/******************************************
*程序名称: 语音合成模块之公交车报站
*注意事项: P2.0~P2.7接独立按键K1~K8
*制 作 人: XXX
******************************************/
//#include//XFS5051.H里声明了,不用重复声明
#include"XFS5051.H"
bit OK = 0; //合成结束标志
uchar code YY_Data= //站名(高兴怎么改怎么改)
{
"北京站",\
"重庆站",\
"上海站",\
"四川站",\
"云南站",\
"哈尔滨站",\
"山西站",\
"海南站"
};
void main(void)
{
uchar KEY_data = 0;
uint i=0;
UART_Init(); //串口初始化
//Fa_Yin(1);
while(1)
{
KEY_data = KeyScan();
if(KEY_data)
{
//YS_XFS5051("各位乘客们机我奇偶积极 "); //可以自己改//
YS_XFS5051("各位朋友");
for(i=0; !OK && i<1000; i++)//等待合成完毕(10秒后跳出,防止程序死在这里)
Delay_ms(10); //延时10ms检测一次
OK=0; //成功合成标志位_清零
YS_XFS5051(YY_Data);//播放对应的站点
for(i=0; !OK && i<1000; i++)
Delay_ms(10);
OK=0;
YS_XFS5051("到了,请依次从后门下车");//可以自己改//
for(i=0; !OK && i<1000; i++)
Delay_ms(10);
OK=0;
}
}
}
void UARTInterrupt(void) interrupt 4
{
uchar CH=0;
if(RI)
{
RI = 0;
CH = SBUF;
//----------------------------//
if(CH == 0X4F)//0X4F芯片空闲
{
OK=1;
CH = 0X00;
}
else //0X41成功接收
OK=0;
} //END OF if(RI)
}
/*********************************************
在主函数中调用该初始化即可!
Fa_Yin(0); //中英文女声1(默认)
Fa_Yin(1); //中英文男声1
Fa_Yin(2); //中英文男声2
Fa_Yin(3); //中英文女声2
Fa_Yin(4); //唐老鸭
Fa_Yin(5); //中英文女童声
*********************************************/
#include"XFS5051.H"
void UART_Init() //串口初始化
{
TMOD = 0x20; //定时&计数器T1,工作方式2(串口)
SCON = 0x50; //0X50:允许接收;0X40:不允许
TH1 = 0xFD; //11.0592MHZ下,波特率=9600
TL1 = 0xFD;
PCON = 0x00; //波特率不加倍
EA = 1; //开总中断
ES = 1; //开串口允许
TR1 = 1; //开启串口
}
void Byte(uchar dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void Byte_S(uchar *cn) //
{
while ( *cn != '\0') //在C语言中字符串结束以‘\0’结尾
{
Byte(*cn);
cn ++; //指针+1:进入下一个
} //while结束.
}
void YS_XFS5051(uchar *CH)
{
uchar i=0;
Byte(0XFD); //帧头
Byte(0X00); //Byte((strlen(CH)+2)/256);//H
Byte( strlen(CH) + 2 ); //Byte((strlen(CH)+2)%256);//L
Byte(0X01); //构造命令字:合成播放命令
Byte(0X01); //文本编码格式:GBK
Byte_S(CH); //发送数据部分
}
void Delay_ms(unsigned int c) //延时(__)x1毫秒,误差 ?us
{
unsigned char a,b;
for(;c>0;c--)
for(b=35;b>0;b--)
for(a=13;a>0;a--);
}
uchar KeyScan(void)//键扫描
{
uchar Key_dat = 0;
KEY = 0xFF; //置位键端口以读取键值
if(KEY != 0xFF) //如果有键按下
{
Delay_ms(10); //消抖
if(KEY != 0xFF) //确认按下
{
switch(KEY)
{
case 0x7F: Key_dat=1; break;
case 0xBF: Key_dat=2; break;
case 0xDF: Key_dat=3; break;
case 0xEF: Key_dat=4; break;
case 0xF7: Key_dat=5; break;
case 0xFB: Key_dat=6; break;
case 0xFD: Key_dat=7; break;
case 0xFE: Key_dat=8; break;
default: Key_dat=0; break;
}
}
}
while(KEY != 0xFF); //等待按键抬起
return(Key_dat);
}
后续继续更新。
这块板子十分好用,非常感谢云汉电子社区!感谢管理员!自己在“增强版TX-1C 51单片机开发板” 十分有收获。这是一个公交站报站项目,采用科大讯飞的语音合成开发板,(若是不知道,淘宝买一块科大讯飞的开发板)现在也就是刚刚可以实现可以语音报站了,后期会在这个项目上更新其他功能,大神别喷啊。
代码如下:
/******************************************
*程序名称: 语音合成模块之公交车报站
*注意事项: P2.0~P2.7接独立按键K1~K8
*制 作 人: XXX
******************************************/
//#include//XFS5051.H里声明了,不用重复声明
#include"XFS5051.H"
bit OK = 0; //合成结束标志
uchar code YY_Data= //站名(高兴怎么改怎么改)
{
"北京站",\
"重庆站",\
"上海站",\
"四川站",\
"云南站",\
"哈尔滨站",\
"山西站",\
"海南站"
};
void main(void)
{
uchar KEY_data = 0;
uint i=0;
UART_Init(); //串口初始化
//Fa_Yin(1);
while(1)
{
KEY_data = KeyScan();
if(KEY_data)
{
//YS_XFS5051("各位乘客们机我奇偶积极 "); //可以自己改//
YS_XFS5051("各位朋友");
for(i=0; !OK && i<1000; i++)//等待合成完毕(10秒后跳出,防止程序死在这里)
Delay_ms(10); //延时10ms检测一次
OK=0; //成功合成标志位_清零
YS_XFS5051(YY_Data);//播放对应的站点
for(i=0; !OK && i<1000; i++)
Delay_ms(10);
OK=0;
YS_XFS5051("到了,请依次从后门下车");//可以自己改//
for(i=0; !OK && i<1000; i++)
Delay_ms(10);
OK=0;
}
}
}
void UARTInterrupt(void) interrupt 4
{
uchar CH=0;
if(RI)
{
RI = 0;
CH = SBUF;
//----------------------------//
if(CH == 0X4F)//0X4F芯片空闲
{
OK=1;
CH = 0X00;
}
else //0X41成功接收
OK=0;
} //END OF if(RI)
}
/*********************************************
在主函数中调用该初始化即可!
Fa_Yin(0); //中英文女声1(默认)
Fa_Yin(1); //中英文男声1
Fa_Yin(2); //中英文男声2
Fa_Yin(3); //中英文女声2
Fa_Yin(4); //唐老鸭
Fa_Yin(5); //中英文女童声
*********************************************/
#include"XFS5051.H"
void UART_Init() //串口初始化
{
TMOD = 0x20; //定时&计数器T1,工作方式2(串口)
SCON = 0x50; //0X50:允许接收;0X40:不允许
TH1 = 0xFD; //11.0592MHZ下,波特率=9600
TL1 = 0xFD;
PCON = 0x00; //波特率不加倍
EA = 1; //开总中断
ES = 1; //开串口允许
TR1 = 1; //开启串口
}
void Byte(uchar dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void Byte_S(uchar *cn) //
{
while ( *cn != '\0') //在C语言中字符串结束以‘\0’结尾
{
Byte(*cn);
cn ++; //指针+1:进入下一个
} //while结束.
}
void YS_XFS5051(uchar *CH)
{
uchar i=0;
Byte(0XFD); //帧头
Byte(0X00); //Byte((strlen(CH)+2)/256);//H
Byte( strlen(CH) + 2 ); //Byte((strlen(CH)+2)%256);//L
Byte(0X01); //构造命令字:合成播放命令
Byte(0X01); //文本编码格式:GBK
Byte_S(CH); //发送数据部分
}
void Delay_ms(unsigned int c) //延时(__)x1毫秒,误差 ?us
{
unsigned char a,b;
for(;c>0;c--)
for(b=35;b>0;b--)
for(a=13;a>0;a--);
}
uchar KeyScan(void)//键扫描
{
uchar Key_dat = 0;
KEY = 0xFF; //置位键端口以读取键值
if(KEY != 0xFF) //如果有键按下
{
Delay_ms(10); //消抖
if(KEY != 0xFF) //确认按下
{
switch(KEY)
{
case 0x7F: Key_dat=1; break;
case 0xBF: Key_dat=2; break;
case 0xDF: Key_dat=3; break;
case 0xEF: Key_dat=4; break;
case 0xF7: Key_dat=5; break;
case 0xFB: Key_dat=6; break;
case 0xFD: Key_dat=7; break;
case 0xFE: Key_dat=8; break;
default: Key_dat=0; break;
}
}
}
while(KEY != 0xFF); //等待按键抬起
return(Key_dat);
}
后续继续更新。