📄 366.c
字号:
//----------------------------------------晶振480K 波特率7500--------------------------------------------//
//#include "stdio.h"
#include "string.h"
#include <reg52.h>
#include <intrins.h>
#include <math.h>
//---------------------------------------定义部分----------------------------------------------
//P1
sbit MT8880_D0= P1^4; //OUT/IN 双向数据总线 5脚
sbit MT8880_D1= P1^5; //OUT/IN 双向数据总线 6脚
sbit MT8880_D2= P1^6; //OUT/IN 双向数据总线 7脚
sbit MT8880_D3= P1^7; //OUT/IN 双向数据总线 8脚
//P3
sbit MT8880_RW= P3^2; //OUT 读写选择控制 12脚
sbit MT8880_CP2= P3^3; //OUT 8880的系统时钟 13脚
sbit MT8880_CS= P3^4; //OUT 14脚
sbit MT8880_RS0= P3^5; //OUT 变低时,进入现场监听状态 15脚
sbit sda= P3^6; //OUT I2C总线控制线 sda是24C02的5脚 16脚
sbit scl= P3^7; //OUT I2C总线数据线 scl是24C02的6脚 17脚
//P0
sbit KD9561_START= P0^2; //OUT 启动KD9561输出 37脚
//P2
//sbit BJ= P2^0; //OUT 报警LED指示,并送给LM393 21脚
sbit LINE_ALARM= P2^1; //IN 电话线路故障报警开关 22脚
sbit ToneTest= P2^2; //IN 峰值为3.5V的铃流脉冲信号检测 23脚
sbit J_LineToPhone= P2^3; //OUT 报警时,驱动继电器切断本地电话和外线的联系,同时模拟摘机 24脚
sbit ZJ_2= P2^6; //out 共同摘机 27脚
int JISHU;
unsigned char POINTER_24C02,i;
typedef unsigned char Number[10]; //定义一个10字节长的数组类型,用来放6组电话,一组密码,次数振铃,报警延迟时间
typedef unsigned char Number_P[5];
struct ReadArray
{
unsigned char Number24[22];
}READARRAY;
sbit aa7=ACC^7;
sbit aa6=ACC^6;
sbit aa5=ACC^5;
sbit aa4=ACC^4;
sbit aa3=ACC^3;
sbit aa2=ACC^2;
sbit aa1=ACC^1;
sbit aa0=ACC^0;
//--------------------------------------函数部分-----------------------------------------------
void DELAY_50ms()
{
EA=0;
TMOD=0; //13位不重装定时器方式
TL0=48;
TH0=24;
TCON=0;
TR0=1; //定时器0启动,定时器1不启动
wait: if(TF0==0)
{
_nop_();
goto wait;
}
TCON=0;//停动定时器0
}
void MT8880_StatusRegister_READ()
{
MT8880_CP2=0;
MT8880_RW=1; //读状态寄存器
MT8880_RS0=1;
MT8880_CS=0;
MT8880_D0=1;
MT8880_D1=1;
MT8880_D2=1;
MT8880_D3=1;
MT8880_CP2=1;
}
void MT8880_DataRegister_READ()
{
MT8880_CP2=0;
MT8880_RW=1; //读接收数据寄存器
MT8880_RS0=0;
MT8880_CS=0; //给时钟信号
MT8880_D0=1;
MT8880_D1=1;
MT8880_D2=1;
MT8880_D3=1;
MT8880_CP2=1; //读状态寄存器值到D0-D3口
}
void MT8880_ControlRegister_Initialize()
{
MT8880_CP2=0;
MT8880_RS0=1; //du 1
MT8880_RW=1;
MT8880_CS=0;
MT8880_D0=1;
MT8880_D1=1;
MT8880_D2=1;
MT8880_D3=1;
MT8880_CP2=1;
MT8880_CP2=0;
MT8880_CS=1;
MT8880_RS0=1; //xie 1
MT8880_RW=0;
MT8880_CS=0;
MT8880_D0=0;
MT8880_D1=0;
MT8880_D2=0;
MT8880_D3=0;
MT8880_CP2=1;
MT8880_CP2=0;
MT8880_CS=1;
MT8880_RS0=1; //xie2
MT8880_RW=0;
MT8880_CS=0;
MT8880_D0=0;
MT8880_D1=0;
MT8880_D2=0;
MT8880_D3=0;
MT8880_CP2=1;
MT8880_CP2=0;
MT8880_CS=1;
MT8880_RS0=1; //xie3
MT8880_RW=0;
MT8880_CS=0;
MT8880_D0=0;
MT8880_D1=0;
MT8880_D2=0;
MT8880_D3=1;
MT8880_CP2=1;
MT8880_CP2=0;
MT8880_CS=1;
MT8880_RS0=1; //xie4
MT8880_RW=0;
MT8880_CS=0;
MT8880_D0=0;
MT8880_D1=0;
MT8880_D2=0;
MT8880_D3=0;
MT8880_CP2=1;
MT8880_CP2=0;
MT8880_CS=1;
MT8880_RS0=1; //du 2
MT8880_RW=1;
MT8880_CS=0;
MT8880_D0=1;
MT8880_D1=1;
MT8880_D2=1;
MT8880_D3=1;
MT8880_CP2=1;
MT8880_CP2=0;
MT8880_CS=1;
MT8880_D0=1; //总线复位
MT8880_D1=1;
MT8880_D2=1;
MT8880_D3=1;
}
void MT8880_ControlRegister_Write()
{
MT8880_CS=1;
MT8880_RW=0; //写控制寄存器
MT8880_RS0=1;
MT8880_D0=1; //使能tone输出
MT8880_D1=0; //选用双音多频方式,不用CP方式
MT8880_D2=0; //此脚在实际电路中未接,不管
MT8880_D3=1; //本次操作CRA,下一个写操作选择CRB
MT8880_CS=0;
MT8880_CP2=1;//给时钟信号,写D0-D3口值到控制寄存器
MT8880_CP2=0;
MT8880_CS=1;
MT8880_RW=0; //写控制寄存器
MT8880_RS0=1;
MT8880_D0=0;
MT8880_D1=0;
MT8880_D2=0;
MT8880_D3=0;
MT8880_CS=0;
MT8880_CP2=1; //给时钟信号,写D0-D3口值到控制寄存器
MT8880_CP2=0;
MT8880_CS=1;
MT8880_D0=1; //总线复位
MT8880_D1=1;
MT8880_D2=1;
MT8880_D3=1;
}
void MT8880_WriteOne(unsigned char SendData) //使用入口参数,即要发送的数
{
MT8880_CS=1;
MT8880_CP2=0;
MT8880_RW=0; //写传输数据寄存器
MT8880_RS0=0;
switch(SendData)
{
case 10: MT8880_D0=0; MT8880_D1=1; MT8880_D2=0; MT8880_D3=1;break;
case 1: MT8880_D0=1; MT8880_D1=0; MT8880_D2=0; MT8880_D3=0;break;
case 2: MT8880_D0=0; MT8880_D1=1; MT8880_D2=0; MT8880_D3=0;break;
case 3: MT8880_D0=1; MT8880_D1=1; MT8880_D2=0; MT8880_D3=0;break;
case 4: MT8880_D0=0; MT8880_D1=0; MT8880_D2=1; MT8880_D3=0;break;
case 5: MT8880_D0=1; MT8880_D1=0; MT8880_D2=1; MT8880_D3=0;break;
case 6: MT8880_D0=0; MT8880_D1=1; MT8880_D2=1; MT8880_D3=0;break;
case 7: MT8880_D0=1; MT8880_D1=1; MT8880_D2=1; MT8880_D3=0;break;
case 8: MT8880_D0=0; MT8880_D1=0; MT8880_D2=0; MT8880_D3=1;break;
case 9: MT8880_D0=1; MT8880_D1=0; MT8880_D2=0; MT8880_D3=1;break;
case 11: MT8880_D0=1; MT8880_D1=1; MT8880_D2=0; MT8880_D3=1;break; // *
case 12: MT8880_D0=0; MT8880_D1=0; MT8880_D2=1; MT8880_D3=1;break; // #
}
MT8880_CS=0; //给时钟信号,写D0-D3口值到控制寄存器
MT8880_CP2=1;
MT8880_CP2=0;
MT8880_CS=1;
MT8880_D0=1; //写操作完后一定要总线复位
MT8880_D1=1;
MT8880_D2=1;
MT8880_D3=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -