日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WIN5语音ic注意事项

發布時間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WIN5语音ic注意事项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.最好不要使用busy腳進行檢測,比較坑。只要播放了不存在的語音段,那么那個busy腳一直都是忙狀態,斷電后重啟都沒用。

還不如不用。


主要代碼如下:

#define SINGLE_LINE_MODE 1


#define WIN5_DATA_IO PIO22
#define WIN5_BUSY_IO PIO27














#ifdef SINGLE_LINE_MODE
void DoorWin5IoInit(void)//io初始化
{
DRV_PinMux_SigSet((1L << WIN5_DATA_IO), PIN_GPIO);
DRV_Gpio_DirSet((1L << WIN5_DATA_IO), PIO_OUTPUT);
DRV_Gpio_PullSet((1L << WIN5_DATA_IO), PULL_UP);
DRV_Gpio_ValSet((1L << WIN5_DATA_IO), PIO_HIGH);


DRV_PinMux_SigSet((1L << WIN5_BUSY_IO), PIN_GPIO);
DRV_Gpio_DirSet((1L << WIN5_BUSY_IO), PIO_INPUT);
//DRV_Gpio_PullSet((1L << WIN5_BUSY_IO), PULL_UP);
DRV_Gpio_PullSet((1L << WIN5_BUSY_IO), PULL_DOWN);
}






void DoorWin5IoHigh(void)//輸出高電平
{
DRV_Gpio_ValSet((1L << WIN5_DATA_IO), PIO_HIGH);
}






void DoorWin5IoLow(void)//輸出低電平
{
DRV_Gpio_ValSet((1L << WIN5_DATA_IO), PIO_LOW);
}






static void DoorWin5PulseWidthLow(void)//代表輸出0
{
DoorWin5IoHigh();
DoorUnit1UsDelay(400);
DoorWin5IoLow();
DoorUnit1UsDelay(1200);
}






static void DoorWin5PulseWidthHigh(void)//代表輸出1
{
DoorWin5IoHigh();
DoorUnit1UsDelay(1200);
DoorWin5IoLow();
DoorUnit1UsDelay(400);
}








static void DoorWin5SendStart(void)
{
DoorWin5IoHigh();
DoorWin5IoLow();
DoorUnit1UsDelay(5000);
}






static void DoorWin5SendStop(void)
{
DoorWin5IoHigh();
}
#else
void DoorWin5IoInit(void)//io初始化
{


}








voidDoorWin5ClkHigh(void)//輸出高電平
{


}






void DoorWin5ClkLow(void)//輸出低電平
{


}






voidDoorWin5DataHigh(void)//輸出高電平
{


}






void DoorWin5DataLow(void)//輸出低電平
{


}






static void DoorWin5PulseWidthLow(void)//代表輸出0
{
DoorWin5ClkLow();
DoorWin5DataLow();
DoorUnit1UsDelay(300);
DoorWin5ClkHigh();
DoorUnit1UsDelay(300);
}






static void DoorWin5PulseWidthHigh(void)//代表輸出1
{
DoorWin5ClkLow();
DoorWin5DataHigh();
DoorUnit1UsDelay(300);
DoorWin5ClkHigh();
DoorUnit1UsDelay(300);
}






static void DoorWin5SendStart(void)
{
DoorWin5ClkLow();
DoorUnit1UsDelay(5000);
}






static void DoorWin5SendStop(void)
{
DoorWin5ClkHigh();
}
#endif








static U8 DoorWin5IsBusy(void)//檢查語音芯片是否忙
{
U8 ioValue;
ioValue = DRV_Gpio_PinValGet(WIN5_BUSY_IO);
//printf("ioValue:%d\n", ioValue);
return ioValue;
}








static void DoorWin5WaitReady(void)//忙等待
{
//while(DoorWin5IsBusy() == 0);
}








static void DoorWin5SendOneByte(U8 win5Data)
{
U8 i;
printf("DoorWin5SendOneByte\n");
DoorWin5WaitReady();
DoorWin5SendStart();
for(i=0; i<8; i++)
{
if(win5Data&0x01)
{
DoorWin5PulseWidthHigh();
}
else
{
DoorWin5PulseWidthLow();
}
win5Data >>= 1;
}
DoorWin5SendStop();
}








void DoorWin5SetVolume(U8 volume)//設置音量大小
{
if(volume > 0x0F)
{
return;
}
DoorWin5SendOneByte(0xE0+volume);
}








void DoorPlayOneSection(U8 recordIndex)//播放某段語音
{
if(recordIndex > 0xCF)
{
return;
}
DoorWin5SendOneByte(recordIndex);
printf("DoorPlayOneSection ok:%02x\n", recordIndex);
}








static void DoorPlayCurrentRepeat(void)//循環播放當前語音
{
DoorWin5SendOneByte(0xF2);
}








static void DoorPlayStop(void)//停止播放
{
DoorWin5SendOneByte(0xFE);
}








static void DoorInsertSilentTime(U8 unit10Ms)//插入靜止時間
{
DoorWin5SendOneByte(0xF8);
DoorWin5SendOneByte(unit10Ms);
}






static void DoorPlayContinue(U8 num, U8 *section)//連續播放
{
U8 i;
for(i=0; i<num; i++)
{
DoorWin5SendOneByte(0xF3);
DoorWin5SendOneByte(section[i]);
}
}








#if 1
void Win5VoiceTest(void)
{
U8 i;
printf("hello0...\n");
DoorWin5IoInit();
//DoorTimerDelayUnitMs(100);
DoorWin5SetVolume(0x0F);
begin:


for(i=0; i<0xCF; i++)
//for(i=0; i<0x3F; i++)
{
printf("hello...\n");
DoorPlayOneSection(i);
printf("hello1...\n");
DoorTimerDelayUnitMs(2000);
printf("hello2...\n");
DoorTimerDelayUnitMs(2000);
}




/*
printf("hello111...\n");
DoorWin5IoHigh();
DoorTimerDelayUnitMs(2000);
printf("hello222...\n");
DoorWin5IoLow();
DoorTimerDelayUnitMs(2000);
*/




goto begin;
}
#endif

總結

以上是生活随笔為你收集整理的WIN5语音ic注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。