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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2755|回復: 0
打印 上一主題 下一主題
收起左側

SYN6288基于51單片機的(公交報站)程序

[復制鏈接]
跳轉到指定樓層
樓主
單片機源程序如下:
  1. #include <reg51.h>

  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. //***********************************************************************
  5. //語音合成相關引腳及參數
  6. //***********************************************************************
  7. sbit TTS_BUSY   =      P1^0; //檢測SYN6288模塊工作狀態

  8. #define HEAD_LEN       5  //數據包頭的長度
  9. #define LEN_OFFSET    2  //長度字節的偏移量(本例中長度不超過255字節,因此只使用1字節長度)
  10. #define BKM_OFFSET    4  //背景音樂命令偏移
  11. #define BKM_MAX      15         //背景音樂數量

  12. //數據包頭(0xFD + 2字節長度 + 1字節命令字 + 1字節命令參數)
  13. code uchar head[HEAD_LEN] = {0xfd,0x00,0x00,0x01,0x00};
  14. uchar nBkm = 0x00;

  15. //***********************************************************************
  16. //人機接口(僅作演示,端口和功能請自行修改)
  17. //***********************************************************************
  18. #define KEY         P0      //定義用來檢測按鍵的端口
  19. #define LED         P2      //用于顯示

  20. //***********************************************************************
  21. //語音內容
  22. //***********************************************************************
  23. //以下內容僅供演示,請自行修改
  24. code char welcome[] = {"[m10]歡迎使用追夢實驗室公交車語音報站系統,本系統采用SYN6288語音合成模塊設計實現"};

  25. #define MSG_NUM     13   //消息數,根據需要自行修改
  26. code uchar * msg[MSG_NUM] = {      //以下內容請自行修改
  27.     {"乘客您好,歡迎乘坐"},
  28.         {"[n1]309[n0]路"},      //車次,采用單個數字變讀(1讀作幺)模式,讀后恢復正常模式
  29.     {"公交車,本路車由"},
  30.         {"開往"},
  31.         {",前門上車,后門下車,本車無人售票,請自備零錢"},
  32.         {"車輛起動,請站穩扶好"},
  33.         {"車輛轉彎,請注意安全"},
  34.         {"前方到站"},
  35.         {"下車的乘客后門請"},
  36.         {"車站到了,請您帶好隨身物品,從后門下車,謝謝您的乘坐,再見"},
  37.         {"始發站"},
  38.         {"終點站"},
  39.         {"soundk"}
  40. };

  41. #define STA_NUM      7    //車站數,根據需要自行修改
  42. code uchar * sta[STA_NUM] = {
  43.         {"東城區"},
  44.         {"百貨商場"},
  45.         {"文化宮"},
  46.         {"眼科"},
  47.         {"廣場"},
  48.         {"學院"},
  49.         {"地方"}
  50. };

  51. //***********************************************************************
  52. //全局變量
  53. //***********************************************************************
  54. uchar nSta            = 0;            //當前站點
  55. uchar nFirstSta       = 0;            //始發站
  56. uchar nLastSta        = STA_NUM - 1;  //終點站

  57. //***********************************************************************
  58. //功能函數
  59. //***********************************************************************
  60. //延時
  61. void Delay(uint n)
  62. {
  63.     uchar i=112;

  64.         while(n--)
  65.                 while(i--);
  66. }

  67. //串口初始化
  68. void UART_InitBaud(void)
  69. {
  70.         SCON=0xD8;  //晶振為11.059MHZ時,設定串口波特率為9600bit/s,方式3  
  71.         TMOD=0x20;
  72.         PCON=0x00;
  73.         TH1=0xFD;
  74.         TR1=1;        
  75. }

  76. //串口發送數據
  77. void SendChar(uchar n)
  78. {
  79.         SBUF = n;   
  80.         while(TI==0);  //發送數據   
  81.         TI=0;        
  82. }

  83. //背景音樂(參數為0表示關閉背景音樂)
  84. void BkMusic(uchar num)
  85. {
  86.         num %= BKM_MAX + 1;
  87.         nBkm = num;
  88. }

  89. //發聲程序
  90. void Speech(uchar *buf)
  91. {
  92.         uchar i = 0;          //循環計數變量
  93.         uchar xor = 0x00;     //校驗碼初始化
  94.         uchar ch = 0x00;
  95.     uchar len = 0x00;

  96.     while(buf[len++]);

  97.         //發送數據包頭(0xFD + 2字節長度 + 1字節命令字 + 1字節命令參數)
  98.         for(i = 0; i < HEAD_LEN; i++)
  99.         {
  100.                 if(i == BKM_OFFSET)
  101.                         ch = nBkm << 3; //寫入背景音樂
  102.                 else if(i == LEN_OFFSET)
  103.                         ch = len + 3;
  104.                 else
  105.                         ch = head[i];

  106.                 xor ^= ch;
  107.                 SendChar(ch);
  108.                 Delay(1);
  109.            }

  110.         //發送文字內容
  111.         for(i = 0; i < len; i++)
  112.         {
  113.                 xor ^= buf[i];
  114.                 SendChar(buf[i]);
  115.                 Delay(1);
  116.         }

  117.         SendChar(xor);       //發送校驗位

  118.         Delay(10);
  119.         while(TTS_BUSY);           //等待語音結束
  120.         Delay(10);
  121. }

  122. //鍵掃描
  123. void keyScan(void)
  124. {
  125.     uchar k;

  126.     KEY = 0xff;            //置位鍵端口以讀取鍵值

  127.   //演示所用按鍵定義如下:
  128.     //bit0   上行始發
  129.     //bit1   上車提示
  130.     //bit2   起動提示
  131.     //bit3   轉彎提示
  132.     //bit4   下行一站
  133.     //bit5   上行一站
  134.     //bit6   下車提示
  135.     //bit7   下行始發

  136.          //Speech(msg[n].text);   用于朗讀第n條提示信息
  137.         //Speech(sta[n].text);   用于朗讀第n個車站名

  138.         if(KEY != 0xff)        //如果有鍵按下
  139.         {
  140.                 k = KEY;           //取鍵值
  141.                 Delay(1);          //消抖

  142.                 if(KEY == k)       //確認按下
  143.                 {
  144.                         LED = k;

  145.                         Speech(msg[12]);      //提示音

  146.                         switch(k)
  147.                         {
  148.                         case 0xfe:  //bit0  上行始發站
  149.                                 nSta = 0;
  150.                                 Speech(msg[10]);      //始發站
  151.                                 Speech(sta[nSta]);  //站名
  152.                                 break;
  153.                         case 0xfd:  //bit1   上車提示
  154.                                 Speech(msg[0]);
  155.                                 Speech(msg[1]);
  156.                                 Speech(msg[2]);
  157.                                 Speech(sta[nFirstSta]);
  158.                                 Speech(msg[3]);
  159.                              Speech(sta[nLastSta]);
  160.                                 Speech(msg[4]);
  161.                                 break;
  162.                         case 0xfb:  //bit2   起動提示
  163.                                 Speech(msg[5]);                                          
  164.                                 break;
  165.                         case 0xf7:  //bit3   轉彎提示
  166.                                 Speech(msg[6]);
  167.                                 break;
  168.                         case 0xef:  //bit4   下行一站
  169.                                 nFirstSta = 0;
  170.                                 nLastSta  = STA_NUM - 1;

  171.                                 if(nSta < STA_NUM-1) //下行一站
  172.                                 {
  173.                                         nSta++;
  174.                                 }

  175.                                 Speech(msg[7]); //前方到站

  176.                                 if(nSta == STA_NUM - 1)  //是否終點站
  177.                                 {
  178.                                         Speech(msg[11]);
  179.                                 }

  180.                                 Speech(sta[nSta]); //站名
  181.                                 Speech(msg[8]); //到站提示
  182.                                 break;

  183.                         case 0xdf:  //bit5   上行一站
  184.                                 nFirstSta = STA_NUM - 1;
  185.                                 nLastSta  = 0;

  186.                                 if(nSta > 0) //上行一站
  187.                                 {
  188.                                         nSta--;
  189.                                 }

  190.                                 Speech(msg[7]); //前方到站

  191.                                 if(nSta == 0)  //是否終點站
  192.                                 {
  193.                                         Speech(msg[11]);
  194.                                 }

  195.                                 Speech(sta[nSta]); //站名
  196.                                 Speech(msg[8]); //到站提示
  197.                                 break;

  198.                         case 0xbf:  //bit6   下車提示
  199.                                 Speech(sta[nSta]); //站名
  200.                                 Speech(msg[9]); //到站提示

  201.                                 break;

  202.                         case 0x7f:  //bit7   下行始發
  203.                                 nSta = STA_NUM - 1;
  204.                                 Speech(msg[10]);      //始發站
  205.                                 Speech(sta[nSta]);  //站名
  206.                                 break;
  207.                         default:
  208. ……………………

  209. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

Keil代碼下載: C51(公交報站).7z (9.73 KB, 下載次數: 23)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产欧美一区二区 | 国产精品日韩在线观看一区二区 | 亚洲 中文 欧美 日韩 在线观看 | 欧美成人激情视频 | аⅴ资源新版在线天堂 | 久久一区二区三区四区五区 | 天天搞夜夜操 | 成人一区二区三区在线观看 | 欧美不卡 | 999久久久国产精品 欧美成人h版在线观看 | 欧美一级欧美一级在线播放 | 亚洲免费观看视频网站 | 国产精品久久久久久久模特 | 综合久久网 | 久久久久久久一区二区三区 | 亚洲欧美激情精品一区二区 | 日韩精品一区在线 | 国产三级大片 | 日韩成人在线观看 | 中国一级特黄毛片大片 | 久久亚洲高清 | 黄色一级大片在线免费看产 | 777zyz色资源站在线观看 | 亚洲成年在线 | 国产精品区二区三区日本 | 成人免费一区二区三区视频网站 | 久久精品在线免费视频 | 亚洲综合中文字幕在线观看 | 日韩免费一二三区 | av免费成人| 天天操夜夜操 | 国产成人99久久亚洲综合精品 | www.成人免费视频 | av男人天堂影院 | 自拍偷拍第一页 | 香蕉一区二区 | 国产成人精品一区二区三区网站观看 | 亚洲在线| 日韩成人在线观看 | 国产在线对白 | 亚洲一区不卡在线 |