找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3074|回复: 1
收起左侧

STC单片机可编程触发控制模块源码与资料 数码管显示计数 倒计时功能

[复制链接]
ID:280979 发表于 2018-2-24 13:53 | 显示全部楼层 |阅读模式
电路原理图:
0.png
【简要说明】
此工业级板的作用是,模块供电后,数码管显示设定时间,倒计时开始,当数码管倒计时到0时,继电器接通或者断开,此模块有三种工作模式,客户可以根据自己的需要进行选型。

三种工作形式分别是:
1、延时接通型:即,模块通电后,继电器保持通电前状态,当延时时间到达数码管设定时间值时,继电器吸合,并一直保持吸合状态,直到断开供电电源为止。
2、延时断开型:即,模块通电后,继电器立即吸合并保持吸合状态,当延时时间达到数码管设定值时,继电器断开,并保持断开状态,直到,模块断电在从新供电才重复工作。
3、连续通断型:即,模块通电后,继电器根据数码管设定时间,延时接通,然后再根据数码管设定时间,延时断开,一直连续循环下去。直到模块断开电源才停止工作。
【简要说明】
一、板子尺寸:长65mmX36mmX18mm
二、主要器件:单片机、数码管、继电器
三、工作电压:5V至36V  需要5V工作的,请备注说明。
四、板子功耗:小于150mA
五、特点:
         1、具有继电器输出信号指示功能。
         2供电即可工作无需外部触发。
         3三种工作模式,满足各种模式。
         4如果您会单片机,可以根据自己需要,任意编程,我们可提供参考程序和相关资料。
         5、两个按键任意调节延时时间。
         6、最高响应次数 每秒通断一次。
         7、可以和72MM卡槽板配合安装在DIN导轨上
         8、继电器触点干接点输出,可以控制交流或者直流250V以内任何负载。     9、端子采用螺旋压接端子           
         10、工作温度-40度至 +70度
         11、工作湿度 10%  ~ 80%RH
         12、四周有4个固定安装孔
         13、具有电磁抗干扰能力
         14、板子稳定工作可靠


1.jpg

0~999秒可调-触发延时断开 - 延时闭合带计数STC12C2052AD
  1. /********************************************************************
  2.                             汇诚科技

  3. 实现功能:测试程序
  4. 使用芯片:STC12C2052AD
  5. 晶振:11.0592MHZ
  6. 波特率:9600
  7. 编译环境:Keil
  8. 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!     
  9. /********************************************************************
  10. ********************************************************************/
  11. //#include<reg52.h>
  12. #include<STC12C2052AD.h>                 //库文件
  13. #include<intrins.h>
  14. #define uchar unsigned char //宏定义字符型变量
  15. #define uint  unsigned int        //宏定义整型变量

  16. /*声明 SFR 相关 与 的 IAP*/
  17. sfr IAP_DATA = 0xE2;
  18. sfr IAP_ADDRH = 0xE3;
  19. sfr IAP_ADDRL = 0xE4;
  20. sfr IAP_CMD = 0xE5;
  21. sfr IAP_TRIG = 0xE6;
  22. sfr IAP_CONTR = 0xE7;


  23. /********************************************************************
  24.                              IO口定义
  25. ********************************************************************/
  26. uchar s1=0;
  27. bit  write=0;
  28. uint txian,dxian;
  29. uchar txian1,txian2,txian3;
  30. uchar dxian1,dxian2,dxian3;
  31. uchar T0RH=0,T0RL=0;
  32. uint ms=0;
  33. uchar A1,A2,A3;
  34. uchar B1,B2,B3;
  35. uchar C1,C2,C3;
  36. uchar D1,D2,D3;
  37. bit bz1=0;
  38. sbit P10=P1^0;//数码管段
  39. sbit P11=P1^1;//数码管段
  40. sbit P12=P1^2;//数码管段
  41. sbit P13=P1^3;//数码管段
  42. sbit P14=P1^4;//数码管段
  43. sbit P15=P1^5;//数码管段
  44. sbit P16=P1^6;//数码管段

  45. sbit P17=P3^4;//信号输入

  46. sbit P30=P3^0;//按键输入
  47. sbit P31=P3^1;//按键输入
  48. sbit P32=P3^2;//数码管位
  49. sbit P33=P3^3;//数码管位

  50. sbit P35=P3^5;//数码管位
  51. sbit P37=P3^7; //继电器输出
  52. bit ts=1;
  53. uchar sj=0;
  54. bit dsbz=0;
  55. uchar jishu=0;
  56. bit sjsn=0;
  57. /********************************************************************
  58.                             定义 ISP/IAP/EEPROM 命令
  59. *********************************************************************/
  60. #define CMD_IDLE 0
  61. #define CMD_READ 1
  62. #define CMD_PROGRAM 2
  63. #define CMD_ERASE 3

  64. #define ENABLE_IAP 0x83//SYSCLK<12MH
  65. #define IAP_ADDRESS 0x0000        //存储地址


  66. /********************************************************************
  67. 禁用 ISP/IAP/EEPROM functionmake 单片机 在 一 安全 状态
  68. *********************************************************************/
  69. void IapIdle()
  70. {
  71.     IAP_CONTR = 0;           //
  72.         IAP_CMD = 0;           //
  73.         IAP_TRIG = 0;           //
  74.         IAP_ADDRH = 0x80;  //
  75.         IAP_ADDRL = 0;           //
  76. }

  77. /********************************************************************
  78.                              读数据
  79. *********************************************************************/

  80. uchar IapReadByte(uint addr)
  81. {
  82.    uchar dat;
  83.    IAP_CONTR = ENABLE_IAP;
  84.    IAP_CMD = CMD_READ;
  85.    IAP_ADDRL = addr;
  86.    IAP_ADDRH = addr >> 8;
  87.    IAP_TRIG = 0x46;
  88.    IAP_TRIG = 0xb9;
  89.    _nop_();
  90.    dat = IAP_DATA;
  91.    IapIdle();
  92.    return dat;
  93. }
  94. /********************************************************************
  95.                                写数据
  96. *********************************************************************/

  97. void IapProgramByte(uint addr, uchar dat)
  98. {
  99.    IAP_CONTR = ENABLE_IAP;
  100.    IAP_CMD = CMD_PROGRAM;
  101.    IAP_ADDRL = addr;
  102.    IAP_ADDRH = addr >> 8;
  103.    IAP_DATA = dat;
  104.    IAP_TRIG = 0x46;
  105.    IAP_TRIG = 0xb9;
  106.    _nop_();
  107.    IapIdle();
  108. }
  109. /********************************************************************
  110.                                擦除数据
  111. *********************************************************************/

  112. void IapEraseSector(uint addr)
  113. {
  114.    IAP_CONTR = ENABLE_IAP;
  115.    IAP_CMD = CMD_ERASE;
  116.    IAP_ADDRL = addr;
  117.    IAP_ADDRH = addr >> 8;
  118.    IAP_TRIG = 0x46;
  119.    IAP_TRIG = 0xb9;
  120.    _nop_();
  121.    IapIdle();
  122. }

  123. /********************************************************************
  124.                             初始定义
  125. *********************************************************************/
  126. code uchar seg7code[10]={0x7B,0x09,0x75,0x5D,0x0F,0x5E,0x7E,0x49,0x7F,0x5F}; //显示段码 数码管字跟

  127. /********************************************************************
  128.                             延时函数
  129. *********************************************************************/
  130. void delay(uchar t)
  131. {
  132.   uchar i,j;
  133.    for(i=0;i<t;i++)
  134.    {
  135.             for(j=130;j>0;j--);
  136.          { ;
  137.          }
  138.    }
  139. }
  140. /********************************************************************
  141.                             显示函数 接通时间
  142. *********************************************************************/        
  143. //void tong(uchar tdate) //显示函数
  144. void tong() //显示函数
  145. {

  146.           C1=txian/100;
  147.           C2=txian%100/10;
  148.             C3=txian%10;
  149.       P32=1;P33=1;P35=1;
  150.       P1=seg7code[C1];
  151.           P32=0;P33=1;P35=1;
  152.           delay(80);
  153.           P32=1;P33=1;P35=1;  
  154.       P1=seg7code[C2];
  155.           P32=1;P33=0;P35=1;
  156.           delay(80);
  157.           P32=1;P33=1;P35=1;  
  158.              P1=seg7code[C3];
  159.           P32=1;P33=1;P35=0;
  160.           delay(80);

  161. }
  162.                   
  163. void key()
  164. {

  165.    if(P30==0)
  166.    {
  167.    delay(80);
  168.    if(P30==0)
  169.    {
  170.    s1++;
  171.    if(s1>=5){s1=0;}
  172.    while(!P30);
  173.    }
  174. }}


  175. //定时器0初始化
  176. void t0_init(unsigned char ms0)           //ms0最大71
  177. {
  178.         /***********************************************
  179.         一个机器周期=12*时钟周期。
  180.         11059200为时钟周期,一共为11059200/12=921600,就是每秒为921600Hz,
  181.     八位定时器 最大计时     0.2777778ms
  182.         十六位定时器最大计时          71.111111ms
  183.         11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。
  184.   65536-9216=56320(dc00)
  185.   TH0=0xdc,TL0=0x00
  186.         ***********************************************/
  187.          long tmp;  //临时变量
  188.      tmp = 11059200 / 12;
  189.          tmp = (tmp * ms0) / 1000;
  190.          tmp = 65536 - tmp;
  191.          tmp = tmp + 3;
  192.          T0RH = (unsigned char)(tmp>>8);
  193.          T0RL = (unsigned char)tmp;                                          
  194.      TMOD &=0XF0;
  195.          TMOD |=0X01;  //方式一  一共四种方式   GATE0 C/T0  M0_1  M0_0         C/T0选择时钟计数还是外部计数  方式0是十三位定时器 ,方式1是十六位定时器,方式2是八位自动 方式4是两个八位
  196.          TH0=T0RH;
  197.          TL0=T0RL;
  198.          ET0=1;   //使能T0中断
  199.          EA=1;
  200.          TR0=1;
  201. }
  202. /********************************************************************
  203.                                主函数
  204. *********************************************************************/
  205. void main()

  206. {   

  207.     unsigned char flag=1,flag2=0;;
  208.         txian1 = IapReadByte(0x01);                //读取0x01中的数据  并附给ca
  209.         txian2 = IapReadByte(0x02);                //读取0x01中的数据  并附给ca
  210.         txian3 = IapReadByte(0x03);                //读取0x01中的数据  并附给ca

  211.         t0_init(10);
  212.         P1M0=0X00;P1M1=0Xff;
  213.         txian=txian1*100+txian2*10+txian3;
  214.         P37=1;
  215.         while(1)
  216.         {

  217.     key();
  218.         if((P17==0)&&(bz1==0)){delay(80);if(P17==0){ts=0;bz1=1;ms=0;P37=0;sjsn=1;dsbz=0;}}
  219.         if((P17==1)&&(bz1==1)){bz1=0;dsbz=0;jishu=0;}
  220.         }                 
  221. }
  222. void t0(void) interrupt 1 using 0 //定时中断服务函数
  223. {
  224.           TH0=T0RH;
  225.         TL0=T0RL;
  226.         ms++;
  227.    
  228.                  switch (s1){
  229.                   case 0: tong();break;
  230.                      case 1:ts=1;P1=seg7code[A1]; P32=0;P33=1;P35=1;  if(P31==0){A1++;if(A1>9)A1=0;while(!P31);}break;
  231.                   case 2:     P1=seg7code[A2]; P32=1;P33=0;P35=1;  if(P31==0){A2++;if(A2>9)A2=0;while(!P31);}break;
  232.                      case 3:     P1=seg7code[A3]; P32=1;P33=1;P35=0;  if(P31==0){A3++;if(A3>9)A3=0;while(!P31);}break;
  233.                   case 4:     txian1=A1;txian2=A2;txian3=A3;txian=txian1*100+txian2*10+txian3;write=1;break;
  234.                   default: break;
  235.                 }

  236.         if(ms==40)  //ms=40是1秒
  237.         {
  238.         ms=0;
  239. if(write==1)
  240.   {                                                                                                                                                                                                                                         
  241.    write=0;
  242. IapEraseSector(0);
  243. IapProgramByte(0x01,txian1);
  244. IapProgramByte(0x02,txian2);
  245. IapProgramByte(0x03,txian3);

  246.   }

  247. if((dsbz==1)&&(jishu<5)){sj++;if(sj==20){bz1=0;sj=0;dsbz=0;jishu++;}}
  248. if((sjsn==1)&&(dsbz==0)){txian--;}
  249.          if(txian==0)
  250.          {
  251.            P37=1;
  252.        sjsn=0;
  253.            dsbz=1;
  254.            txian=txian1*100+txian2*10+txian3;
  255.          }

  256.         }

  257. }
复制代码

2.jpg

0.png

全部资料51hei下载地址:
配套程序.rar (2.92 MB, 下载次数: 60)
回复

使用道具 举报

ID:601796 发表于 2019-8-24 01:11 | 显示全部楼层
看看,谢谢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表