www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 程序員小哈

學(xué)習(xí)目標(biāo)

  • 學(xué)習(xí)ISD1820語(yǔ)音芯片的使用方法

  • 學(xué)習(xí)STM32 GPIO的輸入輸出

  • 按鍵掃描功能實(shí)現(xiàn)

芯片特點(diǎn)

  1. 工作電壓3~5V;

  2. 單段錄放控制簡(jiǎn)單;

  3. 帶話筒放大直通功能——可用作喊話器模塊;

  4. 邊沿/電平觸發(fā)放音;

  5. 內(nèi)置8Ω喇叭驅(qū)動(dòng)放大電路,即可直接驅(qū)動(dòng)8歐0.5W小喇叭;

  6. 無(wú)需單片機(jī)參與即可實(shí)現(xiàn)錄放音功能;

  7. 取樣率和錄放音時(shí)間可以由外部振蕩電阻調(diào)節(jié)。外接電阻調(diào)整錄音時(shí)間,可以實(shí)現(xiàn)8~20秒語(yǔ)音錄放。錄入的時(shí)間越短音質(zhì)越好,錄入的時(shí)間越長(zhǎng)音質(zhì)越差;

振蕩電阻(ROSC): 此端接振蕩電阻至VSS,由振蕩電阻的阻值決定錄放音的時(shí)間。


推薦應(yīng)用電路

應(yīng)用場(chǎng)景

  • 錄音喊話器

  • 錄音門(mén)鈴

  • 留言

  • 播放固定歡迎語(yǔ)

封裝及引腳功能

  • 1腳為錄音端(REC),高電平有效。只要REC變高電平(不管芯片處在節(jié)電狀態(tài)還是正在放音),芯片即開(kāi)始錄音。錄音期間,REC必須保持為高電平。REC變低電平或內(nèi)存錄滿后,錄音周期結(jié)束,芯片自動(dòng)寫(xiě)入一個(gè)信息結(jié)束標(biāo)志(EOM),使以后的重放操作可以及時(shí)停止。

如果用戶只需要電路做放音用,可以在芯片錄好音測(cè)試無(wú)誤后,將芯片的REC端長(zhǎng)期接地,取消REC按鍵,這樣可以防止意外抹音。

  • 2腳為邊沿觸發(fā)放音端(PLAYE),此端出現(xiàn)上升沿時(shí),芯片開(kāi)始放音。放音持續(xù)到EOM標(biāo)志或內(nèi)存結(jié)束。開(kāi)始放音后,可以釋放PLAYE。

  • 3腳為電平觸發(fā)放音端(PLAYL),此端從低電平變高電平時(shí),芯片開(kāi)始放音。放音持續(xù)至此端回到低電平,或遇到EOM標(biāo)志,或內(nèi)存結(jié)束。

  • 4腳為話筒輸入端(MIC)。

  • 5腳為話筒參考端(MICREF)。

  • 6腳為自動(dòng)增益控制端(AGC)。通常4.7μF的電容器在多數(shù)場(chǎng)合下可獲得滿意的效果。

  • 7腳、9腳為喇叭輸出端(SP+、SP-),這對(duì)輸出端可直接驅(qū)動(dòng)8Ω以上的喇叭。

ISD1820能夠直接推動(dòng)喇叭,但音量不是很大。如果用戶需要更大音量的輸出,可以外加集成功率放大器。

  • 8腳、14腳為地線(VSSA,VSSD),芯片內(nèi)部的模擬和數(shù)字電路的不同地線匯合在這兩個(gè)引腳。

  • 10腳為振蕩電阻端(ROSC),此端接振蕩電阻至VSS,由振蕩電阻的阻值決定錄放音的時(shí)間。

  • 11腳為電源端(VCC),芯片內(nèi)部的模擬和數(shù)字電路使用的不同電源總線在此引腳匯合,這樣使得噪聲最小。去耦電容應(yīng)盡量靠近芯片。

  • 12腳為直通模式端(FT),此端允許接在MIC輸入端的外部語(yǔ)音信號(hào)經(jīng)過(guò)芯片內(nèi)部的AGC電路、濾波器和喇叭驅(qū)動(dòng)器而直接到達(dá)喇叭輸出端,形成話筒擴(kuò)音機(jī)功能。平時(shí)FT端為低電平,要實(shí)現(xiàn)直通功能,需將FT端接高電平,同時(shí)REC、PLAYE和PLAYL保持低電平。

  • 13腳為錄音指示端(/RECLED),處于錄音狀態(tài)時(shí),此端為低電平,可驅(qū)動(dòng)LED。此外,放音遇到EOM標(biāo)志時(shí),此端輸出一個(gè)低電平脈沖。此脈沖可用來(lái)觸發(fā)PLAYE,實(shí)現(xiàn)循環(huán)放音。


錄放音控制方式

按鍵控制或者單片機(jī)IO控制;

實(shí)例分析

實(shí)現(xiàn)的功能
  • 按下松開(kāi)按鍵PLAYE可以邊沿觸發(fā)播放語(yǔ)音;

  • 持續(xù)按下按鍵PLAYL可以電平觸發(fā)播放語(yǔ)音;

  • 持續(xù)按下按鍵REC實(shí)現(xiàn)錄音;

以上功能實(shí)現(xiàn)不需要單片機(jī)參與。

  • 按下松開(kāi)按鍵REC,LED1點(diǎn)亮,相當(dāng)于指示有錄音留言;

  • 按下松開(kāi)按鍵PLAYE,LED1熄滅,相當(dāng)于指示留言已讀。

原理圖


代碼實(shí)現(xiàn)
  • 按鍵BTN_PLAYE和BTN_REC初始化


//按鍵初始化函數(shù)//PB12 設(shè)置成輸入void KEY_Init(void){  GPIO_InitTypeDef GPIO_InitStructure;  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);  GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_10|GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOC, &GPIO_InitStructure);}
  • 按鍵聲明

#define BTN_PLAYE GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11)#define BTN_REC GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10) #define BTN_PLAYE_PRES  1#define BTN_REC_PRES    2
  • 實(shí)現(xiàn)按鍵掃描函數(shù)


//按鍵處理函數(shù)//返回按鍵值//mode:0,不支持連續(xù)按;1,支持連續(xù)按;//返回值://0,沒(méi)有任何按鍵按下//BTN_PLAYE_PRES,BTN_PLAYE按下//BTN_REC_PRES,BTN_REC按下//注意此函數(shù)有響應(yīng)優(yōu)先級(jí),PLAYE>REC!!u8 KEY_Scan(u8 mode){ static u8 key_up=1;//按鍵按松開(kāi)標(biāo)志 if(mode) key_up=1;  //支持連按  if(key_up&&(BTN_PLAYE==1||BTN_REC==1)) { delay_ms(10);//去抖動(dòng) key_up=0;  if(BTN_PLAYE==1)return BTN_PLAYE_PRES; else if(BTN_REC==1)return BTN_REC_PRES; } else if(BTN_PLAYE==0&&BTN_REC==0) { key_up=1; }  return 0;// 無(wú)按鍵按下}
  • LED1聲明

#define LED1 PAout(15)  // PA15

		
  • LED1初始化,根據(jù)原理圖設(shè)計(jì),LED1為低電平的時(shí)候,LED1亮。


//LED IO初始化void LED_Init(void){  GPIO_InitTypeDef  GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);  GPIO_SetBits(GPIOA,GPIO_Pin_15);}

		
  • 主函數(shù)實(shí)現(xiàn),實(shí)現(xiàn)按鍵掃描,當(dāng)?shù)玫紹TN_PLAYE按鍵按下后,LED1熄滅;當(dāng)?shù)玫紹TN_REC按鍵按下后,LED1點(diǎn)亮


#include "sys.h"#include "delay.h"#include "usart.h" #include "led.h" #include "key.h" int main(void){ u8 key=0XFF; uart_init(115200);  delay_init(); LED_Init(); KEY_Init();  //主循環(huán)  while(1)  {  key = KEY_Scan(0);  if(key)  {  switch(key)  {  case BTN_PLAYE_PRES: { LED1 = 1;  printf("BTN_PLAYE_PRES \r\n");  } break;  case BTN_REC_PRES: { LED1 = 0;  printf("BTN_REC_PRES \r\n");  } break;  }  }  delay_ms(10);  } }

?

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉