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

📄 zldlb.c

📁 直流电压表采用ICL7135,四位半AD,静态扫描,单片机采用AT89S52进行处理
💻 C
📖 第 1 页 / 共 2 页
字号:
/************Copyright (c)**************************
           
程    序:
创建时间:
***************************************************/

//库函数声明//
#include <stdio.h>//I/O库函数原型声明P368
#include <math.h>//数学函数库
#include <intrins.h>//内部函数库
#include <reg51.h> 

//管脚定义//
sbit     rxd=P3^0;
sbit     txd=P3^1;
sbit     c4051a=P3^5;    //量程片选信号
sbit     c4051b=P3^6;
sbit     c4051c=P3^7;
sbit     scl=P2^6;      //CAT1161接口时钟
sbit     sda=P2^7;      //CAT1161接口数据/看门狗
//sbit     dat=P2^4;      //显示数据端口
//sbit     clke=P2^5;     //显示时钟端口
sbit     key1=P2^0;
sbit     key2=P2^1;
sbit     key3=P2^2;
sbit     key4=P2^3;
sbit     d5=P1^0;       //7135位信号高位
sbit     busy=P1^1;
sbit     pol=P1^2;
sbit     run=P1^3;//手动自动选择
sbit     unr=P1^4;
sbit     rt485=P1^5;
sbit     bell=P1^6;    //蜂鸣器输出
sbit     overk=P1^7;   //保护控制高电平有效
sbit     stb=P3^2;
sbit     ovr=P3^3;     //超量程
sbit     over=P3^4;    //继电器输出低电平有效
sbit     b1=P0^0;      //8421码数据
sbit     b2=P0^1;
sbit     b4=P0^2;
sbit     b8=P0^3;
sbit     d4=P0^4;     //7135位信号
sbit     d3=P0^5;
sbit     d2=P0^6;
sbit     d1=P0^7;
bit      timeout=0;
sbit	CH452_SCL=P2^4;
sbit	CH452_SDA=P2^5;

//全局变量声明//
#define    ok    1;
#define    err   0;
#define		DELAY_1US		{_nop_();_nop_();}
/* 2线接口的位操作,与单片机有关 */
#define		CH452_SCL_SET		{CH452_SCL=1;}
#define		CH452_SCL_CLR		{CH452_SCL=0;}
#define		CH452_SDA_SET		{CH452_SDA=1;}
#define		CH452_SDA_CLR		{CH452_SDA=0;}
#define		CH452_SDA_IN		(CH452_SDA)
/* 与单片机有关,与中断连接方式有关 */
#define		DISABLE_INTERRUPT	{EX1=0;}
#define		ENABLE_INTERRUPT	{EX1=1;}
#define		CLEAR_INTER_FLAG	{IE1=0;}
unsigned  char   led[6];
unsigned  char   lcbz;
unsigned  char   txbz;
unsigned  char   rdata;
unsigned  char   keydig;
unsigned  char   cbz;
unsigned  char   xbz;
unsigned  char   idata  memory[16][5];
unsigned  char   rdat[6];
unsigned  char   dz;
unsigned  char  key0;
unsigned  char  fff=0;
unsigned  char  led2[6];

void  rst_wdog(void)
{
   sda=0;
   _nop_();
   _nop_();
   sda=1;
}
/******************************************************
*名称:delay()
*功能:延时程序。
******************************************************/
void  delay(unsigned char  j)
{
  
  unsigned char  k,l;
   rst_wdog();
  for(l=0;l<=j;l++)
    for(k=0;k<=250;k++);
	 
}


/******************************************************
*名称:init_special_interrupts()
*功能:设置外部中断1的触发方式,并开放中断。
******************************************************/
void init_special_interrupts(void)
{
  IT1 = 0;//电平触发
  EX1 = 1;//开中断
  //PX1 = 1;//高级优先
}

/*******************************************************
*名称:int_t0()
*功能:定时中断程序
*******************************************************/
void int_t0() interrupt 1
{  
  fff=fff+1;
  if(fff==0x06)
  {
    txbz=0;
    rdata=0;
    bell=1;
    TH0=0x80;
    TL0=0x00;
    ET0=0;
    TR0=0;
    fff=0;
  }
  else
  {
    TH0=0x00;
    TL0=0x00;
  } 
}

/***************************************************************************
*名称:inter_isr()
*功能:外部中断1服务程序,提升档位。
***************************************************************************/
void inter_isr() interrupt 2
{ 
  c4051a=0;
  c4051b=1;
  c4051c=1; 
  lcbz=4;
  led[0]=0;
  led[1]=1;
  led[2]=2;
  led[3]=3;
  led[4]=4;
  led[5]=5;
}

/***************************************************************************
*名称:init_port()
*功能: 各类输出控制
***************************************************************************/
void init_port()
{ 
  //over=0;
  over=1;
  bell=1;
  overk=1;//导通
  rt485=0;//串口处于检测状态
  c4051a=0;
  c4051b=1;
  c4051c=1;
  run=1;
  lcbz=4;//最大量程档位
  c4051a=1;
   c4051b=0;
   c4051c=1;
   overk=1;
}
/***************************************************************************
*名称:init_series()
*功能:串口0初始化
***************************************************************************/
void init_series()
{
  //IP=0X10;//高级优先
  IE=0x90;
  TMOD=0x21;
  SCON=0x50;
  TH1=0xfd;
  TL1=0xfd;
  PCON=0;//SMOD=0不加倍
  rt485=0;//串口处于检测状态
  TR1=1;
  EA=1;
  ES=1;
}

/***************************************************************************
*名称:series_isr()
*功能:串口0中断接收
***************************************************************************/
void series_isr()interrupt 4
{
  unsigned  char  rec_temp;
  if(TI)
  {
    TI=0;  
  }
  else
  {
    RI=0;
    /*********************完成数据接收********************************/
    rec_temp=SBUF;
    if(rec_temp==0x01)
    {
      txbz=1; 
      //bell=0;
      TH0=0x80;
      TL0=0x00;
      ET0=1;
      TR0=1; 
    }
    if(txbz==1)
    {
      rdat[rdata]=rec_temp;
      rdata=rdata+1;
      if(rdata>5)
      {
        txbz=0;
      }
    }
  }
}
/***************************************************************************
*名称:send_series()
*功能:串口0发送子程序
***************************************************************************/
void send_series()
{
 
}


/***************************************************************************
*名称:read_dat()
*功能:读AD程序
***************************************************************************/
void read_dat(void)
{
  if(key0==0x0)
  {
    //手动
    if(keydig==0x0b)//4档
      {
      lcbz=4;
      c4051a=1;
      c4051b=0;
      c4051c=1;
      overk=1;//2v档
    //  d5=0;     
      rst_wdog();
      delay(100);
      }
   /* if(keydig==0x0b)//3档
    {
      lcbz=3;
	  c4051a=0;
      c4051b=1;
      c4051c=1;
      overk=1;//200v档
   //   d5=0;      
      rst_wdog();
      delay(100);
    }
*/
    if(keydig==0x0d)//2档
    {

      lcbz=2;
      c4051a=1;
      c4051b=1;
      c4051c=0;
      overk=1;//20v档
   //   d5=0;      
      rst_wdog();
      delay(100);
    }
    if(keydig==0x0e)//1挡
    {
      lcbz=1;
      c4051a=1;
      c4051b=1;
      c4051c=1;
      overk=0;//2v档
     // d5=1;      
      
      rst_wdog();
      delay(100);
    }
  }
  else//自动量程
  {
 /*   if(unr==1) 
    {
     if(lcbz==2)
     {
    lcbz=1;
    c4051a=0;
    c4051b=0;
    c4051c=0;
    overk=1;//2v档
    rst_wdog();
    delay(100);
     } 
	if(lcbz==3)
   	{
    lcbz=2;
    c4051a=0;
    c4051b=0;
    c4051c=1;
    overk=0;//20v档
    rst_wdog();
    delay(100);	
	}
	
	if(lcbz==4)
    {
	lcbz=3;
	c4051a=1;
    c4051b=0;
    c4051c=0;
    overk=0;//200v档
    rst_wdog();
    delay(100);	
	}
	}*/
    if(ovr==1)
	{
 	if(lcbz==3)
	{
     lcbz=4;
     c4051a=1;
     c4051b=0;
     c4051c=1;
     overk=1;//2v档  
     rst_wdog();
     delay(100);
	}
    if(lcbz==2)
	{
    lcbz=3;
    c4051a=0;
    c4051b=1;
    c4051c=1;
    overk=1;//200v档  
    rst_wdog();
    delay(100);	
	}
   if(lcbz==1)
   {
    lcbz=2;
    c4051a=1;
    c4051b=1;
    c4051c=0;
    overk=1;//20v档
    rst_wdog();
    delay(100);
   }
  }
 }
  while(busy==1)
  {
    rst_wdog();
  }
  while(d5==0)
 {
 }
  while(stb==0)
  {
  }
  led2[4]=P0&0x0f;
  while(d4==0)
  {
  }
  while(stb==0)
  {
  }
  led2[3]=P0&0x0f;
  while(d3==0)
  {
  }
  while(stb==0)
  {
  }
  led2[2]=P0&0x0f;
  while(d2==0)
  {
  }
  while(stb==0)
  {
  }
  led2[1]=P0&0x0f;//3
  while(d1==0)
  {
  }
  while(stb==0)
  {
  }
  led2[0]=P0&0x0f;//4
  /*************判断是否欠量程**********************************************/
   if(key0==0x08)
  {//量程处理
    if(unr==1) 
    {
     if(lcbz==2)
     {
    lcbz=1;
    c4051a=1;
    c4051b=1;
    c4051c=1;
    overk=0;//2v档
    rst_wdog();
    delay(100);
     } 
	if(lcbz==3)
   	{
    lcbz=2;
    c4051a=1;
    c4051b=1;
    c4051c=0;
    overk=1;//20v档
    rst_wdog();
    delay(100);	
	}
	
	if(lcbz==4)
    {
	lcbz=3;
	c4051a=0;
    c4051b=1;
    c4051c=1;
    overk=1;//200v档
    rst_wdog();
    delay(100);	
	}
	}
  }



  /*************判断正负号**************************************************/
  if(pol==1)
  {
    led[5]=16;//负号
  }          
  else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -