uchar code dtmf[16]={0x0a,1,2,3,4,5,6,7,8,9,0x0d,0x0e,0x0f,0x00,0x0b,0x0c};<br />uchar code rdtmf[16]={0x0d,1,2,3,4,5,6,7,8,9,0,0x0e,0x0f,0x0a,0x0b,0x0c};<br /><br />sbit wr=P1^0;//mt8880读写控制<br />sbit cs8880=P1^1;//mt8880片选<br />sbit rs=P1^2;//mt8880寄存器控制<br />sbit o2=P1^3;//mt8880读写数据锁存<br /><br /><br /> W8880(1,0x0c);//初始化<br /> W8880(1,0x01);//初始化<br /><br /><br />char Rd8880(uchar data mode) /*读状态mode=1/数据mode=0*/<br />{<br /> uchar data i;<br /> wdi=~wdi;<br /> cs8880=0;<br /> rs=(bit)mode;<br /> wr=1;<br /> o2=1;<br /> P0=0xff;<br /> i=P0;<br /> o2=0;<br /> cs8880=1;<br /> o2=1;<br /> i=i&0x0f;<br /> if(mode)<br /> return i;<br /> else<br /> return rdtmf;<br />}<br /><br />void Wr8880(uchar data mode,uchar data t) /*写入设置mode=1/数据mode=0*/<br />{<br /> wdi=~wdi;<br /> cs8880=0;<br /> rs=(bit)mode;<br /> wr=0;<br /> o2=1;<br /> if(mode)<br /> P0=t;<br /> else<br /> P0=dtmf[t];<br /> o2=0; <br /> wr=1;<br /> cs8880=1;<br /> o2=1;<br />}<br /><br />void Dtmf_Txd(uchar dtmf)/*发送1个dtmf码*/<br />{ <br /> uchar data kk;<br /> wdi=~wdi;<br /> kk=dtmf;<br /> Wr8880(0,kk); /*是数字,发送*/<br /> Wr8880(1,0x05);<br /> Delay_Msec(100);/*发送结束符*/<br /> Wr8880(1,0x04);<br /> Delay_Msec(100);/*发送结束符*/<br />}<br /><br />uchar Dtmf_Rxd() /*接收1个dtmf码*/<br />{<br /> uchar data i;<br /> P0=0xff;<br /> TL1=0x00;<br /> TH1=0x4c; <br /> sec_1=0;<br /> sec=0; <br /> TR1=1;<br /> i=0xff;<br /> do<br /> {<br /> if(!int8880)<br /> {<br /> i=Rd8880(1);<br /> i=Rd8880(0);<br /> break;<br /> }<br /> wdi=~wdi; <br /> }<br /> while(sec<5);//Wait 5s<br /> if(i==0xff)<br /> return(i);<br /> else<br /> {<br /> return(i);/*返回数据*/<br /> }<br />} <br />
|