⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 366.c

📁 该程序可作为386的接警程序使用
💻 C
📖 第 1 页 / 共 3 页
字号:
//----------------------------------------晶振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 + -