基于51單片機語音實時采集系統

基于51單片機語音實時采集

(程序+原理圖+PCB+設計報告)

功能介紹

具體功能:

系統由STC89C52單片機+ISD4004錄音芯片+LM386功放模塊+小喇叭+LCD1602+按鍵+指示燈+電源構成

1.可通過按鍵隨時選擇相應的錄音進行播放;

2.可以通過按鍵隨時錄音,可以錄制4段聲音,并可以按鍵控制播放和暫停,最長可以錄制8分鐘;

3.播放的音量可以通過調節電位器改變;

添加圖片注釋,不超過 140 字(可選)

硬件設計

使用元器件:

單片機:STC89C52;

(注意:單片機是通用的,無論51還是52、無論stc還是at都一樣,引腳功能都一樣。程序也是一樣的。)

15*9萬用板;LCD1602液晶;

16P排針;16P排母;

10k電阻;5MM LED燈;

10歐姆電阻;1k電阻;

40腳IC座;28腳IC座;

ISD4004語音芯片;

LM386;8腳IC座;

2P母座;3.3V芯片;

咪頭;喇叭;紅黑并線;

103電位器;1uf電容*2;

220uf*4;2.2uf電容*1;

10uf電容*2;22pf電容*2;

小按鍵*4;自鎖開關;

DC電源接口;12M晶振;

2k電阻*1;晶振:8M;

添加圖片注釋,不超過 140 字(可選)

流程圖:

添加圖片注釋,不超過 140 字(可選)

程序

// 以ISD4004-8錄音時間為8分鐘,即8*60=480S根據4004的資料,480秒可分為2400段,也就是1S的段數為
//  5段,即從,0000-0005H的內容為1秒。0X0000-0X012C ;0X012D-0X0258;0X259-0X0384;0X0385-0X04B0.
#include <reg52.h>
#include <intrins.h>
#include"1602.c"
#include"eeprom.h"
#define uchar unsigned  char
#define uint  unsigned  int
bit playbit,recbit;	//定義兩個位變量,放音和錄音位
/***微信公眾號:木子單片機********/
定義放音命令,定義常量//
#define ISDPOWERUP      0X20           //ISD4004上電
#define ISDSTOP         0X10           //ISD4004下電
#define OPERSTOP        0X30           //ISD4004停止當前操作
#define PLAYSET         0XE0           //ISD4004從指定地址開始放音
#define PLAYCUR         0XF0           //ISD4004從當前地址開始放音
#define RECSET          0XA0      	   //ISD4004從指定地址開始錄音
#define RECCUR          0XB0		   //ISD4004從當前地址開始錄音sbit   SCLK=P3^7; 
sbit   SS=P3^6;            //LOW IS ACTIVELY
sbit   MOSI=P3^5;
//sbit   MISO=P3^4;sbit   K1=P1^2;
sbit   K2=P1^3;
sbit   K3=P1^4;		  //按鍵輸入sbit   LED1=P1^0;
sbit   LED2=P1^1;	  //指示燈uchar aa,bb,cc,dd,ee;
uchar num_rec=0;
void  delayms(uchar ms);
uchar playcout,reccout;	 //放音和錄音次數。		
放音部分子程序,放音地址由ADDR決定
void play(uint addr){ 	uint y;SS=0;MOSI=0;//發送開始SCLK=0;for(y=0;y<8;y++){SCLK=0;if((0x20>>y)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();}//發送結束SS=1;//上電結束delayms(50);SS=0;MOSI=0;//發送地址SCLK=0;for(y=0;y<16;y++){SCLK=0;if((addr>>y)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();}//發送地址結束MOSI=0;//放音SCLK=0;for(y=0;y<8;y++){SCLK=0;if((0xe0>>y)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();}SS=1;SS=0;MOSI=0;//放音SCLK=0;for(y=0;y<8;y++){SCLK=0;if((0xf0>>y)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();}SS=1;	  }	
//lu音部分子程序,地址由ADDR決定/
/***全部文件關注********/
/***微信公眾號:木子單片機********/
void rec(addr)                
{ 	uint y;	SS=0;MOSI=0;//發送開始SCLK=0;for(y=0;y<8;y++){SCLK=0;if((0x20>>y)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();}//發送結束SS=1;//上電結束delayms(50);SS=0;MOSI=0;//發送開始SCLK=0;for(y=0;y<8;y++){SCLK=0;if((0x20>>y)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();}//發送結束SS=1;//上電結束delayms(50);delayms(50);SS=0;MOSI=0;//發送地址SCLK=0;for(y=0;y<16;y++){SCLK=0;if((addr>>y)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();}//發送地址結束MOSI=0;SCLK=0;for(y=0;y<8;y++){SCLK=0;if((0xa0>>y)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();}SS=1;SS=0;MOSI=0;SCLK=0;for(y=0;y<8;y++){SCLK=0;if((0xb0>>y)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();}SS=1;	  }void stop()
{ uchar y;SS=1;SS=0;MOSI=0;//放音SCLK=0;for(y=0;y<8;y++){SCLK=0;if((0x30>>y)&0x01)MOSI=1;else MOSI=0;_nop_();_nop_();_nop_();SCLK=1;_nop_();_nop_();_nop_();}SS=1;
}void delayms(uchar ms)	
// 延時子程序
{						uchar j;while(ms--){for(j = 0; j < 120; j++);}
}void playsound()	///錄放音子函數
{if(playbit){playbit=0;switch(playcout){			 ///====每段60S=====case 0x01:{play(0x0000);LCD_write_str(0,0,"NUM:1 Playing  ");}break;	//此處第一段音樂的開始地址為0X00,到0X012d地址結束,約為60秒。case 0x02:{play(0x012d);LCD_write_str(0,0,"NUM:2 Playing  ");}break;case 0x03:{play(0x0259);LCD_write_str(0,0,"NUM:3 Playing  ");}break;case 0x04:{play(0x0385);LCD_write_str(0,0,"NUM:4 Playing  ");}break; }}if(recbit){recbit=0;switch(reccout){    case 0x01:{rec(0x0000); LCD_write_str(0,0,"NUM:1 Recording");aa=1;}break;case 0x02:{rec(0x012d);LCD_write_str(0,0,"NUM:2 Recording");aa=1;}break;case 0x03:{rec(0x0259);LCD_write_str(0,0,"NUM:3 Recording");aa=1;}break;case 0x04:{rec(0x0385);LCD_write_str(0,0,"NUM:4 Recording");aa=1;}break; }}
}
bit key_bit1=0,key_bit2=0;
uchar num11;
uchar  play_count=4,rec_count=4;void keyscan()  //直控鍵盤掃描子程序。
{if(K1==0){ while(K1==0);key_bit1=1;recbit=1;reccout++;LED2=0;LED1=1;if(reccout>rec_count)	  //reccout=1;}if(K2==0&&key_bit2==0){while(K2==0);key_bit1=1;playbit=1;playcout++;LED1=0;LED2=1;if(playcout>play_count)playcout=1;	//	   reccout=num_rec;		   }			      if(K3==0&&key_bit1==1){ while(K3==0);stop();LED2=1;LED1=1;if(aa==1){num_rec++;aa=0;	if(num_rec>4){num_rec=1;key_bit1=0;}}ISP_ERASE(0x2c00);		//注意:字節編程時必須要先要擦除整個扇區	ISP_PROGRAM(0x2c00, num_rec);	//寫入eeprom 掉電保存ISP_PROGRAM(0x2c01, reccout);play_count=num_rec;		//保存播放的段數reccout=num_rec;		//從第幾段錄起LCD_write_str(0,0,"                ");key_bit1=0;}if(K3==0&&key_bit1==0)					//選擇播放哪段{ while(K3==0&&key_bit1==0);key_bit2=1;num11++;			if(num11>play_count){num11=0;bb=0;cc=0;dd=0;key_bit2=0;LCD_write_str(0,0,"                ");}switch(num11){    case 1:{LCD_write_str(0,0,"NUM:1 Rec    ");bb=1;cc=0;dd=0;ee=0;}break;case 2:{LCD_write_str(0,0,"NUM:2 Rec    ");bb=0;cc=1;dd=0;ee=0;}break;case 3:{LCD_write_str(0,0,"NUM:3 Rec    ");cc=0;bb=0;dd=1;ee=0;}break;case 4:{LCD_write_str(0,0,"NUM:4 Rec    ");cc=0;bb=0;dd=0;ee=1;}break; }		}if(bb==1){if(K2==0&&key_bit2==1){while(K2==0); 	key_bit1=1;play(0x0000);LCD_write_str(0,0,"NUM:1 Playing  ");}}if(cc==1){if(K2==0&&key_bit2==1){while(K2==0); key_bit1=1;play(0x012d);LCD_write_str(0,0,"NUM:2 Playing  ");}}if(dd==1){if(K2==0&&key_bit2==1){while(K2==0); key_bit1=1;play(0x0259);LCD_write_str(0,0,"NUM:3 Playing  ");}}if(ee==1){if(K2==0&&key_bit2==1){while(K2==0); key_bit1=1;play(0x0385);LCD_write_str(0,0,"NUM:4 Playing  ");}}} 

設計資料

01原理圖

本系統原理圖采用Altium Designer19設計,具體如圖!

添加圖片注釋,不超過 140 字(可選)

02PCB

本系統pcb采用Altium Designer19設計,具體如圖!

添加圖片注釋,不超過 140 字(可選)

03程序

本設計使用軟件Keil5版本編程設計!具體如圖!

添加圖片注釋,不超過 140 字(可選)

04設計報告

一萬三千字設計報告,具體如下!

添加圖片注釋,不超過 140 字(可選)

05設計資料

全部資料包括程序(含注釋)、AD原理圖、PCB、設計報告、流程圖、實物圖、元件清單等。具體內容如下,全網最全! !

添加圖片注釋,不超過 140 字(可選)

?大家共同學習進步:

點贊分享一起學習成長。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75601.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75601.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75601.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于 Java 預先編譯(AOT)技術的詳細說明,涵蓋 GraalVM 的配置、Spring Boot 3.x 的集成、使用示例及優缺點對比

以下是關于 Java 預先編譯&#xff08;AOT&#xff09;技術的詳細說明&#xff0c;涵蓋 GraalVM 的配置、Spring Boot 3.x 的集成、使用示例及優缺點對比&#xff1a; 1. 預先編譯&#xff08;AOT&#xff09;技術詳解 1.1 核心概念 AOT&#xff08;Ahead-of-Time&#xff09…

【ROS2】行為樹:BehaviorTree

1、簡介 與狀態機不同,行為樹強調執行動作,而不是狀態之間的轉換。 行為樹是可組合的。可以重復使用簡單的行為來構建復雜的行為。 在游戲領域,行為樹已經比較流行了。主要用于維護游戲角色的各種動作和狀態。 ROS2的導航框架Navigation2中引入了行為樹來組織機器人的工作流…

Centos7.9 升級內核,安裝RTX5880驅動

系統鏡像下載 https://vault.centos.org/7.9.2009/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso 系統安裝步驟省略 開始安裝顯卡驅動 遠程登錄查看內核 [root192 ~]# uname -a Linux 192.168.119.166 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x8…

多層感知機與全連接神經網絡關系解析

感知機&#xff08;Perceptron&#xff09;、多層感知機&#xff08;MLP&#xff0c;Multilayer Perceptron&#xff09;和全連接神經網絡&#xff08;FCNN&#xff0c;Fully Connected Neural Network&#xff09;是神經網絡發展過程中密切相關的概念&#xff0c;但它們有明確…

解析醫療器械三大文檔:DHF、DMR與DHR

醫療器械的 DHF、DMR 和 DHR 是質量管理體系&#xff08;QMS&#xff09;中的核心文件&#xff0c;貫穿產品全生命周期&#xff0c; 確保醫療器械的安全性、有效性和合規性。 一、三大文件的定義與法規依據 縮寫全稱法規依據&#xff08;以 FDA 為例&#xff09;核心目的DHF…

netty啟用websocket的壓縮機制

netty啟用websocket的壓縮機制 package com.aerotop.connector.websocket.base;import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.compression.JZlibDec…

可能存在特殊情況,比如控制臺顯示有延遲、緩沖問題等影響了顯示順序。

從控制臺輸出看&#xff0c;正常邏輯應是先執行 System.out.println(" 未處理異常演示 "); 輸出對應文本&#xff0c;再因 arr 為 null 訪問 length 觸發 NullPointerException 輸出異常信息。可能存在特殊情況&#xff0c;比如控制臺顯示有延遲、緩沖問題等影響…

第一節:React 基礎篇-React虛擬DOM原理及Diff算法優化策略

必考點&#xff1a;虛擬DOM樹對比&#xff08;同級比較、Key的作用、組件類型判斷&#xff09; 延伸&#xff1a;React 18中并發更新對Diff算法的影響 React虛擬DOM原理及Diff算法優化策略 虛擬DOM核心原理 概念&#xff1a; ? 虛擬DOM&#xff08;Virtual DOM&#xff09;…

Java spring mybatis面試題(200道),八股文

Java面試題 通過網盤分享的文件&#xff1a;面試題等2個文件 鏈接: https://pan.baidu.com/s/1Xw0PzkfAmL8uesYBvrW2-A?pwdpebt 提取碼: pebt mybatis相關 1、 什么是Mybatis&#xff1f; … 2 2、 Mybaits 的優點&#xff1a; … 2 3、 MyBatis 框架的缺點&#xff1a; ……

windows使用Python調用7-Zip【按大小分組】壓縮文件夾中所有文件

使用Python調用7-Zip【按大小分組】壓縮文件夾中所有文件 問題描述&#xff1a;方法前提條件任務完整代碼示例代碼如何工作&#xff1f; 問題描述&#xff1a; 我現在想把文件夾下的所有內容上傳到網盤&#xff0c;但是這個文件夾下的素材內容很多&#xff0c;使用分卷壓縮的話…

《Python星球日記》第26天:Matplotlib 可視化

名人說&#xff1a;路漫漫其修遠兮&#xff0c;吾將上下而求索。—— 屈原《離騷》 創作者&#xff1a;Code_流蘇(CSDN)&#xff08;一個喜歡古詩詞和編程的Coder&#x1f60a;&#xff09; 訂閱專欄&#xff1a;《Python星球日記》 目錄 一、Matplotlib 簡介1. 什么是 Matplo…

第1章 對大型語言模型的介紹

人類正處在一個關鍵轉折點。自2012年起&#xff0c;基于深度神經網絡的人工智能系統研發進入快速通道&#xff0c;將這一技術推向了新高度&#xff1a;至2019年底&#xff0c;首個能夠撰寫與人類文章真假難辨的軟件系統問世&#xff0c;這個名為GPT-2&#xff08;生成型預訓練變…

dcsdsds

我將為您在頁面頂部添加歡迎內容&#xff0c;同時保持整體風格的一致性。以下是修改后的代碼&#xff0c;主要修改了模板部分和對應的樣式&#xff1a; vue 復制 <template><div class"main-wrapper"><!-- 新增歡迎部分 --><div class"…

學習MySQL的第八天

海到無邊天作岸 山登絕頂我為峰 一、數據庫的創建、修改與刪除 1.1 引言 在經過前面七天對于MySQL基本知識的學習之后&#xff0c;現在我們從基本的語句命令開始進入綜合性的語句的編寫來實現特定的需求&#xff0c;從這里開始需要我們有一個宏觀的思想&…

Linux-內核驅動-中斷-key

DEV_NAME&#xff1a;設備名稱。 wg&#xff1a;等待隊列頭&#xff0c;用于同步。 condition&#xff1a;條件變量&#xff0c;用于等待和喚醒。 中斷處理函數 irq_handler&#xff1a;處理中斷請求&#xff0c;設置條件變量并喚醒等待隊列中的進程。 文件操作函數 open…

asm匯編源代碼之按鍵處理相關函數

提供5個子程序: 1. 發送按鍵 sendkey 2. 檢測是否有按鍵 testkey 3. 讀取按鍵 getkey 4. 判斷鍵盤緩沖區是否為空 bufempty 5. 判斷鍵盤緩沖區是否已滿 buffull 具體功能及參數描述如下 sendkey proc  far ; axcharcode testkey proc  far ; out: ;   zf1 buff empt…

Java Collections 類中常用方法使用

一、Collections類 java.util.Collections 類是 Java 集合框架中的一個工具類&#xff0c;提供了一系列靜態方法來操作和處理各種類型的集合。這些方法簡化了對集合進行排序、查找、同步控制、創建只讀集合等常見操作的過程。 二、常用方法 方法類別??方法簽名??功能??需…

Linux網絡編程——數據鏈路層詳解,以太網、MAC地址、MTU、ARP、DNS、NAT、代理服務器......

目錄 一、前言 二、以太網 二、以太網幀格式 三、 MAC地址 四、MTU 1、數據鏈路層的數據分片 2、MTU對UDP協議的影響 3、MTU對TCP協議的影響 五、ARP協議 1、什么是ARP 2、ARP的作用 3、ARP協議的工作流程 4、ARP緩存表 5、ARP請求報文 6、中間人 六、DNS&…

輕量級開源文件共享系統PicoShare本地部署并實現公網環境文件共享

&#xfeff;## 前言 本篇文章介紹&#xff0c;如何在 Linux 系統本地部署輕量級文件共享系統 PicoShare&#xff0c;并結合 Cpolar 內網穿透實現公網環境遠程傳輸文件至本地局域網內文件共享系統。 PicoShare 是一個由 Go 開發的輕量級開源共享文件系統&#xff0c;它沒有文…

基于查表法的 CRC8 / CRC16 / CRC32校驗解析

在嵌入式開發中&#xff0c;CRC&#xff08;Cyclic Redundancy Check&#xff09;循環冗余校驗算法廣泛應用于通信數據校驗、Flash 數據完整性檢測、Bootloader 升級驗證等場景。本文將深入剖析一套完整的 CRC8、CRC16 和 CRC32 實現&#xff0c;并通過查表法&#xff08;Table…