久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1778|回復(fù): 2
收起左側(cè)

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

[復(fù)制鏈接]
ID:1055976 發(fā)表于 2024-4-29 15:01 | 顯示全部樓層 |閱讀模式
資料
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位自動(dòng)重裝方式
  18.         TL1 = 0xFD;                //設(shè)定定時(shí)初值
  19.         TH1 = 0xFD;                //設(shè)定定時(shí)器重裝值
  20.         ET1 = 0;                //禁止定時(shí)器1中斷
  21.         TR1 = 1;                //啟動(dòng)定時(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.                 //其他不常用功能請(qǐng)參考數(shù)據(jù)手冊(cè)

  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]);                //對(duì)發(fā)送的字節(jié)進(jìn)行異或校驗(yàn)
  31.         }

  32.         for(i = 0; i < HZ_Length; i++)                   //依次發(fā)送待合成的文本數(shù)據(jù)
  33.         {
  34.                 ecc = ecc ^ (HZdata[i]);                                 //對(duì)發(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ù)制代碼

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

繼續(xù)加油
回復(fù)

使用道具 舉報(bào)

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ī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩和的一区二在线 | 欧美黄页 | 亚洲欧美综合网 | 亚洲一区视频 | 狠狠色综合久久婷婷 | 欧美精产国品一二三区 | 亚洲黄色在线 | 精品亚洲永久免费精品 | 国产成人精品一区二区 | 日韩亚洲一区二区 | 一区二区三区在线播放 | 国产精品极品美女在线观看免费 | 国产免费一区二区 | 美女高潮网站 | 国外成人免费视频 | 欧美日韩高清免费 | 精品影院 | 国产精品一区二区不卡 | 国产清纯白嫩初高生在线播放视频 | 日韩在线电影 | 国产精品成人一区二区三区夜夜夜 | 97国产精品视频人人做人人爱 | 一区二区三区在线免费观看 | 在线观看视频你懂得 | 国产黄色大片在线观看 | 国产高清一区二区 | 天堂一区二区三区四区 | 亚洲精品1区 | 亚洲精品久久久久久久久久久 | 久久久久无码国产精品一区 | 久久久亚洲综合 | 亚洲一区在线播放 | 欧美亚洲在线视频 | 精品视频网| 午夜视频网站 | 欧美在线国产精品 | 精品国产乱码久久久久久丨区2区 | 国产日韩精品一区二区 | 日韩精品一区中文字幕 | 97国产一区二区 | 国产精品久久久久久久粉嫩 |