📄 mt8880.h
字号:
#ifndef __MT8880_h__
#define __MT8880_h__
//本程序用到了bit.h头文件,
/******MT8880与MCU接口声明**********************
************************************************/
//D0,D1,D2,D3-->P0.4,P0.5,P0.6,P0.7 (数据反了)
#define DQ1 P0_4
#define DQ2 P0_5
#define DQ3 P0_6
#define DQ4 P0_7
#define CP_8880 P0_3 //模式选择端口
#define CLK_8880 P0_2 //MT8880控制时钟
#define RS0_8880 P1_4 //寄存器选择,与RW_8880配合选择
#define RW_8880 P1_5 //对MT8880读写操作
#define CS_8880 P1_6 //对MT8880读写操作
/******函数声明*******************************
***********************************************/
void initialize(void); //MT8880初始化
void tran_init(void); //MT8880发送DTMF初始化
void transmit(unsigned char data0);//MT8880发送数据程序
//void auto_show(uchar show_data);
//*************delay_ms********************************
void delay_10usMT8880(unsigned char x)
{
while(x--)
{
// ClearWatchDog();
*P_Watchdog_Clear=C_WDTCLR;
}
}
void delay_msMT8880(unsigned char cnt)
{
unsigned char i;
do {
i = 4;
do {
delay_10usMT8880(39);
} while(--i);
} while(--cnt);
}
/******MT8880初始化************************
******************************************/
void initialize(void)
{
CS_8880=0;
RS0_8880=1;
RW_8880=1;
CLK_8880=1;
delay_msMT8880(10);
CLK_8880=0;
delay_msMT8880(10);// P1=0x3f;/* 读SR */
RW_8880=0;
CLK_8880=1;
delay_msMT8880(10);
//P1=0x00;// CRA=0000
DQ1=0;DQ2=0;DQ3=0;DQ4=0;
delay_msMT8880(10);
CLK_8880=0;
delay_msMT8880(10);
CLK_8880=1;
delay_msMT8880(10);
//P1=0x00;/* CRA=0000
DQ1=0;DQ2=0;DQ3=0;DQ4=0;
delay_msMT8880(10);
CLK_8880=0;
delay_msMT8880(10);
CLK_8880=1;
delay_msMT8880(10);
//P1=0x08;/* CRA=1000
DQ4=1;DQ3=0;DQ2=0;DQ1=0;
delay_msMT8880(10);
CLK_8880=0;
delay_msMT8880(10);
CLK_8880=1;
delay_msMT8880(10);
//P1=0x00;/* CRB=0000
DQ4=0;DQ3=0;DQ2=0;DQ1=0;
delay_msMT8880(10);
CLK_8880=0;
delay_msMT8880(10);
RW_8880=1;
CLK_8880=1;
delay_msMT8880(10);
CLK_8880=0;
delay_msMT8880(10);// P1=0x3f;/* 读SR */
CS_8880=1;
/*
CS_8880=0;
//P3=0xff;
//P0=0XFF;
// DQ1=1;DQ2=1;DQ3=1;DQ4=1;
RS0_8880=1;RW_8880=1;
CLK_8880=1;
delay_msMT8880(2);
CLK_8880=0;
delay_msMT8880(20);
//P3=0x70; // CRA=0000
DQ1=0;DQ2=0;DQ3=0;DQ4=0;
CP_8880=1;CLK_8880=1;RW_8880=0;RS0_8880=1;
CLK_8880=1;
delay_msMT8880(2);
CLK_8880=0;
delay_msMT8880(20);
//P3=0x70; //* CRA=0000
DQ1=0;DQ2=0;DQ3=0;DQ4=0;
CP_8880=1;CLK_8880=1;RW_8880=0;RS0_8880=1;
CLK_8880=1;
delay_msMT8880(2);
CLK_8880=0;
delay_msMT8880(20);
//P3=0x71; // CRA=1000
DQ1=0;DQ2=0;DQ3=0;DQ4=1;
CP_8880=1;CLK_8880=1;RW_8880=0;RS0_8880=1;
CLK_8880=1;
delay_msMT8880(2);
CLK_8880=0;
delay_msMT8880(20);
//P3=0x71; //* CRB=0000
DQ1=0;DQ2=0;DQ3=0;DQ4=1;
CP_8880=1;CLK_8880=1;RW_8880=0;RS0_8880=1;
CLK_8880=1;
delay_msMT8880(2);
CLK_8880=0;
delay_msMT8880(20);
//P3=0xff; //* 读SR
DQ1=1;DQ2=1;DQ3=1;DQ4=1;
RS0_8880=1;RW_8880=1;
CLK_8880=1;
delay_msMT8880(2);
CLK_8880=0;
delay_msMT8880(20);
CS_8880=1;
*/
}
/******MT8880发送DTMF初始化****************
******************************************/
void tran_init(void)
{/*
CS_8880=0;
//P3=0x79; /* CRA=1001
DQ1=1;DQ2=0;DQ3=0;DQ4=1;
CP_8880=1;CLK_8880=1;RW_8880=0;RS0_8880=1;
CLK_8880=1;
delay_10usMT8880(10);
CLK_8880=0;
delay_10usMT8880(100);
//P3=0x78; //* CRB=0000 普通双音频模式*/ /*注意:0001突发模式
DQ1=1;DQ2=0;DQ3=0;DQ4=0;
CP_8880=1;CLK_8880=1;RW_8880=0;RS0_8880=1;
CLK_8880=1;
delay_10usMT8880(10);
CLK_8880=0;
delay_msMT8880(200);
CS_8880=1;
*/
CS_8880=0;
RS0_8880=1;
RW_8880=0;
CLK_8880=1;
delay_msMT8880(10);
//P1=0x09;/* CRA=1001 */
DQ4=1;DQ3=0;DQ2=0;DQ1=1;
delay_msMT8880(10);
CLK_8880=0;
delay_msMT8880(10);
CLK_8880=1;
delay_msMT8880(10);
//P1=0x01; //* CRB=0001 //-----------------
DQ4=0;DQ3=0;DQ2=0;DQ1=0; //0000为突发方式,0001为一直发方式(不改变他就一直自动发),
delay_msMT8880(10);
CLK_8880=0;
CS_8880=1;
}
/******MT8880发送数据程序******************
******************************************/
/*
void transmit(unsigned char data0)
{
CS_8880=0;
//P3=data0; //* 发送数码
DQ1=data0&0x01;
DQ2=(data0>>1)&0x01;
DQ3=(data0>>2)&0x01;
DQ4=(data0>>3)&0x01;
RS0_8880=0;
RW_8880=0;
CLK_8880=1;
delay_msMT8880(10); // 延时
CLK_8880=0;
delay_msMT8880(50);
//P3=0xff;
// DQ1=1;DQ2=1;DQ3=1;DQ4=1;
RS0_8880=1;RW_8880=1;
CLK_8880=1;
delay_10usMT8880(10);
CLK_8880=0;
delay_msMT8880(1);
CS_8880=1;
}
*/
/* 发送操作子函数 */
void transmit(unsigned char data0)
{
CS_8880=0;
RS0_8880=0;
RW_8880=0;
CLK_8880=1;
delay_msMT8880(10);
//P1=data0; //* 发送数码
switch(data0)
{
case 1:
DQ1=1;
DQ2=0;
DQ3=0;
DQ4=0;
break;
case 2:
DQ1=0;
DQ2=1;
DQ3=0;
DQ4=0;
break;
case 3:
DQ1=1;
DQ2=1;
DQ3=0;
DQ4=0;
break;
case 4:
DQ1=0;
DQ2=0;
DQ3=1;
DQ4=0;
break;
case 5:
DQ1=1;
DQ2=0;
DQ3=1;
DQ4=0;
break;
case 6:
DQ1=0;
DQ2=1;
DQ3=1;
DQ4=0;
break;
case 7:
DQ1=1;
DQ2=1;
DQ3=1;
DQ4=0;
break;
case 8:
DQ1=0;
DQ2=0;
DQ3=0;
DQ4=1;
break;
case 9:
DQ1=1;
DQ2=0;
DQ3=0;
DQ4=1;
break;
case 10:
DQ1=0;
DQ2=1;
DQ3=0;
DQ4=1;
break;
case 11:
DQ1=1;
DQ2=1;
DQ3=0;
DQ4=1;
break;
case 12:
DQ1=0;
DQ2=0;
DQ3=1;
DQ4=1;
break;
default:break;
}
/*
DQ1=data0&0x01;
DQ2=(data0>>1)&0x01;
DQ3=(data0>>2)&0x01;
DQ4=(data0>>3)&0x01;
*/
delay_msMT8880(10); //* 延时
CLK_8880=0;
//P1=0x3f;//* 读SR
delay_msMT8880(50);
CS_8880=1;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -