freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于單片機(jī)的sd卡錄音筆設(shè)計(jì)與實(shí)現(xiàn)_畢業(yè)設(shè)計(jì)論文(編輯修改稿)

2025-04-03 10:23 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 池即 28 可工作 ); LM386 輸出功率 100mW 以下 , SPY0030 約 700mW。圖 為音頻輸出電路圖。 圖 音頻輸出電路圖 SD 卡模組電路 在本系統(tǒng)中, SPCE061A 通過 SPI 總線實(shí)現(xiàn)對(duì) SD 卡設(shè)備的訪問。 SD 卡模組同時(shí)提供卡插入檢測(cè)和寫保護(hù)檢測(cè)接口。圖 為 SD 卡模組電路圖。 29 圖 SD 卡模組電路圖 30 4 系統(tǒng)軟件設(shè)計(jì) 主程序設(shè)計(jì) 主程序 采用的是匯編語(yǔ)言和 C 語(yǔ)言混合編程 。主程序 流程圖 如 圖 。 31 圖 主程序流程圖 主程序完成系統(tǒng)初始化后檢測(cè) SD 卡是否插入以及是否有寫保護(hù),并有相應(yīng)的語(yǔ)音提示,告知用 戶當(dāng)前的系統(tǒng)狀態(tài)。如果 SD 卡正確插入,則系統(tǒng)根據(jù)用戶的不同按 系統(tǒng)初始化 檢測(cè) SD 卡是否插入? 否 檢查 SD 卡是否寫保護(hù)? 置寫保護(hù)標(biāo)志 播放 “SD 卡寫保護(hù) ” 是 否 初始化 SD 卡 按鍵處理 系統(tǒng)狀態(tài)處理 是 播放 “ 注意 SD 卡沒有插入 ” 檢測(cè) SD 卡是否插入? 否 是 播放 “ 就緒 ” 語(yǔ)音 提示 程序 開始 32 鍵進(jìn)行錄 /放音控制。同時(shí),在循環(huán)中對(duì)系統(tǒng)當(dāng)前的狀態(tài)進(jìn)行檢測(cè),控制系統(tǒng)在錄制語(yǔ)音時(shí)不至于超出存儲(chǔ)器容量限制,或控制系統(tǒng)在放音時(shí)播放至文件尾部自動(dòng)停止播放。 部分程序如下: 33 按鍵處理程序流程 按鍵處理程序中 , 當(dāng)檢測(cè)到有 SD 卡寫保護(hù) 時(shí),會(huì)播放 “ 卡有寫保護(hù) ” 的提示音,對(duì)按鍵不做處理。按鍵處理流程圖如圖 。 SACM_DVR1600_Initial()。 // 語(yǔ)音初始化 if(0 == SD_ChkCard()) // 檢測(cè)卡是否插入 PlaySnd(VOICE_ATTENTION, DAC1 + DAC2)。 PlaySnd(VOICE_SDCARDNOTINSERT, DAC1 + DAC2)。 while(0 == SD_ChkCard())。 // 等待卡插入 if(1 == SD_ChkCardWP()) // 檢測(cè)卡是否有寫保護(hù) WriteProtect = 1。 else FS_Init()。 // 沒有寫保護(hù),執(zhí)行初始化操作 PlaySnd(VOICE_READY, DAC1 + DAC2)。 // 播放 就緒 // while(1) KeyProcess()。 // 按鍵處理 StatusProcess()。 // 系統(tǒng)狀態(tài)處理 SACM_DVR1600_ServiceLoop()。 // 錄 /放音服務(wù) 34 圖 按鍵處理流程圖 部分程序如下 : 當(dāng)按下錄音鍵時(shí),若為短按鍵且 SD 卡未滿,提示錄音開始并置錄音標(biāo)志,開始錄音?!颁浺簟卑存I處理程初始化 判斷是否有寫保護(hù)標(biāo)志 ? 否 判斷按鍵 Key3 錄音鍵 是 Key2 上一曲 鍵 Key1 下一曲 鍵 返回 開始 Key = KeyScan_GetKey(amp。KeyType)。 if(1 == WriteProtect) // 卡有寫保護(hù),拒絕按鍵操作 if((C_SReleaseKeyState == KeyType) || (C_LReleaseKeyState == KeyType)) return。 switch(Key) 35 序的流程圖如圖 所示。圖 錄音鍵流程圖 部分程序如下 : 正在播放? 短按鍵? 是 是 停止播放,關(guān)閉讀取 SD 卡 系統(tǒng)狀態(tài)置空閑 SD 卡已 滿 ? 否 是 否 系統(tǒng)空閑? 否 啟動(dòng)寫入 SD 卡,開始錄音 系統(tǒng)狀態(tài)置錄音 否 是 正在錄音? 結(jié)束錄音,錄音收尾 是 否 開始 返回 36 case C_Record: // Record if(C_SReleaseKeyState == KeyType) // 短按鍵,錄 /放音控制 if(PLAY == Status) SACM_DVR1600_Stop()。 // 如果正在放音,則先停止播放 FS_CloseOpenFile()。 Status = IDLE。 if(IDLE == Status) if((g_FileNum = FS_MAX_FILENUM) || (FS_GetUnusedSecNum() = 0)) // 文件已滿,退出 PlaySnd(VOICE_DANG, DAC1 + DAC2)。 Status = RECORD。 else if(RECORD == Status) SACM_DVR1600_Stop()。 while(RECORD == Status) // 等待完成錄音收尾工作 SACM_DVR1600_ServiceLoop()。 PlaySnd(VOICE_OVER, DAC1 + DAC2)。 37 當(dāng)按下上一曲鍵,短按鍵(小于一秒)播放上一曲,長(zhǎng)按鍵清除 SD 卡上所有錄音。 “ 上一曲 ” 按鍵處理程序的流程圖 如 圖 。 38 圖 上一曲鍵流程圖 部分程序如下 : 正在錄音? 正在播放? 是 判斷是否有文件 ? 結(jié)束放音 是 否 短按鍵? 否 否 是 長(zhǎng)按鍵? 是 清除 SD 卡內(nèi)所有文件 系統(tǒng)狀態(tài)置空閑 讀取語(yǔ)音段,啟動(dòng)聲音播放上一曲 系統(tǒng)狀態(tài)置播放 否 是 否 開始 返回 if(PLAY == Status) // 如果正在放音,則先停止播放 39 當(dāng)按下下一曲鍵,短按鍵(小于一秒)播放下一曲,長(zhǎng)按鍵停止放音。 “ 下一曲 ” 按鍵處理程序的流程圖如圖 。 SACM_DVR1600_Stop()。 FS_CloseOpenFile()。 else if(RECORD == Status) // 如果正在錄音則不處理 if(C_LReleaseKeyState == KeyType)//長(zhǎng)按鍵,擦除所有語(yǔ)音段 FS_Init()。 Status = IDLE。 else if(C_SReleaseKeyState == KeyType)// 短按鍵播放上一曲 40 圖 下一曲鍵流程圖 部分程序如下 : 正在錄音? 當(dāng)前有錄音片段? 是 是 停止播放 正在播放? 否 否 短按鍵? 否 長(zhǎng)按鍵? 否 系統(tǒng)狀態(tài)置空閑 是 啟動(dòng)聲音播放下一曲 系 統(tǒng)狀態(tài)置播放 否 是 是 開始 返回 41 系統(tǒng)狀態(tài)處理程序主要完成在錄音時(shí)判斷是否超出SD 卡容量限制,或者在放音時(shí)當(dāng)前語(yǔ)音是否播放完畢。系統(tǒng)狀態(tài)流程圖如圖 。 檢查 SD 卡是否已滿? 是否正在錄音? 播放是否結(jié)束? 停止錄音 系統(tǒng)狀態(tài)置空閑 是否正在播放? 停止讀取 系統(tǒng)狀態(tài)置空閑 是 否 否 否 是 是 是 否 返回 開始 case C_Next: // Play Next if((C_SReleaseKeyState != KeyType) amp。amp。 (C_LReleaseKeyState != KeyType)) if(g_FileNum 0) if(PLAY == Status) //如果正在放音,則先停止播放 SACM_DVR1600_Stop()。 FS_CloseOpenFile()。 else if(RECORD == Status) // 如果正在錄音則不處理 if(C_LReleaseKeyState == KeyType)// 長(zhǎng)按鍵,停止當(dāng)前播放 Status = IDLE。 else if(C_SReleaseKeyState == KeyType)// 短按鍵,播放下一曲 42 圖 系統(tǒng)狀態(tài)處理流程圖 部分程序如下: 按鍵掃描程序 系統(tǒng)使用 1024Hz 時(shí)基中斷對(duì) IOA 口低八位進(jìn)行掃描,并進(jìn)行去抖、長(zhǎng)短按鍵判斷等工作。 時(shí)基中斷中的按鍵掃描服務(wù)程序采用了狀態(tài)機(jī)的形式對(duì)按鍵狀態(tài)進(jìn)行判斷。使用變量 KeyScanState 記錄當(dāng)switch(Status) case RECORD: if(FS_GetUnusedSecNum() 1) // 檢測(cè)是否超出 SD 卡容量范圍 SACM_DVR1600_Stop()。 Status = IDLE。 case PLAY: if(FS_CheckFileEnd()) // 檢測(cè)當(dāng)前語(yǔ)音是否播放完畢 SACM_DVR1600_Stop()。 FS_CloseOpenFile()。 Status = IDLE。 43 前按鍵的掃描狀態(tài),并對(duì)掃描狀態(tài)進(jìn)行計(jì)時(shí),通過判斷計(jì)時(shí)變量 KeyCount 的值來判斷按鍵的類型 KeyState(短按鍵、長(zhǎng)按鍵等)。 通常狀況下,沒有鍵按下, KeyScanState 處于 First狀態(tài)。當(dāng)有鍵被按下后, KeyScanState 便進(jìn)入 Debounce去抖狀態(tài),此時(shí) KeyCount 開始每 1/1024 秒計(jì)時(shí)累加一次。當(dāng) KeyCount 超過去抖規(guī)定的時(shí)間后(通常為幾十毫秒),便進(jìn)入 Repeat 狀態(tài),這時(shí)候可以認(rèn)為一個(gè)短按鍵被按下( KeyState = SKey)。此時(shí)如果檢測(cè)到鍵抬 起,則進(jìn)入 ReleaseDebounce 狀態(tài),對(duì)按鍵抬起進(jìn)行去抖,去抖成功后則可以認(rèn)為形成了一個(gè)抬起的短按鍵( KeyState = SKeyRelease)。相反,如果在 Repeat 狀態(tài)下超過了一個(gè)長(zhǎng)按鍵規(guī)定的時(shí)間( 1 秒)后按鍵仍未抬起,則認(rèn)為一個(gè)長(zhǎng)按鍵被按下( KeyState = LKey),此時(shí)進(jìn)入 AfterLKey 狀態(tài),無需再進(jìn)行計(jì)時(shí)操作,只需等待按鍵抬起即可。當(dāng)按鍵抬起時(shí),則從 AfterLKey 狀態(tài) 44 進(jìn)入 ReleaseDebounce 狀態(tài),去抖后得到一個(gè)抬起的長(zhǎng)按鍵( KeyState = LKeyRelease)。 按鍵掃描程序提供如下 API 函數(shù)按鍵功能: void KeyScan_Init()。 功 能:按鍵掃描初始化。調(diào)用該函數(shù)將同時(shí)初始化按鍵掃描使用的 I/O 口。 unsigned int KeyScan_GetKey(unsigned int *KeyType)。 void DrvKeyInit(void) *P_KEY_Dir amp。= ~KEY_PORT_MASK。 *P_KEY_Attrib amp。= ~KEY_PORT_MASK。 if KEY_COM *P_KEY_Buffer amp。= ~KEY_PORT_MASK。 else *P_KEY_Buffer |= KEY_PORT_MASK。 endif 45 功 能:該函數(shù)將返回當(dāng)前按鍵的鍵值,并通過入口參數(shù)KeyType 返回該按鍵的類型。 語(yǔ)音錄 /放在 SD 卡上的實(shí)現(xiàn) 在語(yǔ)音錄 /放的過程中,存儲(chǔ) /讀取語(yǔ)音資源主要是調(diào)用 F_USER_DVR1600_WriteData和F_USER_DVR1600_GetData兩個(gè)函數(shù)實(shí)現(xiàn)的。通過自行定義這兩個(gè)函數(shù),即可將語(yǔ)音庫(kù)錄制的語(yǔ)音資料存儲(chǔ)至 SDunsigned int KeyScan_GetKey(unsigned int *KeyType) { unsigned int Key。 if(C_NullKey == ui_KeyState) Key = C_Null。 else Key = ui_KeyID。 *KeyType = ui_KeyState。 if(C_KeyStateFirst == ui_KeyScanState) { ui_KeyID = C_Null。 ui_KeyState = C_NullKey。 } return(Key)。 46 卡,或從 SD卡讀取語(yǔ)音資料給語(yǔ)音庫(kù)解碼播放。 F_USER_DVR1600_WriteData函數(shù)主要完成存儲(chǔ)錄音數(shù)據(jù)至用戶存儲(chǔ)器的作用。這里需要調(diào)用 “ 向語(yǔ)音文件寫入多個(gè) word數(shù)據(jù)的函數(shù) ”FS_Writing
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1