功能如下:
1、24VDC供电,输入端可识别4-20mA信号输入,可以根据用户任意设定电流值,进行继电器报警输出,输出形式常开+常闭;
2、用来实现高于某电流值继电器断开,当低于设定电流值继电器闭合,进而导通回路。
//#include
#include
#include
#define uchar unsigned char //宏定义字符型变量
#define uint unsigned int //宏定义整型变量 t
/*声明 SFR 相关 与 的 IAP*/
sfr IAP_DATA = 0xE2;
sfr IAP_ADDRH = 0xE3;
sfr IAP_ADDRL = 0xE4;
sfr IAP_CMD = 0xE5;
sfr IAP_TRIG = 0xE6;
sfr IAP_CONTR = 0xE7;
#define ADC_POWER 0x80 //ADC 电源控制位
#define ADC_FLAG 0x10 //ADC 转换结束标志位
#define ADC_START 0x08 //ADC 开始转换控制位
#define ADC_SPEEDLL 0x00 //210 个时钟周期转换一次
#define ADC_SPEEDL 0x20 //420 个时钟周期转换一次
#define ADC_SPEEDH 0x40 //630 个时钟周期转换一次
#define ADC_SPEEDHH 0x60 //840 个时钟周期转换一次
/********************************************************************
IO口定义
********************************************************************/
uchar s1=0;
bit write=0;
uint txian;
uint ADdate;
uchar txian1,dxian1;
uchar T0RH=0,T0RL=0;
uint ms=0;
uchar A1,A2,A3,A4;
uchar B1,B2;
uchar C1,C2,C3,C4;
bit bz=0;
sbit P10=P1^0;//数码管段
sbit P11=P1^1;//数码管段
sbit P12=P1^2;//数码管段
sbit P13=P1^3;//数码管段
sbit P14=P1^4;//数码管段
sbit P15=P1^5;//数码管段
sbit P16=P1^6;//数码管段
sbit P17=P1^7;//AD信号输入
sbit P30=P3^0;//按键输入
sbit P31=P3^1;//按键输入
sbit P32=P3^2;//数码管位
sbit P33=P3^3;//数码管位
sbit P34=P3^4;//数码管位
sbit P35=P3^5;//数码管位
sbit P37=P3^7; //继电器输出
bit ts=0;
bit bz1=0;
bit bz2=0;
/********************************************************************
定义 ISP/IAP/EEPROM 命令
*********************************************************************/
#define CMD_IDLE 0
#define CMD_READ 1
#define CMD_PROGRAM 2
#define CMD_ERASE 3
#define ENABLE_IAP 0x83//SYSCLK<12MH
#define IAP_ADDRESS 0x0000 //存储地址
/********************************************************************
禁用 ISP/IAP/EEPROM functionmake 单片机 在 一 安全 状态
*********************************************************************/
void IapIdle()
{
IAP_CONTR = 0; //
IAP_CMD = 0; //
IAP_TRIG = 0; //
IAP_ADDRH = 0x80; //
IAP_ADDRL = 0; //
}
/********************************************************************
读数据
*********************************************************************/
uchar IapReadByte(uint addr)
{
uchar dat;
IAP_CONTR = ENABLE_IAP;
IAP_CMD = CMD_READ;
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_TRIG = 0x46;
IAP_TRIG = 0xb9;
_nop_();
dat = IAP_DATA;
IapIdle();
return dat;
}
/********************************************************************
写数据
*********************************************************************/
void IapProgramByte(uint addr, uchar dat)
{
IAP_CONTR = ENABLE_IAP;
IAP_CMD = CMD_PROGRAM;
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_DATA = dat;
IAP_TRIG = 0x46;
IAP_TRIG = 0xb9;
_nop_();
IapIdle();
}
/********************************************************************
擦除数据
*********************************************************************/
void IapEraseSector(uint addr)
{
IAP_CONTR = ENABLE_IAP;
IAP_CMD = CMD_ERASE;
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_TRIG = 0x46;
IAP_TRIG = 0xb9;
_nop_();
IapIdle();
}
/********************************************************************
初始定义
*********************************************************************/
code uchar seg7code[10]={ 0x84,0xf6,0x8a,0xa2,0xf0,0xa1,0x81,0xb6,0x80,0}; //显示段码 数码管字跟
/********************************************************************
延时函数
*********************************************************************/
void delay(uchar t)
{
uchar i,j;
for(i=0;i
{
for(j=130;j>0;j--);
{ ;
}
}
}
/********************************************************************
显示函数 接通时间
*********************************************************************/
//void tong(uchar tdate) //显示函数
void tong() //显示函数
{
C3=txian%100/10;
C4=txian%10;
P32=0;P33=0;P34=0;P35=0;
P1=seg7code[0];
P32=1;P33=0;P34=0;P35=0;
delay(80);
P32=0;P33=0;P34=0;P35=0;
P1=seg7code[0];
P32=0;P33=1;P34=0;P35=0;
delay(80);
P32=0;P33=0;P34=0;P35=0;
P1=seg7code[C3];
P32=0;P33=0;P34=0;P35=1;
delay(80);
P32=0;P33=0;P34=0;P35=0;
P1=seg7code[C4];
P32=0;P33=0;P34=1;P35=0;
delay(80);
P32=0;P33=0;P34=0;P35=0;
}
void tong1() //显示函数
{
C3=A1%100/10;
C4=A1%10;
P32=0;P33=0;P34=0;P35=0;
P1=seg7code[0];
P32=1;P33=0;P34=0;P35=0;
delay(80);
P32=0;P33=0;P34=0;P35=0;
P1=seg7code[0];
P32=0;P33=1;P34=0;P35=0;
delay(80);
P32=0;P33=0;P34=0;P35=0;
P1=seg7code[C3];
P32=0;P33=0;P34=0;P35=1;
delay(80);
P32=0;P33=0;P34=0;P35=0;
P1=seg7code[C4];
P32=0;P33=0;P34=1;P35=0;
delay(80);
P32=0;P33=0;P34=0;P35=0;
}
/********************************************************************
AD转换初始化程序
*********************************************************************/
void InitADC()
{
P1 = P1M0 = P1M1 = 0xFf; //设置P1口为开漏模式,使用AD功能
ADC_DATA = 0; //AD数据寄存器清空
ADC_CONTR = ADC_POWER | ADC_SPEEDLL;//打开AD电源,转换周期210
delay(80); //延时
}
/********************************************************************
AD转换控制程序
***************************
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』