登录站点

用户名

密码

51单片机控制ISD1420实现选段播放功能的实现(C程序 电路图)

已有 176 次阅读  2013-04-16 14:33   标签单片机  程序  电路图 
资料编写与整理:AVR猎手benladn911      出处:AVR猎手的地盘 http://benladn911.21ic.org/      www.avrzone.com转载请注明出处电子园51单片机学习网U7kS {rrW5Gj

3Sy.`Q,F;uey%F0在2006年时候记得我在做 ISD1420的播放控制,当时在 选段播放上遇到了问题,当时网络上也没有详细描述具体的控制方法,也在咱们坛子里问过。电子园51单片机学习网 |5P_ A;]u S
折腾了很久,后来还是实现出来了。但资料后来没有实际应用到产品上,今天翻看资料的时候发现了,拿出来给同样碰到问题的朋友做为参考。
M!xDU+ig'O!R!H+s4i0以前写的C程序比较菜,注释比较多。(现在写的程序注释也很多 :)电子园51单片机学习网_7u4O6CZ#]
电子园51单片机学习网YO9zUX z(v
电路图简单画了下,大家都看得懂:
h fwL-w&L/Or4W0点击看大图电子园51单片机学习网*[?,Nu"h.Jw{
电子园51单片机学习网8g%_3J$_|Sfg%k t&ha

电子园51单片机学习网d5jHxPI~

附上 KEIL完整工程:电子园51单片机学习网k$A/]^`$B

电子园51单片机学习网$Z!Yk8c ]'c

1420_code.rar电子园51单片机学习网 @e2h/E*OGL!W.rI6vs*P


EB-aW7GgYm x4m0 

+Y1I$^L`whP"w0

VCHG8eCVK.h0程序原文:
y!e%zB EV6[0/**********************************************************电子园51单片机学习网:O9{1fwq;R
功能:  使用STC2052单片机控制 ISD1420语音芯片的播放电子园51单片机学习网.F \X&W6M r
       1、顺序连续分段放音
mb+Wg#QmY9| Q3X%R0       2、选段播放(播放任意段)
$lPP{ I~n0       3、所有的播放控制都是通过接收串口的命令来执行
Aazz pxk+[7l;U0       电子园51单片机学习网]]a v[
编写:  benladn911  AVR猎手电子园51单片机学习网Q&SC9f2nR)BU

oYS u}-E oPE0日期:  2006-6-28创建
RrY%P0M \fJx0       2008-2-21添加注释和完善电子园51单片机学习网7K WQ0V3I@
**********************************************************/
(O9]m8E;`0
\"Nez(I Q;VIJ0#i nclude<STC12C2052.H>
|/^aR-v~g0#i nclude<intrins.h>电子园51单片机学习网W4LNdRrW
#i nclude<stdio.h>
`9}:C3T9[-b.e E#y1r*`0#i nclude<string.h>
7n!S$uX6icy K _0uXnP0
%c4Rsaekvk0//硬件端口的定义电子园51单片机学习网vdL6R1s0J
#define  POW P3_7   //此引脚为单片机控制一个三极管给 ISD1420供电
+C(|;b-M2b:Wz a9NV0
o3N\L]?3p9N0q0#define  PL  P3_5   //接 ISD1420 的 PLAYL
"b"[#Z5?_:pb$f;N0#define  PE  P3_4   //接 ISD1420 的 PLAYE
1e/D)I0M/vGC0#define  REC P3_3   //接 ISD1420 的 REC电子园51单片机学习网}7JdJ6Y

V'OXEQ]0#define  REC_LED  P3_2   //ISD1420 的 REC LED电子园51单片机学习网$aG Z/tEz8Z

&BzM ? M r:c0//操作模式的定义电子园51单片机学习网(}+F#u*t8d~
#define  mode1  0xC8 //循环放音操作,按一下 PE 键可循环放音,按 PL 键停止;或按 PL 键放音,松开即停止
p/E"?1~]-L!rG;w9I0
9f-b(tl`6v7r[:W$K0#define  mode2  0xD0 //按顺序连续分段录放音,每段语音长度不限电子园51单片机学习网Txxd1HR!uN
#define  mode3  0xC0 //地址指针复位,开始录放第一段电子园51单片机学习网n0TpV.bBTj
#define  mode4  0xD1 //按 PE 键可快速选段放音
9L o@6f&Jz0电子园51单片机学习网*u:egV w&bh
                //0xC1 //也为地址指针复位电子园51单片机学习网/oA7X&w,g%~NS
                
9dZ&EtI+t!T0unsigned char RX_index=0;                //电子园51单片机学习网T6} k2k3m;uzU
bit FLAG_rev = 0; //
'o `^ ?g0unsigned char PC_COMMAND;电子园51单片机学习网 ?A K m8RaW-S3v
unsigned char RX_BUFFER[10];//串行接收缓存
1^9RM#W c&gZE$o0电子园51单片机学习网~q;T(X1} Q&x4\
void io_init(void);
{ gr f'T0void init_serialcomm(void);
1cz A+}.yA0void serial_out(unsigned char d);
6Z*MZ/R ]gOd1G0void delay5ms(void);电子园51单片机学习网 d2@*k@;f
void delay(unsigned int x);电子园51单片机学习网)Q)d%[ ~|8N5}
void nop(unsigned char i);电子园51单片机学习网 h"_*W1Lr|!Q6]aH

8z3@j}J8he0void paly(unsigned char i);//选择播放当前段操作
U`L*\"b)T0电子园51单片机学习网YC Q$_bL$C~8G

X)@F\/d0void main(void)
?5f#y rW3M!|0{
Ffkw|*C}0        io_init();
7O.~j7kj0vy0        init_serialcomm();
#@1h^ p&w@:g|0        delay(1000);                 
w)t2ViwOi0电子园51单片机学习网.A rX%j_l9tf,h0Cx4`R
 serial_out(0xaa);  //发送到PC机,看看PC端是否收到正确数据电子园51单片机学习网c~x:o)keNaFbh L;~
 serial_out(0x55);电子园51单片机学习网0@,ucsu bp$f+xBM
 serial_out(0x33);                电子园51单片机学习网&K-e c n0u/gT[5M+d

W0E {;Rx7t(St0        POW = 0;//开启电源电子园51单片机学习网7ov)[W0yO3Zl
        
v:rQD!a/|0        //P1 = mode4;电子园51单片机学习网x.H!FW1Ed5Ss
        //P1 = 0X00;
#m!TrK{0        while(1)
/G GL k{0        {电子园51单片机学习网}+j3b.\T+eU
电子园51单片机学习网)tX-Q"Z(`z
        }                 电子园51单片机学习网 o4{K~7M K$?&sm
}电子园51单片机学习网3ge%a#jm1IY
电子园51单片机学习网%pa^-Z7{-D(hn ?
//----- 端口初始化 电子园51单片机学习网]WPy%V?X;P*m
void io_init(void)
:Zm [ `9~0{        
-wm;JbkXW*M0        P1M0 = 0x00; //设置STC的 IO 为标准51 IO模式电子园51单片机学习网z4G*Z(XS
        P1M1 = 0x00;电子园51单片机学习网u s C)wBk/N z-L#d
        P3M0 = 0x00;
w"cr6q~%h'r P0        P3M1 = 0x00;        
)n6X{A@0        P1 = 0XFF;
R9~MfT)HXo+mC H0        P3 = 0XFF;
?Fn5aG(d z0}
}+b\HVHx(E0
(wN3bpT:N4v+j"w} i0//串行口初始化电子园51单片机学习网(EE&_%Xv+j&Zo|'F
void init_serialcomm(void)电子园51单片机学习网+z:VYEJ#c}
{
;SOtBd2g/L c0    SCON  = 0x50;       //SCON: serail mode 1, 8-bit UART, enable ucvr 电子园51单片机学习网9\*s fzK1}
电子园51单片机学习网r*H`~A4a7_
    TMOD = 0x20;       //TMOD: timer 1, mode 2, 8-bit reload 电子园51单片机学习网N%z%T9S0Wfd?
电子园51单片机学习网Jy8r;L4Bb&R"HG
    TH1 = 0xf3;//12MHz, 2400 bps电子园51单片机学习网0|-bH9ld!kp
    TL1 = 0xf3;电子园51单片机学习网V%P J+F"w"U0i
        //IE   |= 0x90;       //Enable Serial Interrupt 电子园51单片机学习网,w'^*gBBf3@%vh.i
    电子园51单片机学习网Hk.?/["SR _$|
    TR1   = 1;          // timer 1 run电子园51单片机学习网J5x.L W$L
   
%s8?4} p0ds%Du0        ES=1;
0|r1Jn#k!R0        EA=1;
*mGOWV+[fE!N6T0?;q0}
!P\:f|,g@B k0
ZE0`1P;D'O*z0//串行数据发送,查询模式电子园51单片机学习网cGbD$l0z a3t
void serial_out(unsigned char d)
7s is:uP4_Dp0{
)nY&]#]fFdR0        ES=0;电子园51单片机学习网m%l_W?N&U}
        SBUF=d;while(TI==0){;}TI=0;        
0B||n ^]$J ~L0        ES=1;        电子园51单片机学习网.I!j.I;zmZ
}电子园51单片机学习网\2c{!W(s

r$ua0kz r:r&d0//串行中断接收
F_T5ETZ(@0void receive() interrupt 4电子园51单片机学习网$hh(DO?W_)_
{
ph2^"\ ~3`z:x^0        if(RI)电子园51单片机学习网9gc-T%i*I3y-M~ t
        {
6xL\j$xgQ0                RI = 0;
*|uh/d/U!i0                ES = 0;
~+b#]Y(a0                PC_COMMAND = SBUF;
N(VPH"tX(X0电子园51单片机学习网Wd;\SVc*by
                //RX_BUFFER[RX_index] = PC_COMMAND;                //保存数据到数组里面电子园51单片机学习网 {0e(~7O&_.h g's
                //RX_index++;
,{)[U!Jz^-Q0          switch(PC_COMMAND)
:F gPw;kx@\0          {
?)G_pI#N8v4f x O0电子园51单片机学习网 j%`a0\(`!? dd9s-vR
                            电子园51单片机学习网+I.QC B I1xzN
                  case 0xa0:
4wB4q8nb$u-W0                  
nyXp^9nyN*uM0                            serial_out(0xa0);电子园51单片机学习网.i[[;Qhk*E
                            P1 = mode2;      //按顺序连续分段录放音,每段语音长度不限  0xD0  连续寻址,A4
~"T"o#T?%M}0                                                        
w)r0CP.Y{xTa0                            PE = 0;
p;zK2[u@m0                            nop(10);
nycyEa+X P0                            PE = 1;
"D!e7e D.Syj-Vu0                            
8H @c&Z6jOt2{0n0                            P1 = 0XFF;
X ]o/vbW0电子园51单片机学习网6Cj(ZcB
                            break;
)I Zz.o,tt0                            电子园51单片机学习网 r#E[r] \%T/Mr'c2x
                  case 0xb0:电子园51单片机学习网Dko1\q%fcW
                            serial_out(0xb0);电子园51单片机学习网9D1F)es hI].U
                            P1 = mode3;      //地址指针复位  0xC0
"[(W{,f K1f {"V0                            电子园51单片机学习网 e;jeLF8X;?
                            nop(10);电子园51单片机学习网F%Z @9H t5g g
                            P1 = 0XFF;电子园51单片机学习网F7{;m3iw
                                        电子园51单片机学习网y ]+^\ f;^
                            break;电子园51单片机学习网l;SJG?'X
                            
H4i-l1Y3w0                  case 0xc0:                 //选段播放控制电子园51单片机学习网d/})Z$q[ E
                            serial_out(0xc0);
7b!|M)z|*A1ZZV0                            电子园51单片机学习网{8nN`n4F0~"xv.T
                   电子园51单片机学习网7escm? ZvLA
                            P1 = 0xD1;      //第二步:快速选段放音电子园51单片机学习网dG q)H&s2kt |}
电子园51单片机学习网n7VC0Yy;|6w k

9dVTR|J;V0                            P1_0 = 0;                            电子园51单片机学习网1d3i:Wz5|%XX1O
                            nop(10);
k} i XM1J%oD0                            P1_0 = 1;                             电子园51单片机学习网6j6F+q8b#G*y
                            nop(10);
}n,V9Y,~0                            电子园51单片机学习网k Q3zi-] R9d
                            电子园51单片机学习网6Go)`RW`
                            PE = 0;
)P.YJ{,K }2b2W7{;k-o:A0                            nop(10);
0B}I v6t+z0                            PE = 1;电子园51单片机学习网$@oPK-R9Pgm/B
                            电子园51单片机学习网6e+ch @FJ?5S
                            break;电子园51单片机学习网7d}@)n;N+P k
                            电子园51单片机学习网-O$} [p8j
                  case 0xd0:
6HeePFz-cFG6_0                            serial_out(0xd0);  //播放任意段的组合
Z n(gL\g0                            paly(3);
h.@[o%o7Y'H$v!jD0                            paly(1);电子园51单片机学习网;ep t}3Mz;Z? t
                            paly(5);
4E w;cY#X6l2lCeJ0                            paly(5);
\:Jk$} j0                            paly(6);
Qa+vBks~#ZZ0                            paly(4);电子园51单片机学习网osC2b`6as
                            paly(3);
:Jk[S:X)[0                            paly(6);
H)T-JI Z5E2d0                            paly(1);                    电子园51单片机学习网!R2lfM[
                     
}5PL3d'G Y(@0                            break;
/Wos#_&Go0电子园51单片机学习网'xHSI mdH*_+T0w(wt V
                  case 0x30:                  
)?K3r-@/w_(_U0                            serial_out(0x30);电子园51单片机学习网[ r%^iq
                            //此操作循环放音操作,按一下 PE 键可循环放音,按 PL 键停止;或按 PL 键放音,松开即停止电子园51单片机学习网7HP)] J{
                            //此操作没什么用
9HsR` Q[6TT0                            P1 = mode1;电子园51单片机学习网 U7M4[)w"Y;q,v]A.T
                                        电子园51单片机学习网z#cP$?+l;mA
                            PE = 0;
6`+L v%dak0                            nop(10);电子园51单片机学习网&f |-t#af0k#F5\
                            PE = 1;电子园51单片机学习网%^"[W!f\+nvd` Q
                            //
D@ X,Do{4t0                            break;电子园51单片机学习网FNqw ^;sg8[8?
                                                        电子园51单片机学习网?wZ$hD#FZu c(D
                  default: break;
rw,AH'X ca}H0          }
K3d2Y K9rt/y's0                电子园51单片机学习网(\v4Yw6w0}_
                ES = 1;        电子园51单片机学习网`l#m*k-E d5nB
        }电子园51单片机学习网N5|zU{u
}
7{:^!F@s*F,?0电子园51单片机学习网 mrRB k:k
/*************************************************************
%[m2}/w ^4ax0          选段播放,i 的值就是要播放的当前段
OJV YyP+J;@w0          i的取值:1 ~ ...电子园51单片机学习网|-f"l&|1^!Y8_
**************************************************************/
sv` Y U"Qo}0void paly(unsigned char i) 
!u!C R1|r\~9^0{
| O'K Q&o;~%u+g0        i--;电子园51单片机学习网Q~(`lM aY,A
电子园51单片机学习网3h:j0Qg??9f,Gef#c
        P1 = mode3;      //第一步:地址指针复位  0xC0                  A7--A0: 1100 0000  (A2、A5在应用中可直接接地)                  电子园51单片机学习网B3~2sy[
        nop(10);
-` H Pi1vMY.dC q0        //P1 = 0XFF;                电子园51单片机学习网6~ k$p8U(i"pI [
                
bY G |Y y\Q#rHK$i0        delay(30);//必要的延时电子园51单片机学习网0M4h&@s q;}
        电子园51单片机学习网9^a8|uhP:Zw
        if(i>0)电子园51单片机学习网 I#y]%Fl*ts q
        {        
+s8[(hN8sA6r0                P1 = 0xD1;      //第二步:快速选段放音 0xD1     A7--A0: 1101 0001  (A2、A5在应用中可直接接地)电子园51单片机学习网y4S*n/P7X
                do电子园51单片机学习网Y"X8v2o.P#@J;Z
                {                电子园51单片机学习网&g[:]C l~#D
                        P1_0 = 0;        //给 A0 低电平脉冲          电子园51单片机学习网#|-}6odP9CSm.i_
                        nop(10);
@m3mt Our#m0                        P1_0 = 1;                             
9L:?uqO5`n0                        nop(10);电子园51单片机学习网G0L/g9n }T
                                            
T;q8t?d*U%y:t0                        PE = 0;电子园51单片机学习网7sA/WE2n,WXt
                        nop(10);电子园51单片机学习网vT+t0dL)P-s
                        PE = 1;
j @x/d @b:@X Tab,V0                        
G!JZ,F~-v S0                        delay(50);//这个延时是非常必要的!                电子园51单片机学习网&Q7K,{dHwld
                        i--;
&hQ k\^2RV S$p:wI0                }
'P y`(D{;Kd0                while(i!=0);                            
khR}0fT9e0                
EEA h7~C0                delay(30);//必要的延时电子园51单片机学习网 a;jq^0x{d
        }电子园51单片机学习网xg.X BlKsC%mp
电子园51单片机学习网 m]"{r`-F;S
        
J#_/[ Q I3K_ G0        P1 = mode2;     //第三步:播放当前段  0xD0        A7--A0: 1101 0000  (A2、A5在应用中可直接接地)
'q;r(vyf6R0        
F j _%A*p;M0        PE = 0;
*rk?"[6F0        nop(10);电子园51单片机学习网z,iK~2{~n
        PE = 1;                                    
(I@B6U!A K)||0        //P1 = 0XFF;        电子园51单片机学习网5QG9fgA
        
N@L5k:J)z9x @0        while(REC_LED==1){;}//等待播放
:n:EyII0        while(REC_LED==0){;}//等待播放结束电子园51单片机学习网8Vm6g~U%O*b0e,l&ce

9Gs*R%R,|6^apq Zp0}
7x%`-F Lo$n;^Gn0电子园51单片机学习网az#dRAsl;P5M
//----------------------------软件延时函数----------------------------电子园51单片机学习网q9}'s N.Z+S0\ |
//50ms延时电子园51单片机学习网-{EsD6C8h
void delay5ms(void)
,D;^P'Rxk0{电子园51单片机学习网)Cb#IbMlh
 unsigned char TempCyc = 250;电子园51单片机学习网V*s D`(\.?
 while(TempCyc--);电子园51单片机学习网)FR!iEs X#X
}电子园51单片机学习网 m|U9Q8sr$L@
电子园51单片机学习网L*[y4c5L`f0tv
void delay(unsigned int x)
Fq3C$Ct5ce U0{电子园51单片机学习网0vKu])KU%u `
        do
Ye4i5Ck'US+Q0        {电子园51单片机学习网 eY's*U"h.Xmk
                delay5ms();delay5ms();delay5ms();x--;
6I.{q%| A(|0        }
HB3RhrJ8d0o0        while(x!=0);
1f-~,hY"\Q)X)v0}电子园51单片机学习网 M wM0r&{S|W

`f5fu2Lx$NRNT1E0void nop(unsigned char i)
3Bf'tm*z_1U o2Br0{
r P!M,M8Wh0        do
'F,^SX)R \+pW0        {
S[ \@ zb0                _nop_();电子园51单片机学习网 ~IuM0j(`U%oT
                i--;电子园51单片机学习网`j#n~r[X.i K
        }电子园51单片机学习网 C~b*^G2od"Hh3u
        while(i!=0);        
*WT h3N1GkT.o0}
w,Lg0pz:X\0电子园51单片机学习网'Mk(dW(B


上一篇: stm32应用例程 下一篇: 基于AT89C51单片机设计的简易智能机器人

分享 举报