介绍一种主电路主要由单片机89C52和ISD4004构成。该系统的硬件电路连接如图所示为流程图。
程序工作思想
电路上电后,程序首先完成程序的初始化,随后查询按键状态,进入系统待机状态。如果有按键按下,则转去执行该按键指向的工作程序。按键包括放音键,停止键,加一,减一键以及特殊语键。调用放音子程序,读入前面获得的本站放音内容首地址,开始放音。每一句放音完毕后,ISD4004的中断引脚(25脚)会自动送一低电平信号。在硬件设计中,该引脚与单片机的P3.3连接。因此,会引起一次中断,在中断子程序中会有一个计数器记,加一键按下后则使程序放音内容转向下一段,减一键则使程序放音内容转向上一段,相应的段号显示也将随之刷新。特殊语键按下后,程序转向执行特殊语放音。停止键被按下将中止当前的放音状态。
部分工作子程序
该部分程序主要完成放音操作,把获得的放音内容的地址送到ISD4004中,完成放音。下面给出的就是放音部分程序。放音子程序:
PLAY:
ACALL POWERUP ;上电子程序
ACALL DELAY25 ;延迟子程序,至少延迟25ms
CLR P1.6 ;选中ISD4004
MOV PLAY2,#11100000B ;存放SETPLAY命令
MOV A,PLAY0 ;送放音地址低8位
ACALL SEND ;调用送地址子程序
MOV A,PLAY1 ;送放音地址高8位
ACALL SEND
MOV A,PLAY2 ;送SETPLAY命令
ACALL SEND
SETB P1.6
CLR P1.6
MOV PLAYING,#11110000B ;送入放音指令
MOV A,PLAYING
ACALL SEND
SETB P1.6
RET
POWERUP: ;送上电指令子程序
MOV POWING,#00100000B ;送入语音芯片上电信号
MOV A,POWUPING
CLR P1.6
ACALL SEND
SETB P1.6
RET
SEND: ;向ISD4004送指令,地址等的子程序
CLR MOSI
CLR P3.2
MOV R1,#8
OUTBIT1:
CLR P3.2 ;时钟下降
RRC A
MOV MOSI,C ;输出1位
NOP
NOP
NOP
SETB P3.2 ;时钟上升沿到
NOP
NOP
NOP
DJNZ R1,OUTBIT1
RET
【单片机+ISD4003+几个电阻电容+小麦克 】这个不对
不好意思刚才没看清题目
要是不用语音芯片很难。可以用AD做语音数据采集,5V电压时声音使小麦克上的电压变化大概在1mV左右,可以用LM324做一下放大再做数据采集要不然根本听不出声音来;数据如果存储在单片机内部RAM中的话,STC89C52做着很困难,因为即使编码成MP3格式,8KB的存储空间也只能存储不到1秒的声音,何况STC89C52根本来不及做编码,这样8KB的空间不够用,楼主可以用58试试不过我觉得不做编码64K的空间还会不够,可以外扩一片FLASH;对于速度51单片机跟不上去。。。还是用AVR吧;假设现在已经把音乐数据存储了,再用个DA加个喇叭理论上就放出声音了。
不可能。普通的单片机没有那么大的容量来存储几秒钟的声音信号。
楼上看不懂中国话吗?你那个ISD4003是什么芯片。
51能做,费劲。懒得多讲。