【简要说明】 此工业级板的作用是,模块供电后,数码管显示设定时间,倒计时开始,当数码管倒计时到0时,继电器接通或者断开,此模块有三种工作模式,客户可以根据自己的需要进行选型。
三种工作形式分别是: 1、延时接通型:即,模块通电后,继电器保持通电前状态,当延时时间到达数码管设定时间值时,继电器吸合,并一直保持吸合状态,直到断开供电电源为止。 2、延时断开型:即,模块通电后,继电器立即吸合并保持吸合状态,当延时时间达到数码管设定值时,继电器断开,并保持断开状态,直到,模块断电在从新供电才重复工作。 3、连续通断型:即,模块通电后,继电器根据数码管设定时间,延时接通,然后再根据数码管设定时间,延时断开,一直连续循环下去。直到模块断开电源才停止工作。 【简要说明】 一、板子尺寸:长72mmX宽32mmX高18mm
二、主要器件:单片机、数码管、继电器
三、工作电压:有5V和12V两种可供选择
四、板子功耗:小于150mA
五、特点:
1、具有继电器输出信号指示功能。
2、供电即可工作无需外部触发。
3、三种工作模式,满足各种模式。
4、如果您会单片机,可以根据自己需要,任意编程,我们可提供参考程序和相关资料。
5、两个按键任意调节延时时间。
6、最高响应次数 每秒通断一次。
7、可以和72MM卡槽板配合安装在DIN导轨上。
8、继电器触点干接点输出,可以控制交流或者直流250V以内任何负载。 9、端子采用螺旋压接端子
10、工作温度-40度至 +70度 11、工作湿度 10% ~ 80%RH 12、四周有4个固定安装孔
13、具有电磁抗干扰能力 14、板子稳定工作可靠
数显可编程延时接通或延时断开模块的电路原理图:
pcb图:
元件清单:
实物图与接线图等资料:
延时断开再延时接通循环_通秒断分单片机源程序如下:
- #include <reg52.h>
- #include "intrins.h"
- #define uchar unsigned char//宏定义无符号字符型
- #define uint unsigned int //宏定义无符号整型
- uchar T0RH = 0; //T0重载值的高字节
- uchar T0RL = 0; //T0重载值的低字节
- uchar i = 0;
- uchar j1 = 0; //百位时间调节 断开时间调节
- uchar j2 = 0; //十位时间调节
- uchar j3 = 9; //个位时间调节
- uchar x1 = 0;
- uchar x2 = 0;
- uint x3 = 0;
- uint x4 = 0;
- uchar x5 = 0;
- uint js = 0;
- uint js1 = 0;
- uchar code duan [] ={0,1,2,3,4,5,6,7,8,9};
- bit d1 = 1;
- bit d2 = 1;
- bit d3 = 1;
- sfr AUXR = 0x8e;
- sfr P5 = 0xc8;
- sfr P5M0 = 0xc9;
- sfr P5M1 = 0XCA;
- sfr P3M0 = 0xb2;
- sfr P3M1 = 0Xb1;
- sfr P1M0 = 0x92;
- sfr P1M1 = 0X91;
- /*掉电存储*/
- sfr IAP_DATA = 0xC2; //IAP数据寄存器
- sfr IAP_ADDRH = 0xC3; //IAP地址寄存器高字节
- sfr IAP_ADDRL = 0xC4; //IAP地址寄存器低字节
- sfr IAP_CMD = 0xC5; //IAP命令寄存器
- sfr IAP_TRIG = 0xC6; //IAP命令触发寄存器
- sfr IAP_CONTR = 0xC7; //IAP控制寄存器
- #define CMD_IDLE 0 //空闲模式
- #define CMD_READ 1 //IAP字节读命令
- #define CMD_PROGRAM 2 //IAP字节编程命令
- #define CMD_ERASE 3 //IAP扇区擦除命令
- #define ENABLE_IAP 0x82 //if SYSCLK<20MHz
- #define IAP_ADDRESS 0x0400 //测试地址
- /***************************************/
- sbit out = P5^4;//out
- sbit pa = P1^0; //a
- sbit pb = P3^2; //b
- sbit pc = P3^7; //c
- sbit pd = P1^3; //d
- sbit pe = P1^2; //e
- sbit pf = P1^4; //f
- sbit pg = P3^3; //g
- sbit p1 = P1^1; //1
- sbit p2 = P3^6; //2
- sbit p3 = P5^5; //3
- sbit in1 = P3^0;
- sbit in2 = P3^1;
- //按键函数声明
- /***************************************/
- void ConfigTimer0(uint ms)
- {
- unsigned long tmp; //临时变量
-
- tmp = 11059200 / 12; //定时器计数频率
- tmp = (tmp * ms) / 1000; //计算所需的计数值
- tmp = 65536 - tmp; //计算定时器重载值
- tmp = tmp + 33; //补偿中断响应延时造成的误差
- T0RH = (uchar)(tmp>>8); //定时器重载值拆分为高低字节
- T0RL = (uchar)tmp;
- AUXR &= 0x7f;
- TMOD = 0x00;
- TH0 = T0RH; //加载T0重载值
- TL0 = T0RL;
- ET0 = 1; //使能T0中断
- TR0 = 1; //启动T0
- }
- /*掉电存储*/
- void Delay(uchar n)
- {
- uint x;
- while (n--)
- {
- x = 0;
- while (++x);
- }
- }
- /*----------------------------
- 关闭IAP
- ----------------------------*/
- void IapIdle()
- {
- IAP_CONTR = 0; //关闭IAP功能
- IAP_CMD = 0; //清除命令寄存器
- IAP_TRIG = 0; //清除触发寄存器
- IAP_ADDRH = 0x80; //将地址设置到非IAP区域
- IAP_ADDRL = 0;
- }
- /*----------------------------
- 从ISP/IAP/EEPROM区域读取一字节
- ----------------------------*/
- uchar IapReadByte(uint addr)
- {
- uchar dat; //数据缓冲区
- IAP_CONTR = ENABLE_IAP; //使能IAP
- IAP_CMD = CMD_READ; //设置IAP命令
- IAP_ADDRL = addr; //设置IAP低地址
- IAP_ADDRH = addr >> 8; //设置IAP高地址
- IAP_TRIG = 0x5a; //写触发命令(0x5a
- IAP_TRIG = 0xa5; //写触发命令(0xa5
- _nop_(); //等待ISP/IAP/EEPROM操作完
- dat = IAP_DATA; //读ISP/IAP/EEPROM数据
- IapIdle(); //关闭IAP功能
- return dat; //返回
- }
- /*----------------------------
- 写一字节数据到ISP/IAP/EEPROM区域
- ----------------------------*/
- void IapProgramByte(uint addr, uchar dat)
- {
- IAP_CONTR = ENABLE_IAP; //使能IAP
- IAP_CMD = CMD_PROGRAM; //设置IAP命令
- IAP_ADDRL = addr; //设置IAP低地址
- IAP_ADDRH = addr >> 8; //设置IAP高地址
- IAP_DATA = dat; //写ISP/IAP/EEPROM数据
- IAP_TRIG = 0x5a; //写触发命令(0x5a
- IAP_TRIG = 0xa5; //写触发命令(0xa5
- _nop_(); //等待ISP/IAP/EEPROM操作完
- IapIdle();
- }
- /*----------------------------
- 扇区擦除
- ----------------------------*/
- void IapEraseSector(uint addr)
- {
- IAP_CONTR = ENABLE_IAP; //使能IAP
- IAP_CMD = CMD_ERASE; //设置IAP命令
- IAP_ADDRL = addr; //设置IAP低地址
- IAP_ADDRH = addr >> 8; //设置IAP高地址
- IAP_TRIG = 0x5a; //写触发命令(0x5a
- IAP_TRIG = 0xa5; //写触发命令(0xa5
- _nop_(); //等待ISP/IAP/EEPROM操作完
- IapIdle();
- }
- /************************************************/
- void s0()
- {
- pa = 1;
- pb = 1;
- pc = 1;
- pd = 1;
- pe = 1;
- pf = 1;
- pg = 0;
- }
- void s1()
- {
- pb = 1;
- pc = 1;
- pa = 0;
- pg = 0;
- pd = 0;
- pe = 0;
- pf = 0;
- }
- void s2()
- {
- pa = 1;
- pb = 1;
- pg = 1;
- pe = 1;
- pd = 1;
- pf = 0;
- pc = 0;
- }
- void s3()
- {
- pa = 1;
- pb = 1;
- pg = 1;
- pc = 1;
- pd = 1;
- pf = 0;
- pe = 0;
- }
- void s4()
- {
- pb = 1;
- pg = 1;
- pc = 1;
- pf = 1;
- pa = 0;
- pd = 0;
- pe = 0;
- }
- void s5()
- {
- pa = 1;
- pg = 1;
- pc = 1;
- pd = 1;
- pf = 1;
- pe = 0;
- pb = 0;
- }
- void s6()
- {
- pa = 1;
- pg = 1;
- pc = 1;
- pd = 1;
- pf = 1;
- pe = 1;
- pb = 0;
- }
- void s7()
- {
- pa = 1;
- pb = 1;
- pc = 1;
- pf = 0;
- pe = 0;
- pd = 0;
- pg = 0;
- }
- void s8()
- {
- pa = 1;
- pb = 1;
- pg = 1;
- pc = 1;
- pd = 1;
- pf = 1;
- pe = 1;
- }
- void s9()
- {
- pa = 1;
- pb = 1;
- pg = 1;
- pc = 1;
- pd = 1;
- pf = 1;
- pe = 0;
- }
- void s10()
- {
- pa = 0;
- pb = 0;
- pc = 0;
- pf = 0;
- pe = 0;
- pd = 0;
- pg = 0;
- }
- void key()
- {
- static uchar saomiaozhi[] = {1,1,1,1};
- saomiaozhi[0] = (saomiaozhi[0]<<1) | in1;
- saomiaozhi[1] = (saomiaozhi[1]<<1) | in2;
- if(saomiaozhi[0] == 0x00)
- {
- d1 = 0;
- }
- if(saomiaozhi[0] == 0xff)
- {
- d1 = 1;
- }
- if(saomiaozhi[1] == 0x00)
- {
- d2 = 0;
- d3 = 0;
- }
- if(saomiaozhi[1] == 0xff)
- {
- d2 = 1;
- d3 = 1;
- }
- }
- void xuaze(uchar j)
- {
- if(j == 0)
- {
- s0();
- }
- else if(j == 1)
- {
-
- s1();
- }
- else if(j == 2)
- {
-
- s2();
- }
- else if(j == 3)
- {
-
- s3();
- }
- else if(j == 4)
- {
-
- s4();
- }
- else if(j == 5)
- {
-
- s5();
- }
- else if(j == 6)
- {
-
- s6();
- }
- else if(j == 7)
- {
-
- s7();
- }
- else if(j == 8)
- {
-
- s8();
- }
- else if(j == 9)
- {
- s9();
- }
- }
- /*数码管显示函数,调用在主函数中*/
- void xianshi1(uint sec)
- {
- j3 = duan [sec%10];
- j2 = duan [sec/10%10];
- j1 = duan [sec/100%10];
- }
- /*数码管扫描函数,放到中断中,中断时间要是1ms*/
- void ssmg()
- {
- s10();
- switch (i)
- {
- case 0: p1 = 0;p2 = 1;p3 = 1; i++; s10(); xuaze(j1); break;
- case 1: p1 = 1;p2 = 0;p3 = 1; i++; s10(); xuaze(j2); break;
- case 2: p1 = 1;p2 = 1;p3 = 0; i=0; s10(); xuaze(j3); break;
- default: break;
- }
- }
- void QL()
- {
- if(js<=1)js=1;
- if(js1<=1)js1=1;
- }
- void tm0_isr() interrupt 1 using 1
- {
- TH0 = T0RH; //重新加载重载值
- TL0 = T0RL;
- ssmg();
- key();
- if(x2 == 1)
- {
- x3++;
- if(x3>=4000)
- {
- x3 = 0;
- x1++;
- if(x1>1)
- {
- x1 = 0;
- }
- }
- }
- if((x1 == 0)&&(x5 == 0))
- {
- x4++;
- if(x4>=1000)
- {
- x4 = 0;
- js--;
- if(js==0)
- {
- js = 0;
- x4 = 0;
- x1 = 1;
- out = 1;
- js = IapReadByte(2)*256+IapReadByte(1);
- QL();
- }
- }
- }
- if((x1 == 1)&&(x5 == 0))
- {
- x4++;
- if(x4>=60000)
- {
- x4 = 0;
- js1--;
- if(js1==0)
- {
- js1 = 0;
- x1 = 0;
- out = 0;
- js1 = IapReadByte(4)*256+IapReadByte(3);
- QL();
- }
- }
- }
- }
- void cun()
- { if(js<=1) js=1;
- if(js1<=1) js1=1;
- IapEraseSector(0);
- IapProgramByte(1, js);
- IapProgramByte(2, js>>8);
- IapProgramByte(3, js1);
- IapProgramByte(4, js1>>8);
- }
- void main()
- {
- bit q1 = 1;
- bit q2 = 1;
- EA = 1;
- ConfigTimer0(1);
- P3M0 = 0xcc;
- P3M1 = 0X00;
- P1M0 = 0x1f;
- P1M1 = 0X00;
- out = 0;
- js = IapReadByte(2)*256+IapReadByte(1);
- js1 = IapReadByte(4)*256+IapReadByte(3);
- QL();
-
- /***************************************/
- while(1)
- {
- /************************************************************************************************/
- if(d1 != q1)
- {
- q1 = d1;
- if(d1 == 0)
- {
- x5 = 1;
- if(x1 == 0)
- {
- js = (js+1)%999;
- cun();
-
- }
- if(x1 == 1)
- {
- js1 = (js1+1)%999;
- cun();
- }
-
-
- }
- }
- if(d2 != q2)
- {
- q2 = d2;
- if(d2 == 0)
- {
- x5 = 1;
- if(x1 == 0)
- {
- if(js > 0)
- {
- js--;
- if(js==0) js=1;
- cun();
- }
- }
- if(x1 == 1)
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码 还包含以下单片机例程:
001、延时接通循环_通断均为秒
002、延时断开再延时接通循环_分
003、延时断开再延时接通循环_秒
004、延时断开_分
005、延时断开_秒
007、延时接通循环_通分断秒
延时接通_分
延时接通_秒
延时接通循环_通断均为分
延时断开_前两位分后一位秒
|