钰平电子 发表于 2023-6-15 13:11:33

基于STC15W408AS单片机设计的可编程多功能延时时间控制器开源原理图和例程














【声明】此程序仅用于学习与参考!   
*********************************************************************/
#include <STC15W408AS.h>
#include <intrins.h>
#include <string.h>
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int//宏定义无符号整型

/**************************************************
                               IO口定义
***************************************************/
sbit led = P1^0;
sbit IN1 = P5^4;
sbit set1= P1^7;
sbit set2= P1^6;
sbit set3= P1^1;

sbit ten1= P3^7;
sbit ten2= P3^6;
sbit ten3= P3^5;
sbit ten4= P3^4;

sbit b1 = P3^3;
sbit b2 = P3^2;
sbit b3 = P3^1;
sbit b4 = P3^0;
sbit OUT = P5^5;
bit bz=0,bk=0,kk=0,bt=0,kz=0,bs1=0,bs2=0,bs3=0;
uchar ba=0;
uint dat=0,dat1=0,dat2=0,jsu=0,js=0,js1=0,js2=0;

/**************************************************
                                配置t0
***************************************************/
void Timer0Init(void)                //1毫秒@11.0592MHz
{
        AUXR |= 0x80;                //定时器时钟1T模式
        TMOD &= 0xF0;                //设置定时器模式
    TL0 = 0xCD;                //设置定时初值
        TH0 = 0xD4;                //设置定时初值
        TF0 = 0;                //清除TF0标志
        ET0 = 1;
        TR0 = 1;                //定时器0开始计时
}

/**************************************************
                                t0
***************************************************/
void InterruptTimer0() interrupt 1{//T0中断服务函数,执行串口接收监控
             dat2=dat+dat1;
          if(dat2==0){kz=1;}else{kz=0;}
          if((kk==1)&&(bk==0)&&(kz==0)){jsu++;}
          if(ba==0)//秒
          {
          if(jsu==100){if(bt==0){OUT=1;}else{OUT=0;}}
          if(jsu==800){led=0;}
          if(jsu==1000)//1s
          {
               
              jsu=0;
                  led=1;
                  js++;
                 if(js==dat2)
                   {
            js=0;
                  bk=1;
                  kk=0;
                  led=0;
                  OUT=!OUT;
                   }
             }
          }

          if(ba==1)//分
          {
          if(jsu==100){if(bt==0){OUT=1;}else{OUT=0;}}
          if(jsu==800){led=0;}
          if(jsu==1000)//1s
          {
               
              jsu=0;
                  led=1;
                  js++;
                  if(js==60)//1fen
                   {
                      js=0;
                          js1++;
                    if(js1==dat2)
                      {
               js1=0;
                     bk=1;
                     kk=0;
                     led=0;
                     OUT=!OUT;
                      }
                   }
             }
          }

       if(ba==2)//分
          {
          if(jsu==100){if(bt==0){OUT=1;}else{OUT=0;}}
          if(jsu==800){led=0;}
          if(jsu==1000)//1秒
          {
               
              jsu=0;
                  led=1;
                  js++;
                  if(js==60)//1分钟
                   {
                      js=0;
                          js1++;
                          if(js1==60)//1小时
                          {
                          js1=0;
                          js2++;
                       if(js2==dat2)
                        {
               js2=0;
                         bk=1;
                         kk=0;
                         led=0;
                         OUT=!OUT;
                        }
                          }
                  }
              }
           }
}
/**************************************************
                                主函数
***************************************************/
void main()
{
Timer0Init();
EA=1;
ba=0;
while(1)
{
        if((IN1==0)&&(bz==0)){bz=1;kk=1;bk=0;}
        if((IN1==1)&&(bz==1)){bz=0;}
        if(set1==0){bt=1;}else{bt=0;} //拨上拨码开关设置延时断开,不拨延时接通
        if((set2==1)&&(set3==1)&&(bs1==0)){ba=0;bs1=1;bs2=0;bs3=0;}
        if((set2==0)&&(set3==1)&&(bs2==0)){ba=1;bs1=0;bs2=1;bs3=0;}
        if((set2==0)&&(set3==0)&&(bs3==0)){ba=2;bs1=0;bs2=0;bs3=1;}

        if((b1==1)&&(b2==1)&&(b3==1)&&(b4==1)){dat=0;}//1秒
        if((b1==0)&&(b2==1)&&(b3==1)&&(b4==1)){dat=1;}
        if((b1==1)&&(b2==0)&&(b3==1)&&(b4==1)){dat=2;}
        if((b1==0)&&(b2==0)&&(b3==1)&&(b4==1)){dat=3;}
        if((b1==1)&&(b2==1)&&(b3==0)&&(b4==1)){dat=4;}
        if((b1==0)&&(b2==1)&&(b3==0)&&(b4==1)){dat=5;}
        if((b1==1)&&(b2==0)&&(b3==0)&&(b4==1)){dat=6;}
        if((b1==0)&&(b2==0)&&(b3==0)&&(b4==1)){dat=7;}
        if((b1==1)&&(b2==1)&&(b3==1)&&(b4==0)){dat=8;}
        if((b1==0)&&(b2==1)&&(b3==1)&&(b4==0)){dat=9;}
        if((b1==1)&&(b2==0)&&(b3==1)&&(b4==0)){dat=10;}
        if((b1==0)&&(b2==0)&&(b3==1)&&(b4==0)){dat=11;}
        if((b1==1)&&(b2==1)&&(b3==0)&&(b4==0)){dat=12;}
        if((b1==0)&&(b2==1)&&(b3==0)&&(b4==0)){dat=13;}
        if((b1==1)&&(b2==0)&&(b3==0)&&(b4==0)){dat=14;}
        if((b1==0)&&(b2==0)&&(b3==0)&&(b4==0)){dat=15;}//15秒

        if((ten1==1)&&(ten2==1)&&(ten3==1)&&(ten4==1)){dat1=0;}//0s
        if((ten1==0)&&(ten2==1)&&(ten3==1)&&(ten4==1)){dat1=10;}//10s
        if((ten1==1)&&(ten2==0)&&(ten3==1)&&(ten4==1)){dat1=20;}//20s
        if((ten1==0)&&(ten2==0)&&(ten3==1)&&(ten4==1)){dat1=30;}//30s
        if((ten1==1)&&(ten2==1)&&(ten3==0)&&(ten4==1)){dat1=40;}//40s
        if((ten1==0)&&(ten2==1)&&(ten3==0)&&(ten4==1)){dat1=50;}//50s
        if((ten1==1)&&(ten2==0)&&(ten3==0)&&(ten4==1)){dat1=60;}//60s
        if((ten1==0)&&(ten2==0)&&(ten3==0)&&(ten4==1)){dat1=70;}//70s
        if((ten1==1)&&(ten2==1)&&(ten3==1)&&(ten4==0)){dat1=80;}//80s
        if((ten1==0)&&(ten2==1)&&(ten3==1)&&(ten4==0)){dat1=90;}//90s
        if((ten1==1)&&(ten2==0)&&(ten3==1)&&(ten4==0)){dat1=100;}//100s
        if((ten1==0)&&(ten2==0)&&(ten3==1)&&(ten4==0)){dat1=110;}//110s
        if((ten1==1)&&(ten2==1)&&(ten3==0)&&(ten4==0)){dat1=120;}//120s
        if((ten1==0)&&(ten2==1)&&(ten3==0)&&(ten4==0)){dat1=130;}//130s
        if((ten1==1)&&(ten2==0)&&(ten3==0)&&(ten4==0)){dat1=140;}//140s
        if((ten1==0)&&(ten2==0)&&(ten3==0)&&(ten4==0)){dat1=150;}//150s
}
}

/*********************************************************************************************/


芯势力 发表于 2023-6-15 16:14:35

本帖最后由 STC芯势力 于 2023-6-15 16:17 编辑

感谢楼主分享,建议使用我们强大的STC-USB Link1D工具,专业仿真器,全自动在线下载器/自动停电上电,脱机烧录器,USB转双串口工具,可以加我QQ1939247469,免费加包邮安排

钰平电子 发表于 2023-6-15 18:10:14

STC芯势力 发表于 2023-6-15 16:14
感谢楼主分享,建议使用我们强大的STC-USB Link1D工具,专业仿真器,全自动在线下载器/自动停电上电,脱机 ...

我用了很好用,尤其是脱机下载功能,没电脑也可以下载,很方便。
页: [1]
查看完整版本: 基于STC15W408AS单片机设计的可编程多功能延时时间控制器开源原理图和例程