clock

Dependencies:   mbed

Revision:
0:17e9016529cf
Child:
1:013b9fdc4e78
diff -r 000000000000 -r 17e9016529cf myScope/myclosenr.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/myScope/myclosenr.cpp	Tue May 08 02:13:50 2018 +0000
@@ -0,0 +1,252 @@
+#include "myclosenr.h"
+
+int cloSAct::gsstpSe=0; int cloSAct::gmstpSe=0; int cloSAct::tick2cnt=0;
+/*****************************
+Fun.: closenr initialization。
+Desc.:
+Auth. Vesion:2018.1.5
+*****************************/
+void cloSAct::init(void)
+{
+    know::TestIn.fall(&get_min);
+    know::time2.attach(&isr_systick2,1.0);                  //定时器中断设置  
+    know::time1.attach_us(&isr_systick1,15625);
+    know::time3.attach_us(&isr_systick3,15625); 
+}
+
+/*****************************
+Fun.: 
+Desc.:
+Auth. Vesion:2018.1.5
+*****************************/
+void cloSAct::start(void)
+{
+
+}
+
+/*****************************
+Fun.: 
+Desc.:
+Auth. Vesion:2018.1.5
+*****************************/
+void cloSAct::data(void)
+{
+    know::TestO_S=0;
+    know::TestO_M=0;
+}
+
+/*****************************
+Fun.: 
+Desc.:
+Auth.:ZY
+Vesion:2018.1.5
+*****************************/
+void cloSAct::ready(void)
+{
+
+}
+
+/*****************************
+Fun.: closenr revoke。
+Desc.:
+Auth. Vesion:2018.1.5
+*****************************/
+void cloSAct::revok(void)
+{
+
+}
+
+/*****************************
+Fun.: 打开光耦。
+Desc.:
+Auth. Vesion:2017.7.2
+*****************************/
+void cloSAct::put_open(void)
+{  
+    tm *tim;
+    time_t seconds=time(NULL);
+    tim=localtime(&seconds);
+
+    if(tim->tm_hour==11&&tim->tm_min==45){
+        know::TestO_S=0;
+        know::TestO_M=1;                              //分针检测输出引脚置
+        know::polSta[6]=2;                               //putopenS
+    }
+    else if(tim->tm_sec==50&&(tim->tm_min==15|| tim->tm_min ==25||tim->tm_min ==35)){
+        know::TestO_M=0;
+        know::TestO_S =1;                             //秒针检测输出引脚置高
+        know::polSta[6]=3;   //putopenS
+    } 
+
+    if(tim->tm_sec==10) {                           //关闭秒光耦
+        know::TestO_S=0;
+        know::polSta[42]="0";
+    }
+    if(tim->tm_min==10){                               //关闭分光耦
+        know::TestO_M=0;
+        know::polSta[42]="0";
+    }
+} 
+
+/*****************************
+Fun.: 秒针检测及判断校准方式(停,正常)。
+Desc.:
+Auth. Vesion:2017.7.2
+*****************************/
+void cloSAct::get_sec(void)
+{
+    gsstpSe++;
+    if(gsstpSe>=128) gsstpSe=0;                     //防止stpSe溢出              
+
+    switch(know::TestIn.read()){
+        case 0:
+            if(gsstpSe>=6&&gsstpSe<=128){
+                know::TestO_S =0;                         //关闭秒光耦
+                judg_sec();                             //判断校准方式(停,正常)
+            }
+        break;
+        case 1:
+            gsstpSe=0;
+        break; 
+        default:
+        break; 
+    }  
+}
+
+/***判断秒校准方式(停,正常)*****/
+void cloSAct::judg_sec(void)
+{
+    tm *tim;
+    time_t seconds=time(NULL);
+    tim=localtime(&seconds);
+ 
+    if(tim->tm_sec!=56) know::polSta[3]=1;                        //getsecS
+    else know::polSta[3]=2;                                        //getsecS  return =55正常
+}  
+
+/*****************************
+Fun.: 分针检测判断校准方式(停,追、正常)。
+Desc.:
+Auth. Vesion:2017.7.2
+*****************************/
+void cloSAct::get_min(void)
+{
+    if(gmstpSe>=0&& gmstpSe<=3){
+    wait_ms(20);
+        if(know::TestIn.read()==0){
+            gmstpSe++;
+            if(gmstpSe>10) gmstpSe=0;                //防止Step溢出
+            if(gmstpSe==4){
+                know::TestO_M=0;                           //关闭分光耦
+                judg_min();                           //判断分位置
+            }
+        }
+        else gmstpSe=0;
+        return;
+    }
+}
+
+/***判断分校准方式(停,正常)********/    
+void cloSAct::judg_min(void)
+{
+    tm *tim;
+    time_t seconds=time(NULL);
+    tim=localtime(&seconds);
+
+    tim->tm_hour=tim->tm_hour%12;
+    
+    if(tim->tm_hour==11&&tim->tm_min==54)  know::polSta[7]="2";                             //getminS 正常
+    else if(tim->tm_hour==11&&tim->tm_min<54&&tim->tm_min>=49)  know::polSta[7]="1";        //getminS; 停
+    else know::polSta[7]="3";                                                               //getminS  追
+} 
+
+/*****************************
+Fun.: 定时器1中断。
+Desc.:
+Auth. Vesion:2018.1.27
+*****************************/ 
+void cloSAct::isr_systick1(void)
+{
+    //cloDAct::put_snorm();
+    //cloDAct::put_mnorm();
+}
+    
+/*****************************
+Fun.: 定时器2中断。
+Desc.:
+Auth. Vesion:2018.1.27
+*****************************/ 
+void cloSAct::isr_systick2(void)
+{
+    put_open();                                                                 //判断是否开/关秒、分光耦
+
+    if(know::polSta[7]=="2"&&know::polSta[47]=="0") know::time3.attach_us(&isr_systick3,15625); //putsecS,定时器3打开,运行其中的秒检测
+   
+    if(know::polSta[7]=="3") {
+        get_min();
+        if(know::polSta[9]=="1"||know::polSta[9]=="3"){                                                    //getminS
+            know::time1.attach_us(0,15625);                                          //停或者追都关闭定时器1
+            if(know::polSta[9]=="3"&&know::polSta[47]=="0") know::time3.attach_us(&isr_systick3,15625);  //打开定时器3,运行其中的分追
+            if(know::polSta[9]=="1"&&know::polSta[11]=="0"){                                            //put mstop S
+                cloDAct::put_mstop();   
+                if(know::polSta[11]=="1"){                                                       //停分针结束
+                    know::polSta[7]="0";                                                            //状态复位
+                    know::polSta[9]="0";    
+                    know::polSta[11]="0";
+                    know::time1.attach_us(&isr_systick1,15625);
+                    know::time3.attach_us(0,15625);                                  //任务互斥,关闭定时器3
+                    know::polSta[47]="0";
+                }
+            }
+        }
+    }
+
+    know::polSta[15]="1";                                     //state of step 
+
+    tick2cnt++;
+    if(tick2cnt>=20){
+        tick2cnt=0;
+        know::polSta[16]="1";                                     //state of tick2S
+    }
+    if(tick2cnt>=40) tick2cnt=0;
+
+}
+
+/*****************************
+Fun.: 定时器3中断。
+Desc.:
+Auth. Vesion:2018.1.27
+*****************************/ 
+void cloSAct::isr_systick3(void)
+{
+    know::polSta[47]="1";
+
+    if(know::polSta[7]=="1"&& know::polSta[5]=="0") get_sec();              //putsecS,getsecS
+
+    if(know::polSta[3]=="1"&& know::polSta[8]=="0"){                   //getsecS, putsstopS
+        know::time1.attach_us(0,15625);
+        cloDAct::put_sstop();                           //停止秒针
+        if(know::polSta[8]=="1"){                               //校秒结束
+            know::polSta[8]="0";                                 //状态复位
+            know::polSta[7]="0";
+            know::polSta[3]="0";
+            know::time1.attach_us(&isr_systick1,15625);
+            know::time3.attach_us(0,15625); 
+            know::polSta[47]="0";
+        }
+    } 
+       
+    if(know::polSta[9]=="3"&&know::polSta[12]=="0"){                    // getminS, putmchasS分针追针
+        cloDAct::put_mchas();     
+        if(know::polSta[12]=="1"){                              //追分完成
+            know::polSta[12]="0";                                //状态复位
+            know::polSta[9]="0";
+            know::polSta[7]="0";    
+            know::time1.attach_us(&isr_systick1,15625);
+            know::time3.attach_us(0,15625); 
+            know::polSta[47]="0";
+        }
+    }
+}
+
+