【增强版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); } 后续继续更新。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
sun5304 2017-11-16
这个创意挺好的,我来学习学习。感谢提供!
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子