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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1831|回復: 2
收起左側

51單片機控制SYN6288語音播報程序

[復制鏈接]
ID:1055976 發表于 2024-4-29 15:01 | 顯示全部樓層 |閱讀模式
資料
SYN6288模塊原理圖
語音合成命令
接線
如何接線
實現原理
程序代碼
main.c
syn6288.c
uart.c
delay.c
基于 51單片機的其他項目
尾聲
資料
我用的是綠深電子技術的模塊,資料也挺齊全的。也有相關例程。


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

接線
如何接線
接線其實很簡單。

51單片機        SYN6288語音合成
TX        RX
VCC        VCC
GND        GND
實現原理
51單片機 串口接收數據,根據不同的數據 通過串口的形式發送給 SYN6288,從而控制SYN6288語音播報。

程序代碼
我用的是STC89C52

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

  5. /**************芯片設置命令*********************/
  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}; //恢復合成
  9. unsigned char SYN_ChackCom[] = {0XFD, 0X00, 0X02, 0X21, 0XDE}; //狀態查詢
  10. unsigned char SYN_PowerDownCom[] = {0XFD, 0X00, 0X02, 0X88, 0X77}; //進入POWER DOWN 狀態命令

  11. unsigned char receive_ok = 0;  //接收標志位
  12. unsigned char command;                 //接收串口來的數據

  13. //串口1初始化
  14. void UART1_Init(void)
  15. {
  16.         SCON = 0x50;                //8位數據,可變波特率
  17.         TMOD |= 0x20;                //設定定時器1為8位自動重裝方式
  18.         TL1 = 0xFD;                //設定定時初值
  19.         TH1 = 0xFD;                //設定定時器重裝值
  20.         ET1 = 0;                //禁止定時器1中斷
  21.         TR1 = 1;                //啟動定時器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.                 //其他不常用功能請參考數據手冊

  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  喇叭說 這個是干垃圾
  51.                         receive_ok = 0;                //禁止接收串口數據
  52.                         SYN_FrameInfo(0, "[v3][t5]這個是干垃圾");
  53.                         delay(2000);
  54.                         command = 0;
  55.                         receive_ok = 1;                 //允許接收串口數據
  56.                         break;
  57.                         default :
  58.                         receive_ok = 1;
  59.                         break;
  60.                  }               
  61.                 //暫停合成,此時沒有用到,用于展示函數用法
  62.                 //YS_SYN_Set(SYN_SuspendCom);
  63.         }

  64. }


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

  75. }
復制代碼


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

  5. /**************芯片設置命令*********************/
  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.         /****************需要發送的文本**********************************/
  16.         unsigned char  Frame_Info[50];
  17.         unsigned char  HZ_Length;
  18.         unsigned char  ecc  = 0;                          //定義校驗字節
  19.         unsigned int i = 0;
  20.         HZ_Length = strlen((char*)HZdata);                         //需要發送文本的長度

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

  27.         /*******************校驗碼計算***************************************/
  28.         for(i = 0; i < 5; i++)                                   //依次發送構造好的5個幀頭字節
  29.         {
  30.                 ecc = ecc ^ (Frame_Info[i]);                //對發送的字節進行異或校驗
  31.         }

  32.         for(i = 0; i < HZ_Length; i++)                   //依次發送待合成的文本數據
  33.         {
  34.                 ecc = ecc ^ (HZdata[i]);                                 //對發送的字節進行異或校驗
  35.         }
  36.         /*******************發送幀信息***************************************/
  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. /*串口發送一字節數據*/
  45. void UART1_SendByte(unsigned char DAT)
  46. {
  47.         SBUF = DAT;
  48.         while(TI == 0);
  49.         TI=0;
  50. }

  51. /*串口發送字符串數據*/
  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. }
復制代碼


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

  3. //軟件延時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. //軟件延時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. }
復制代碼

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

繼續加油
回復

使用道具 舉報

ID:301191 發表于 2024-5-5 15:08 | 顯示全部樓層
頂一下
回復

使用道具 舉報

ID:1085441 發表于 2024-5-5 17:41 | 顯示全部樓層
6288停產了吧?現在是6658,功能更強一些
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品在线视频 | 91精品国产成人www | 青青草国产成人av片免费 | 亚洲激情视频在线观看 | 91丨九色丨蝌蚪丨丝袜 | 亚洲图片一区二区 | www.爱爱| 六月丁香激情 | 日韩一区二区三区在线 | 激情综合五月天 | 日韩免费在线观看视频 | 国产日韩一区 | 天天爽夜夜爽夜夜爽精品视频 | 黄色片网站在线观看 | 精品视频免费在线观看 | 91看片淫黄大片 | 亚洲精品视频在线播放 | 最新国产精品 | 国产精品第二页 | 国产成人毛片 | 亚洲人在线 | 亚洲高清在线视频 | aaaaaa毛片| 国产三级在线看 | 亚洲国产三级 | 久久精品国产精品 | 亚洲欧美中文字幕 | 日韩在线视频播放 | 日韩精品在线免费观看 | 国产九九精品 | 黄色毛毛片 | 视频在线一区 | 美女综合网 | 韩日一区二区 | 久久九 | 在线观看欧美日韩视频 | 日韩一区二区三区在线 | 欧美一级色 | 日韩精品在线观看视频 | 成人免费看片98欧美 | 午夜国产福利 |