欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
SYN6288基于51單片機的(公交報站)程序
[打印本頁]
作者:
lyh一點點
時間:
2021-9-24 08:55
標題:
SYN6288基于51單片機的(公交報站)程序
單片機源程序如下:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
//***********************************************************************
//語音合成相關引腳及參數
//***********************************************************************
sbit TTS_BUSY = P1^0; //檢測SYN6288模塊工作狀態
#define HEAD_LEN 5 //數據包頭的長度
#define LEN_OFFSET 2 //長度字節的偏移量(本例中長度不超過255字節,因此只使用1字節長度)
#define BKM_OFFSET 4 //背景音樂命令偏移
#define BKM_MAX 15 //背景音樂數量
//數據包頭(0xFD + 2字節長度 + 1字節命令字 + 1字節命令參數)
code uchar head[HEAD_LEN] = {0xfd,0x00,0x00,0x01,0x00};
uchar nBkm = 0x00;
//***********************************************************************
//人機接口(僅作演示,端口和功能請自行修改)
//***********************************************************************
#define KEY P0 //定義用來檢測按鍵的端口
#define LED P2 //用于顯示
//***********************************************************************
//語音內容
//***********************************************************************
//以下內容僅供演示,請自行修改
code char welcome[] = {"[m10]歡迎使用追夢實驗室公交車語音報站系統,本系統采用SYN6288語音合成模塊設計實現"};
#define MSG_NUM 13 //消息數,根據需要自行修改
code uchar * msg[MSG_NUM] = { //以下內容請自行修改
{"乘客您好,歡迎乘坐"},
{"[n1]309[n0]路"}, //車次,采用單個數字變讀(1讀作幺)模式,讀后恢復正常模式
{"公交車,本路車由"},
{"開往"},
{",前門上車,后門下車,本車無人售票,請自備零錢"},
{"車輛起動,請站穩扶好"},
{"車輛轉彎,請注意安全"},
{"前方到站"},
{"下車的乘客后門請"},
{"車站到了,請您帶好隨身物品,從后門下車,謝謝您的乘坐,再見"},
{"始發站"},
{"終點站"},
{"soundk"}
};
#define STA_NUM 7 //車站數,根據需要自行修改
code uchar * sta[STA_NUM] = {
{"東城區"},
{"百貨商場"},
{"文化宮"},
{"眼科"},
{"廣場"},
{"學院"},
{"地方"}
};
//***********************************************************************
//全局變量
//***********************************************************************
uchar nSta = 0; //當前站點
uchar nFirstSta = 0; //始發站
uchar nLastSta = STA_NUM - 1; //終點站
//***********************************************************************
//功能函數
//***********************************************************************
//延時
void Delay(uint n)
{
uchar i=112;
while(n--)
while(i--);
}
//串口初始化
void UART_InitBaud(void)
{
SCON=0xD8; //晶振為11.059MHZ時,設定串口波特率為9600bit/s,方式3
TMOD=0x20;
PCON=0x00;
TH1=0xFD;
TR1=1;
}
//串口發送數據
void SendChar(uchar n)
{
SBUF = n;
while(TI==0); //發送數據
TI=0;
}
//背景音樂(參數為0表示關閉背景音樂)
void BkMusic(uchar num)
{
num %= BKM_MAX + 1;
nBkm = num;
}
//發聲程序
void Speech(uchar *buf)
{
uchar i = 0; //循環計數變量
uchar xor = 0x00; //校驗碼初始化
uchar ch = 0x00;
uchar len = 0x00;
while(buf[len++]);
//發送數據包頭(0xFD + 2字節長度 + 1字節命令字 + 1字節命令參數)
for(i = 0; i < HEAD_LEN; i++)
{
if(i == BKM_OFFSET)
ch = nBkm << 3; //寫入背景音樂
else if(i == LEN_OFFSET)
ch = len + 3;
else
ch = head[i];
xor ^= ch;
SendChar(ch);
Delay(1);
}
//發送文字內容
for(i = 0; i < len; i++)
{
xor ^= buf[i];
SendChar(buf[i]);
Delay(1);
}
SendChar(xor); //發送校驗位
Delay(10);
while(TTS_BUSY); //等待語音結束
Delay(10);
}
//鍵掃描
void keyScan(void)
{
uchar k;
KEY = 0xff; //置位鍵端口以讀取鍵值
//演示所用按鍵定義如下:
//bit0 上行始發
//bit1 上車提示
//bit2 起動提示
//bit3 轉彎提示
//bit4 下行一站
//bit5 上行一站
//bit6 下車提示
//bit7 下行始發
//Speech(msg[n].text); 用于朗讀第n條提示信息
//Speech(sta[n].text); 用于朗讀第n個車站名
if(KEY != 0xff) //如果有鍵按下
{
k = KEY; //取鍵值
Delay(1); //消抖
if(KEY == k) //確認按下
{
LED = k;
Speech(msg[12]); //提示音
switch(k)
{
case 0xfe: //bit0 上行始發站
nSta = 0;
Speech(msg[10]); //始發站
Speech(sta[nSta]); //站名
break;
case 0xfd: //bit1 上車提示
Speech(msg[0]);
Speech(msg[1]);
Speech(msg[2]);
Speech(sta[nFirstSta]);
Speech(msg[3]);
Speech(sta[nLastSta]);
Speech(msg[4]);
break;
case 0xfb: //bit2 起動提示
Speech(msg[5]);
break;
case 0xf7: //bit3 轉彎提示
Speech(msg[6]);
break;
case 0xef: //bit4 下行一站
nFirstSta = 0;
nLastSta = STA_NUM - 1;
if(nSta < STA_NUM-1) //下行一站
{
nSta++;
}
Speech(msg[7]); //前方到站
if(nSta == STA_NUM - 1) //是否終點站
{
Speech(msg[11]);
}
Speech(sta[nSta]); //站名
Speech(msg[8]); //到站提示
break;
case 0xdf: //bit5 上行一站
nFirstSta = STA_NUM - 1;
nLastSta = 0;
if(nSta > 0) //上行一站
{
nSta--;
}
Speech(msg[7]); //前方到站
if(nSta == 0) //是否終點站
{
Speech(msg[11]);
}
Speech(sta[nSta]); //站名
Speech(msg[8]); //到站提示
break;
case 0xbf: //bit6 下車提示
Speech(sta[nSta]); //站名
Speech(msg[9]); //到站提示
break;
case 0x7f: //bit7 下行始發
nSta = STA_NUM - 1;
Speech(msg[10]); //始發站
Speech(sta[nSta]); //站名
break;
default:
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
51hei.png
(3.96 KB, 下載次數: 74)
下載附件
2021-9-24 16:26 上傳
Keil代碼下載:
C51(公交報站).7z
(9.73 KB, 下載次數: 23)
2021-9-24 16:25 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1