|
#include "main.h" hS8M|_ npltsK): mMwV5\( bit bSysHalfSec; 4"kc(J`c u8 TimeWaitCnt = 0; 6Q7=6 JI]Lz1i v)_c*+6u u8 code PrevFile[] = {0xAA, 0x05,0x00, 0xAF};/*此数组指令可以直接由上位机生成,复制过来即可 */ eLPtdP5k u8 code NextFile[] = {0xAA, 0x06, 0x00, 0xB0}; O=7S=Rm4& u8 code Path[] = {0xAA, 0x08, 0x10, 0x02, 0x2F, 0xB9, 0xE3, 0xB8, 0xE6, 0x2A, 0x2F, 0xD0, 0xA1, 0xC3, 0xD7, 0x2A, 0x4D, 0x50, 0x33, 0x8B, }; // flash /广告*/小米*MP3 \ YF@r7 dY&v(~&;] ,.p
36ZLP 5X)QW5A l+F29_o# }.)R#hG? /B?wn=][ /*************************************************************************************** G{fPQ= &,%n Nmz5:Rq 本程序为MP3串口模块测试程序C51版本,测试芯片采用 STC12C5A32S2,外部晶振,11.0592MHZ t;VMtIW+E 串口设置:9600 )jgz(\KZ ME]4tu ;X+tCkzF DCiU?u~ tqh)yr; ]rj~3du\ 0vfMJzk **************************************************************************************/ vc|tp_M67 XLpn3sX$ }EwE#sZ# u8 UartData = 0xff; 1q!k#Cliu /***************************************************************************** #M!$CGi ( 函 数 名 : Timer0Init ffL]_E 功能描述 : 定时器初使化 定时2毫秒@11.0592MHz A"M;kzAfHM 输入参数 : void U.SC,;N^ 输出参数 : 无 rBmW%Gv 返 回 值 : k8}fKVU; 调用函数 : 4z5qXI/<m4 被调函数 : >oJabR ZrEou}z(* jc_k\ 修改历史 : J[?oV;O 1.日 期 : 2013年3月26日 33lh~+C 作 者 : Blueice bS8$[7OhX 修改内容 : 新生成函数 )?SF IQ= qbq2Bi'a L@[}sMdq( *****************************************************************************/ N7"cMAs\G void Timer0Init ( void ) 5,MM`:{{ { =p[Sd*d AUXR |= 0x80; /*定时器时钟1T模式 */ S;Sy.Lp TMOD &= 0xF0; /*设置定时器模式 */ 4K:Aqqhds TMOD |= 0x01; /*设置定时器模式 */ 2( GYk TL0 = 0x9A; /*设置定时初值 */ n-M6~ TH0 = 0xA9; /*设置定时初值 */ &&<l}E TF0 = 0; /*清除TF0标志 */ SHPDbBS TR0 = 1; /*定时器0开始计时 */ ',[AKXJ ET0 = 1; 5Xxdm-0 } ?E!M%c@, /***************************************************************************** >wqWIw.w> 函 数 名 : SysInit uaP5(hUI 功能描述 : 系统初使化 -:_3N2U=+ 输入参数 : void nnRb 输出参数 : 无 [^a7l$fmi 返 回 值 : }KUK|p5 调用函数 : j-J/yhWO& 被调函数 : )UU`uzU;u \bF<f02P #s\yO~F- 修改历史 : qm_r~j 1.日 期 : 2013年3月24日 ux^rF 作 者 : Blueice =jm\8sl~~ 修改内容 : 新生成函数 Y]6dYq{k w8q
2f-K- w$&;s<0 *****************************************************************************/ e`LvHU_0 void SysInit ( void ) #o~C0`8!B= { S3HyB
b Timer0Init(); +}udIi3:l UartInit(); a6h+?Q7uF EA = 1;/*开总中断 */ J0&-UnJ } 9UteD@* /***************************************************************************** %=K [C 函 数 名 : Delay1us J=kf KQV 功能描述 : 1微秒延时函数 Y#9bM$x7 输入参数 : int T GK6~~ga= 输出参数 : 无 M7Xn=jc 返 回 值 : _
j'm2BAO 调用函数 : ib> ~3s; 被调函数 : { **W7\h PL31(!`@d s4f{ziLp 修改历史 : '"Uhw$#t 1.日 期 : 2016年2月19日 <M5fk?n,| 作 者 : wskblueice ,qB@agjvo< 修改内容 : 新生成函数 By[M|4a 4,YL15. hDg"?{ *****************************************************************************/ (ruMOKW void Delay1us ( int T ) C
%j%>X` { XLYGhM T = T - 70; k=p[Mlic/ do V#Y"0l+~ { * _usVg ; gE*7[*2?t } u^'X>n)oL# while ( T-- ); h{\S '8 } aS>cXJ;= #define sda P01 /*一线串口发送引脚 */ %<O~eXY /***************************************************************************** f*xv#G 函 数 名 : SendData Ue`Y>T7+! 功能描述 : 一线串口发送函数 BVus3Y5IJQ 输入参数 : u16 N M= 3w 输出参数 : 无 Ed-3-vJej6 返 回 值 : ^)`e}} 调用函数 : kQ2WdpZ/ 被调函数 : {5ehm \?Xoa"^ qv:DpK 修改历史 : uB6Mjdp6 1.日 期 : 2014年8月17日 ;jPiD`Kyv 作 者 : wskblueice psiuoYf 修改内容 : 新生成函数 ]70ZerQ~L oxnI/Z <wd;W;B *****************************************************************************/ Ut/%+r"s void SendData ( u8 addr ) Be\@n xV[ { m'
|wlI[lq u8 i; `q | )_ fceO|mSz_ MlS5/9m@^ EA = 0;/*发送时关掉中断,防止中断影响时序 */ 3-Xd9ou "So"oT1 xjAU
Csq sda = 1;/*开始拉搞 */ /74h+.amg Delay1us ( 1000 ); X -=M>H^ sda = 0;/*开始引导码*/ Gv#bd05X Delay1us ( 2200 );/*此处延时最少要大于2ms,此参数延时为310ms */ nC?Lz1re $|[N3 B
o%Sl for ( i = 0; i < 8; i++ ) /*总共8位数据 */ b53s@7/mq { w~=xO_% sda = 1; c7[Ba\Cr4h if ( addr & 0x01 ) /*3:1表示数据位1,每个位用两个脉冲表示 */ 3'0Jn6( { Fs =)*6}& Delay1us ( 500 ); \W=Z`w3 sda = 0; x]R0zol Delay1us ( 210 ); %z.d;[Hs } P)Oe?z;G? else /*1:3表示数据位0 ,每个位用两个脉冲表示 */ +n%8*F& { +o0yx U
7t Delay1us ( 210 ); p"H/N_b4 sda = 0; cBOt=vg,5 Delay1us ( 500 ); ~*^o[~x]\ } >@-.rkd( addr >>= 1; ,iZKw8]f } :hWG:` sda = 1; xh25 *y EA = 1; {%&04yq+ } zYWVz3l /***************************************************************************** bTAY5\wB 函 数 名 : UartSendData Yn?Xo_Y 功能描述 : 两线串口发送指令 ]ab q$Y' 输入参数 : u8 *Buff *Utx0Me 输出参数 : 无 Tfv@oPu 返 回 值 : J*6B~)Sp@ 调用函数 : _~P&8 被调函数 : m*i,|{UZ E7w^A RjrQDh|(( 修改历史 : $GhL-sqm 1.日 期 : 2016年5月1日 @$%.iQ7A; 作 者 : wskblueice ;'[?H0Jw' 修改内容 : 新生成函数 %@q2 .vi0DuD6 fwUF5Y *****************************************************************************/ ^R(=4%8%" void UartSendData ( u8 *Buff, u8 Len ) yB{1&S5C { _c:th{* u8 i; ;/IXw>O(/ for ( i = 0 ; i < Len ; i++ ) m?8o\|i, { R;&k/v UartPutByte ( Buff ); IEkbVIA( } f^IB:e#j; } CkV -L4Jq /***************************************************************************** `@u9 fx. 函 数 名 : main 4V
mUTMY 功能描述 : 系统主循环 W,!7_nl"u 输入参数 : void #P!M"_z 输出参数 : 无 '9&@?P; 返 回 值 : 28-z 调用函数 : D})12qB;u9 被调函数 : zQu9LN Z;0<k;#T(p sP=^5K`g 修改历史 : V<PH5'^$j 1.日 期 : 2013年2月21日 )?LZg<< 作 者 : Blueice W58%Zz4a 修改内容 : 新生成函数 WK#%G OekE]`~w /pLf?m9 *****************************************************************************/ L(1} PZ void main ( void ) nCA~=[&H { AOV{@b( :vaVghN\ %`/F>` SysInit(); aQ&K a P0M0 |= BIT ( 0 ) | BIT ( 1 ); L[`8 :}M UartSendData ( Path, 20 ); ^L.'At while ( 1 ) $ma@z0%8} {
ZcTjOy? if ( TimeWaitCnt == 4 ) /*每隔两秒会自动发下一曲指令 */ 'coY`B; 8 { pXA|'U5] TimeWaitCnt = 0; giesof SendData ( 0x15 );//next file C!6D /S //UartSendData ( NextFile,4 ); 3&+nV1 }
u6MU
@? } w:=:D=xH2 } ETdN<}m /***************************************************************************** r{Mn{1:O 函 数 名 : tm0_isr 'cc{sjG 功能描述 : 定时中断 Q`-Xx 输入参数 : 无 {qCFd 输出参数 : 无 HoeW6U V 返 回 值 : qc';< 调用函数 : >8$Lqj^i 被调函数 : BV}sN{ Ya!PV&"Z ?_T[]I' 修改历史 : m )r, 1.日 期 : 2013年3月26日 QDKY7"H 作 者 : Blueice s={IKU&m[ 修改内容 : 新生成函数 wZKmU @`iz0DPG?Y um2}XI *****************************************************************************/ Ip *8R]W void Timer0_isr() interrupt 1 ]xbMMax { 4VC8#x1 static u8 TimeCnt; &78lep =&DuQvN, 5%@~"YCo TL0 = 0x9A; /*设置定时初值 */ ,V zbKx, TH0 = 0xA9; /*设置定时初值 */ j^h:*rw ni<\AF]` nu2m5RYx TimeCnt++; 6X!jNh$oF if ( ( TimeCnt % 5 ) == 0 ) 2~V"[26t { K=pG,[ChA z2#k/3%o= :0bjPQj 7)FYAk$@ AWAJ*6Z } ZQ-6n1O if ( ( TimeCnt % 250 ) == 0 ) 1Cw$^jd { / neY2D6 TimeCnt = 0; 19%zcYTe bSysHalfSec = !bSysHalfSec; ~w.y9)", P00 = !P00; Xc~BHEp TimeWaitCnt++; !:}m-iqQ1 } g(G$*#}o8A E*s _Y (aq-aum-I } KJs`[,;< ?>gr9w\ hb9HVj - 2~vvE
程序截图 Mh{;1$j#
wbg?IvY[ - su\`E&0V+
电路图 [lu+"V,<LJ
|