GYJ-0095_四路输入输出继电器工控板产品使用说明书 【简要说明】 一、尺寸:长145mmX宽90mmX高20mm
二、主要芯片:单片机STC89C52RC 继电器 光耦
三、工作电压:有直流12V及24V可选。
四、特点: 电路结构简单,稳定可靠,采用最新款STC单片机,运行速度快,单片机预留扩展接口。 1、具有四路输入信号指示灯,四路继电器吸合指示灯,电源指示灯。
2、板子功耗小于8W
3、额定切换电流10A以内,切换电压250V以内
4、单路最大切换功率500W 额定功率300W
5、继电器寿命1000000次以上。
6、电器绝缘电阻100M
7、触电耐压1000V
8、继电器最大吸合时间15mS毫秒
9、继电器最大释放时间5mS毫秒
10、工作温度-40度至+70度
11、工作湿度40%~80%RH
12、四路光电隔离输入,8路光电隔离输出
13、四输入低电平有效(即:NPN输入)
14、四路输出开关量输出(即:干接点输出)
15、具有MAX232通讯。
16、单片机所有IO口都引出,客户可以自己编程扩展功能
17、可以选择使用外部EEPROM 作为存储单元
18、电路具有,防反接保护、过流保护、续流保护、压敏保护等
19、单片机可以自行更换,可以选择替换型的STC系列单片机
20、我们提供电路相关的,原理图、例程、开发环境、下载软件等相关资料
适用场合:工业控制、产品开发、项目设计,自动化改造等
【标注说明】 【接线说明】 【输入控制设备】 【输出控制设备】
【输出举例说明】 【输出举例说明】(开关量输出、干接点输出) 【专业下载线接线说明】 【串口通信说明】也可以通过串口下载
【原理图】(提供PDF格式的原理图及PCB图)更清晰 免费提供与此工控板有关的:资料、例程、原理图 芯片资料、软件。 【图片展示】
【默认发货程序】
【仿modbus通信控制程序】 485通讯控制板通讯协议(技术QQ115451619)
波特率 9600 | | | | | | | | | | | | | | | | | | | 功能1:改变板子地址 举例:更改地址:(发货默认地址00)注意:多个板子并联使用时需要不同地址 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 功能4:打开某块板子的所有继电器(单路继电器模块的这个功能码和功能2一样) 举例:打开第一块板子的全部继电器 | | | | | | | | | | | | | | | | | | | 功能5:关闭某块板子的所有继电器(单路继电器模块的这个功能码和功能3一样) 举例:关闭第三块板子的全部继电器 | | | | | | | | | | | | | | | | | | | 功能6:查询继电器状态 举例:查询第一块板子继电器状态 | | | | | | | | | | | | | | | | | | | 查询返回信息分析 继电器关闭返回值(关闭返回00) | | | | | | | | | | | | | | | | | | | 查询返回信息分析 继电器打开返回值(打开返回FF) | | | | | | | | | | | | | | | | | | |
功能7:查询输入状态 举例:查询第一块板子的输入状态 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 功能8:输入发送数据 当输入端有信号时,给上位机发送数据 举例:第一路有信号输入时的数据为:AA 00 08 01 BB | | | | | | | | | | | | | | | | | | | | | | | | | 功能9:板子地址清零控制(用于地址不清晰或者忘记,在485总线下禁止操作,只可对其单独清零) | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- #include<reg52.h> //库文件
- #include <intrins.H>
- #include<EEPROM.h>
- #define uchar unsigned char//宏定义无符号字符型
- //sfr WDT_CONTR=0Xe1;
- sbit K1=P2^0;
- sbit K2=P2^1;
- sbit K3=P2^2;
- sbit K4=P2^3;
- sbit K5=P2^4;
- sbit K6=P2^5;
- sbit K7=P2^6;
- sbit K8=P2^7;
-
- /*定义八位入为单片机P1口*/
- sbit IN0=P1^0;
- sbit IN1=P1^1;
- sbit IN2=P1^2;
- sbit IN3=P1^3;
- sbit IN4=P1^4;
- sbit IN5=P1^5;
- sbit IN6=P1^6;
- sbit IN7=P1^7;
- uchar dat;
- uchar t,r,ii;
- uchar k=100;
- uchar add; //掉电保持485的地址
- uchar j=0;
- bit flag_zx=0;
- uchar sendBuf[10]; //发送缓冲区
- uchar receBuf[10]; //接收缓冲区
- uchar s1,s2,s3,s4,s5,s6,s7,s8;
- uchar s11,s22,s33,s44,s55,s66,s77,s88;
- bit busy;
- bit bz1=0;
- bit bz2=0;
- bit bz3=0;
- bit bz4=0;
- bit bz5=0;
- bit bz6=0;
- bit bz7=0;
- bit bz8=0;
-
- bit sj1=0;
- bit sj2=0;
- bit sj3=0;
- bit sj4=0;
- bit sj5=0;
- bit sj6=0;
- bit sj7=0;
- bit sj8=0;
- /********************************************************************
- 初始定义
- *********************************************************************/
- uint sec; //定义计数值,每过1/10 秒,sec 加一
- uint tcnt; //键值判断
- /********************************************************************
- 延时函数
- *********************************************************************/
- void delay(uchar t)
- {
- uchar i,j;
- for(i=0;i<t;i++)
- {
- for(j=13;j>0;j--);
- { ;
- }
- }
- }
-
- /********************************************************************
- 功能:串口初始化,波特率9600,方式1
- *********************************************************************/
- void Init_Com(void)
- {
- TMOD|=0x20;
- SCON=0x50;
- TH1=0xfd;
- TL1=0xfd;
- TR1=1;
- ES=1;
- }
-
- /****************发送函数*********************/
- void senduart2()
- {
- //RS485_DIR=1;
- SBUF=sendBuf[0];while(!TI);TI=0;
- SBUF=sendBuf[1];while(!TI);TI=0;
- SBUF=sendBuf[2];while(!TI);TI=0;
- SBUF=sendBuf[3];while(!TI);TI=0;
- SBUF=sendBuf[4];while(!TI);TI=0;
- }
-
- /****************发送函数*********************/
- void send1()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X01;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
- /****************发送函数*********************/
- void send2()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X02;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
- /****************发送函数*********************/
- void send3()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X03;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
- /****************发送函数*********************/
- void send4()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X04;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
- /****************发送函数*********************/
- void send5()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X05;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
- /****************发送函数*********************/
- void send6()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X06;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }/****************发送函数*********************/
- void send7()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X07;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
- /****************发送函数*********************/
- void send8()
- {
- //RS485_DIR=1;
- SBUF=0XAA;while(!TI);TI=0;
- SBUF=add;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0X08;while(!TI);TI=0;
- SBUF=0XBB;while(!TI);TI=0;
- }
-
- /*****************清空发送缓冲区*************************/
- void clear_receBuf()
- {
- uchar i;
- for(i=0;i<5;i++)
- {
- receBuf[i]=0;
- }
- }
- /********************************************************************
- 功能:串口初始化,波特率9600,方式1
- *********************************************************************/
- void initTimer(void)
- {
- TMOD=0x2;
- TH0=0x1b;
- TL0=0x1b;
- }
- /********************************************************************
- 串口中断服务函数
- *********************************************************************/
- void uart(void) interrupt 4
- {
- /********************************************************************
- 接收数据判断函数
- *********************************************************************/
- if(RI) //如果有接收
- {
- RI=0; //接收标志清零
- receBuf[r++&0x0F]=SBUF; //把接受的数据存储到BUT数组中
- if(receBuf[0]!=0xaa){r=0;}
- if(r>=5)
- { r=0;
-
- flag_zx=1;
- }
- }
- if(flag_zx==1)
- {
-
- flag_zx=0;
-
- //0 1 2 3 4
- //起始位 地址位 功能位 数据位 结束位
- if((receBuf[0]==0xaa)&&(receBuf[4]==0xbb)&&(receBuf[1]==add)) //如果开始位和结束位,还有地址都正确,进行下一步判断
- {
- if(receBuf[2]==0x01) //修改板子地址
- {
- add=receBuf[3];
- EEPROMSectorErase(0);//擦除扇区
- EEPROMWriteByte(0,add);//写入新的地址
- }
- else if(receBuf[2]==0x02) //打开单路继电器
- {
- switch(receBuf[3])
- {
- case 0x01: K1=0;sj1=0; break;
- case 0x02: K2=0;sj2=0; break;
- case 0x03: K3=0;sj3=0; break;
- case 0x04: K4=0;sj4=0; break;
- case 0x05: K5=0;sj5=0;break;
- case 0x06: K6=0;sj6=0;break;
- case 0x07: K7=0;sj7=0;break;
- case 0x08: K8=0;sj8=0;break;
- default:break;
- }
- }
- else if(receBuf[2]==0x03) //关闭单路继电器
- {
- switch(receBuf[3])
- {
- case 0x01: K1=1;sj1=0; break;
- case 0x02: K2=1;sj2=0; break;
- case 0x03: K3=1;sj3=0; break;
- case 0x04: K4=1;sj4=0; break;
- case 0x05: K5=1;sj5=0; break;
- case 0x06: K6=1;sj6=0; break;
- case 0x07: K7=1;sj7=0; break;
- case 0x08: K8=1;sj8=0; break;
- default:break;
- }
- }
- else if(receBuf[2]==0x04) //打开全部继电器
- {
- if(receBuf[3]==0xff)
- {
- P2=0X00; sj1=0;sj2=0;sj3=0;sj4=0;sj5=0;sj6=0;sj7=0;sj8=0;
- }
- }
- else if(receBuf[2]==0x05) //关闭全部继电器
- {
- if(receBuf[3]==0x00)
- {
- P2=0XFF; sj1=0;sj2=0;sj3=0;sj4=0;sj5=0;sj6=0;sj7=0;sj8=0;
- }
- }
- else if(receBuf[2]==0x06) //查询继电器
- {
- sendBuf[0]=0xaa;
- sendBuf[1]=add;
- sendBuf[2]=0x07;
- //sendBuf[3]=0xfe;
- sendBuf[4]=0xbb;
- switch(receBuf[3])
- {
- case 0x01: if(K1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x02: if(K2==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x03: if(K3==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x04: if(K4==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x05: if(K5==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x06: if(K6==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x07: if(K7==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x08: if(K8==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- default:break;
- }
- senduart2();
- }
- else if(receBuf[2]==0x08) //查询输入
- {
- sendBuf[0]=0xaa;
- sendBuf[1]=add;
- sendBuf[2]=0x09;
- //sendBuf[3]=0xfe;
- sendBuf[4]=0xbb;
-
- switch(receBuf[3])
- {
- case 0x01: if(IN0==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x02: if(IN1==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x03: if(IN2==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x04: if(IN3==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x05: if(IN4==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x06: if(IN5==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x07: if(IN6==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- case 0x08: if(IN7==0) sendBuf[3]=0xFF;else sendBuf[3]=0x00;break;
- default:break;
- }
- senduart2();
- }
-
- else if(receBuf[2]==0x11) //第1路延时控制
- {
- sj1=1; s11=0;
- s1=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x12) //第2路延时控制
- {
- sj2=1;s22=0;
- s2=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x13) //第3路延时控制
- {
- sj3=1;s33=0;
- s3=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x14) //第4路延时控制
- {
- sj4=1;s44=0;
- s4=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x15) //第5路延时控制
- {
- sj5=1; s55=0;
- s5=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x16) //第6路延时控制
- {
- sj6=1;s66=0;
- s2=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x17) //第7路延时控制
- {
- sj7=1;s77=0;
- s77=receBuf[3];clear_receBuf();
- }
- else if(receBuf[2]==0x18) //第8路延时控制
- {
- sj8=1;s88=0;
- s8=receBuf[3];clear_receBuf();
- }
-
- }
- if((receBuf[0]==0xaa)&&(receBuf[1]==0x00)&&(receBuf[2]==0x00)&&(receBuf[3]==0x00)&&(receBuf[4]==0xbb))
- {
- add=0x00;
- EEPROMSectorErase(0);//擦除扇区
- EEPROMWriteByte(0,0);//写入新的地址
- }
- clear_receBuf();
- }
-
- }
- /********************************************************************
- 主函数
- *********************************************************************/
- void main()
- {
- //WDT_CONTR=0x35; //启动看门狗
- initTimer();
- Init_Com();//串口初始化
- add = EEPROMReadByte(0);
- //add = 0X00;
- TR0=1;
- ET0=1;
- EA=1;
-
- while(1)
- {
-
-
-
- if((IN0==0)&&(bz1==0)){delay(k);if(IN0==0){delay(k);send1();clear_receBuf();bz1=1;}}if((bz1==1)&&(IN0==1)){delay(k);bz1=0;}
- if((IN1==0)&&(bz2==0)){delay(k);if(IN1==0){delay(k);send2();clear_receBuf();bz2=1;}}if((bz2==1)&&(IN1==1)){delay(k);bz2=0;}
- if((IN2==0)&&(bz3==0)){delay(k);if(IN2==0){delay(k);send3();clear_receBuf();bz3=1;}}if((bz3==1)&&(IN2==1)){delay(k);bz3=0;}
- if((IN3==0)&&(bz4==0)){delay(k);if(IN3==0){delay(k);send4();clear_receBuf();bz4=1;}}if((bz4==1)&&(IN3==1)){delay(k);bz4=0;}
-
- if((IN4==0)&&(bz5==0)){delay(k);if(IN4==0){delay(k);send5();clear_receBuf();bz5=1;}}if((bz5==1)&&(IN4==1)){delay(k);bz5=0;}
- if((IN5==0)&&(bz6==0)){delay(k);if(IN5==0){delay(k);send6();clear_receBuf();bz6=1;}}if((bz6==1)&&(IN5==1)){delay(k);bz6=0;}
- if((IN6==0)&&(bz7==0)){delay(k);if(IN6==0){delay(k);send7();clear_receBuf();bz7=1;}}if((bz7==1)&&(IN6==1)){delay(k);bz7=0;}
- if((IN7==0)&&(bz8==0)){delay(k);if(IN7==0){delay(k);send8();clear_receBuf();bz8=1;}}if((bz8==1)&&(IN7==1)){delay(k);bz8=0;}
- /*if(write==1)
- {
- write=0;
- KK1 = P0;
- KK2 = P1;
- KK3 = P2;
- KK4 = P3;
- EEPROMSectorErase(0);
- EEPROMWriteByte(0,KK1);
- EEPROMWriteByte(1,KK2);
- EEPROMWriteByte(2,KK3);
- EEPROMWriteByte(3,KK4);
- }*/
- }
- }
- /********************************************************************
- 定时中断服务函数
- *********************************************************************/
- void t0(void) interrupt 1 using 0 //定时中断服务函数
- {
- tcnt++; //每过250ust tcnt 加一
- if(tcnt==3900) //计满400 次(1秒)时
- {
- tcnt=0; //重新再计
- // K1=!K1;
- // WDT_CONTR=0x35; //7.2s喂狗一次
- if(sj1==1){K1=0;s11++;if(s11>=s1){K1=1;s11=0;sj1=0;}}
- if(sj2==1){K2=0;s22++;if(s22>=s2){K2=1;s22=0;sj2=0;}}
- if(sj3==1){K3=0;s33++;if(s33>=s3){K3=1;s33=0;sj3=0;}}
- if(sj4==1){K4=0;s44++;if(s44>=s4){K4=1;s44=0;sj4=0;}}
- }
- }
- /********************************************************************
- 结束
- *********************************************************************/
复制代码
全部资料51hei下载地址: |