找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1616|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)控制SYN6288語音播報(bào)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1055976 發(fā)表于 2024-4-29 15:01 | 只看該作者 回帖獎勵(lì) |倒序?yàn)g覽 |閱讀模式
資料
SYN6288模塊原理圖
語音合成命令
接線
如何接線
實(shí)現(xiàn)原理
程序代碼
main.c
syn6288.c
uart.c
delay.c
基于 51單片機(jī)的其他項(xiàng)目
尾聲
資料
我用的是綠深電子技術(shù)的模塊,資料也挺齊全的。也有相關(guān)例程。


SYN6288模塊原理圖
語音合成命令

接線
如何接線
接線其實(shí)很簡單。

51單片機(jī)        SYN6288語音合成
TX        RX
VCC        VCC
GND        GND
實(shí)現(xiàn)原理
51單片機(jī) 串口接收數(shù)據(jù),根據(jù)不同的數(shù)據(jù) 通過串口的形式發(fā)送給 SYN6288,從而控制SYN6288語音播報(bào)。

程序代碼
我用的是STC89C52

main.c
  1. #include <reg52.h>
  2. #include "syn6288.h"
  3. #include "delay.h"
  4. #include "uart.h"

  5. /**************芯片設(shè)置命令*********************/
  6. unsigned char SYN_StopCom[] = {0xFD, 0X00, 0X02, 0X02, 0XFD}; //停止合成
  7. unsigned char SYN_SuspendCom[] = {0XFD, 0X00, 0X02, 0X03, 0XFC}; //暫停合成
  8. unsigned char SYN_RecoverCom[] = {0XFD, 0X00, 0X02, 0X04, 0XFB}; //恢復(fù)合成
  9. unsigned char SYN_ChackCom[] = {0XFD, 0X00, 0X02, 0X21, 0XDE}; //狀態(tài)查詢
  10. unsigned char SYN_PowerDownCom[] = {0XFD, 0X00, 0X02, 0X88, 0X77}; //進(jìn)入POWER DOWN 狀態(tài)命令

  11. unsigned char receive_ok = 0;  //接收標(biāo)志位
  12. unsigned char command;                 //接收串口來的數(shù)據(jù)

  13. //串口1初始化
  14. void UART1_Init(void)
  15. {
  16.         SCON = 0x50;                //8位數(shù)據(jù),可變波特率
  17.         TMOD |= 0x20;                //設(shè)定定時(shí)器1為8位自動重裝方式
  18.         TL1 = 0xFD;                //設(shè)定定時(shí)初值
  19.         TH1 = 0xFD;                //設(shè)定定時(shí)器重裝值
  20.         ET1 = 0;                //禁止定時(shí)器1中斷
  21.         TR1 = 1;                //啟動定時(shí)器1
  22.         ES = 1;
  23.         EA = 1;
  24.         RI = 0;
  25.         TI = 0;
  26. }


  27. void  main(void)
  28. {
  29.         UART1_Init();
  30.         SYN_FrameInfo(0, "[v3][t5]大家好"); //喇叭說 你好
  31.         delay(2000);
  32.         receive_ok = 1;
  33.         while(1)
  34.         {
  35.                 //選擇背景音樂2。(0:無背景音樂  1-15:背景音樂可選)
  36.                 //m[0~16]:0背景音樂為靜音,16背景音樂音量最大
  37.                 //v[0~16]:0朗讀音量為靜音,16朗讀音量最大
  38.                 //t[0~5]:0朗讀語速最慢,5朗讀語速最快
  39.                 //其他不常用功能請參考數(shù)據(jù)手冊

  40.                 /*判斷指令*/
  41.                 switch(command)
  42.                 {
  43.                         case '1':           //如果是 1
  44.                         receive_ok = 0;
  45.                         SYN_FrameInfo(0, "[v3][t5]你好");  //喇叭說 你好
  46.                         delay(2000);
  47.                         command = 0;
  48.                         receive_ok = 1;
  49.                         break;
  50.                         case 'G':                          //如果你 G  喇叭說 這個(gè)是干垃圾
  51.                         receive_ok = 0;                //禁止接收串口數(shù)據(jù)
  52.                         SYN_FrameInfo(0, "[v3][t5]這個(gè)是干垃圾");
  53.                         delay(2000);
  54.                         command = 0;
  55.                         receive_ok = 1;                 //允許接收串口數(shù)據(jù)
  56.                         break;
  57.                         default :
  58.                         receive_ok = 1;
  59.                         break;
  60.                  }               
  61.                 //暫停合成,此時(shí)沒有用到,用于展示函數(shù)用法
  62.                 //YS_SYN_Set(SYN_SuspendCom);
  63.         }

  64. }


  65. //串口1中斷
  66. void Uart1_Isr() interrupt 4
  67. {
  68.         if(receive_ok == 1)        //如果可以接收數(shù)據(jù)了
  69.         {
  70.                 command = SBUF;        //接收數(shù)據(jù)
  71.                 while(!RI);
  72.                 RI=0;
  73.                 receive_ok = 0;      
  74.         }      

  75. }
復(fù)制代碼


syn6288.c
  1. #include <reg52.h>
  2. #include <string.h>
  3. #include "uart.h"
  4. #include "syn6288.h"

  5. /**************芯片設(shè)置命令*********************/
  6. /*外部聲明*/
  7. extern unsigned char SYN_StopCom[];
  8. extern unsigned char SYN_SuspendCom[];
  9. extern unsigned char SYN_RecoverCom[];
  10. extern unsigned char SYN_ChackCom[];
  11. extern unsigned char SYN_PowerDownCom[];


  12. //Music:  0:無背景音樂  1~15:選擇背景音樂
  13. void SYN_FrameInfo(unsigned char Music, unsigned char *HZdata)
  14. {
  15.         /****************需要發(fā)送的文本**********************************/
  16.         unsigned char  Frame_Info[50];
  17.         unsigned char  HZ_Length;
  18.         unsigned char  ecc  = 0;                          //定義校驗(yàn)字節(jié)
  19.         unsigned int i = 0;
  20.         HZ_Length = strlen((char*)HZdata);                         //需要發(fā)送文本的長度

  21.         /*****************幀固定配置信息**************************************/
  22.         Frame_Info[0] = 0xFD ;                         //構(gòu)造幀頭FD
  23.         Frame_Info[1] = 0x00 ;                         //構(gòu)造數(shù)據(jù)區(qū)長度的高字節(jié)
  24.         Frame_Info[2] = HZ_Length + 3;                 //構(gòu)造數(shù)據(jù)區(qū)長度的低字節(jié)
  25.         Frame_Info[3] = 0x01 ;                         //構(gòu)造命令字:合成播放命令
  26.         Frame_Info[4] = 0x01 | Music << 4 ; //構(gòu)造命令參數(shù):背景音樂設(shè)定

  27.         /*******************校驗(yàn)碼計(jì)算***************************************/
  28.         for(i = 0; i < 5; i++)                                   //依次發(fā)送構(gòu)造好的5個(gè)幀頭字節(jié)
  29.         {
  30.                 ecc = ecc ^ (Frame_Info[i]);                //對發(fā)送的字節(jié)進(jìn)行異或校驗(yàn)
  31.         }

  32.         for(i = 0; i < HZ_Length; i++)                   //依次發(fā)送待合成的文本數(shù)據(jù)
  33.         {
  34.                 ecc = ecc ^ (HZdata[i]);                                 //對發(fā)送的字節(jié)進(jìn)行異或校驗(yàn)
  35.         }
  36.         /*******************發(fā)送幀信息***************************************/
  37.         memcpy(&Frame_Info[5], HZdata, HZ_Length);
  38.         Frame_Info[5 + HZ_Length] = ecc;
  39.         UART1_SendString(Frame_Info, 5 + HZ_Length + 1);
  40. }



  41. uart.c
  42. #include <reg52.h>
  43. #include "uart.h"

  44. /*串口發(fā)送一字節(jié)數(shù)據(jù)*/
  45. void UART1_SendByte(unsigned char DAT)
  46. {
  47.         SBUF = DAT;
  48.         while(TI == 0);
  49.         TI=0;
  50. }

  51. /*串口發(fā)送字符串?dāng)?shù)據(jù)*/
  52. void UART1_SendString(unsigned char *DAT, unsigned char len)
  53. {
  54.         unsigned char i;
  55.         for(i = 0; i < len; i++)
  56.         {
  57.                 UART1_SendByte(*DAT++);
  58.         }
  59. }
復(fù)制代碼


delay.c
  1. #include <reg52.h>
  2. #include "delay.h"

  3. //軟件延時(shí)1ms
  4. void  delay(unsigned int uldata)
  5. {
  6.         unsigned int j  =  0;
  7.         unsigned int g  =  0;
  8.         for (j = 0; j < uldata; j++)
  9.                 for (g = 0; g < 110; g++);
  10. }
  11. #include <reg52.h>
  12. #include "delay.h"

  13. //軟件延時(shí)1ms
  14. void  delay(unsigned int uldata)
  15. {
  16.         unsigned int j  =  0;
  17.         unsigned int g  =  0;
  18.         for (j = 0; j < uldata; j++)
  19.                 for (g = 0; g < 110; g++);
  20. }
復(fù)制代碼

尾聲
如果覺得這篇文章對你有用。歡迎大家點(diǎn)贊、哈哈

繼續(xù)加油
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:301191 發(fā)表于 2024-5-5 15:08 | 只看該作者
頂一下
回復(fù)

使用道具 舉報(bào)

板凳
ID:1085441 發(fā)表于 2024-5-5 17:41 | 只看該作者
6288停產(chǎn)了吧?現(xiàn)在是6658,功能更強(qiáng)一些
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表