clock

Dependencies:   mbed

Revision:
0:17e9016529cf
Child:
1:013b9fdc4e78
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/myScope/myclodriv.cpp	Tue May 08 02:13:50 2018 +0000
@@ -0,0 +1,275 @@
+#include "myclodriv.h"
+
+
+int cloDAct::snstpSe=0; int cloDAct::mnstpSe=0; int cloDAct::mcstpSe=0; int cloDAct::spstpSe=0;
+int cloDAct::sec;       int cloDAct::min;       int cloDAct::hour;
+/*****************************
+Fun.: clodriv initialization。
+Desc.:
+Auth. Vesion:2018.1.5
+*****************************/
+void cloDAct::init(void)
+{
+
+}
+
+/*****************************
+Fun.: initialization of cloDAct start。
+Desc.:
+Auth. Vesion:2017.7.2
+*****************************/
+void cloDAct::start(void)
+{
+
+}
+
+/*****************************
+Fun.: initialization of cloDAct data。
+Desc.:
+Auth. Vesion:2017.7.2
+*****************************/
+void cloDAct::data(void)
+{
+    snstpSe=1;
+    mnstpSe=1;
+    mcstpSe=1;
+    spstpSe=1;
+    mcstpSe=1;
+    
+    know::polSta[26]="1";
+    know::polSta[28]="1";
+    
+    know::polSta[33]="1";
+    know::polSta[32]="1";
+    know::polSta[34]="1";
+    
+    sec=1;
+    min=1;
+    hour=1;
+    
+    know::MotS0=0;
+    know::MotS1=0;
+    know::MotM0=0;
+    know::MotM1=0;                        //电平归零
+}
+
+/*****************************
+Fun.: clodriv ready。
+Desc.:
+Auth. Vesion:2018.1.5
+*****************************/
+void cloDAct::ready(void)
+{
+
+}
+
+/*****************************
+Fun.: 
+Desc.:
+Auth. Vesion:2017.7.2
+*****************************/
+void cloDAct::put_revok(void)
+{
+ 
+}
+
+/*****************************
+Fun.: 秒针正常走时。
+Desc.:
+Auth. Vesion:2017.7.2
+*****************************/
+void cloDAct::put_snorm(void)
+{
+    snstpSe++;
+    
+    switch(snstpSe){ 
+        case 17:                                //高电平脉冲宽度46.875ms/15.625ms=3
+        case 18: 
+        case 19:  
+            know::MotS1 = 1;                         //秒针马达端1输出高电平
+            know::MotS0 = 0;                         //秒针马达端0输出低电平
+        break;
+        case 20: 
+            know::MotS0 = 0;                        //秒针马达端0输出低电平
+            know::MotS1 = 0;                        //秒针马达端1输出低电平
+        break;
+        case 21:
+        case 22:
+        case 23:                                //秒针马达端0输出脉冲
+            know::MotS0 = 1;                        //秒针马达端0输出高电平
+            know::MotS1 = 0;                        //秒针马达端1输出低电平
+        break;
+        case 24: 
+            know::MotS0 = 0;                        //秒针马达端0输出低电平
+            know::MotS1 = 0;                        //秒针马达端1输出低电平
+            snstpSe=16; 
+        break;
+        default:
+        break;
+    }
+}
+
+/*****************************
+Fun.: 分针正常走时。
+Desc.:
+Auth. Vesion:2017.7.2
+*****************************/
+void cloDAct::put_mnorm(void)
+{
+    mnstpSe++;
+    if(mnstpSe<=2){                               //高电平脉冲宽度31.250ms/15.625ms=2
+        switch(atoi(know::polSta[26].c_str())){                          //周期交替标志
+            case 1: 
+                know::MotM1 = 1;                          //分针马达端1输出高电平
+                know::MotM0 = 0;                          //分针马达端0输出低电平
+            break;
+            case 0:                                 //分针马达端0输出脉冲
+                know::MotM0 = 1;                      //分针马达端0输出高电平
+                know::MotM1 = 0;                      //分针马达端1输出低电平
+            break;
+            default:
+            break;
+        }
+    }      
+    else if(mnstpSe<=639&&mnstpSe>=3){
+        know::MotM0 = 0;                              //分针马达端0输出低电平
+        know::MotM1 = 0;                              //分针马达端1输出低电平  
+        switch(atoi(know::polSta[26].c_str())){ 
+            case 0:
+                know::polSta[26]="1";                  //马达端1输出脉冲标识置1
+            break;
+            case 1:
+                know::polSta[26]="0";  
+            break;
+            default:
+            break;
+        }
+    }
+    else mnstpSe=0;
+}
+
+/*****************************
+Fun.: 分针追针。
+Desc.:
+Auth. Vesion:2017.7.2
+*****************************/
+void cloDAct::put_mchas(void)
+{
+    mcstpSe++;
+    
+    switch(mcstpSe){
+        case 1:                                  //高电平脉冲宽度31.250ms/15.625ms=2
+        case 2:
+            know::MotM1 = 1;                          //分针马达端1输出高电平
+            know::MotM0 = 0;                          //分针马达端0输出低电平
+        break;
+        case 3:
+        case 4: 
+            know::MotM0 = 0;                          //分针马达端0输出低电平
+            know::MotM1 = 0;                          //分针马达端1输出低电平
+        break;
+        case 5:                                    //高电平脉冲宽度31.250ms/15.625ms=2
+        case 6:
+            know::MotM1 = 0;                         //分针马达端1输出高电平
+            know::MotM0 = 1;                         //分针马达端0输出低电平
+        break;
+        case 7:
+        case 8:    
+            know::MotM0 = 0;                          //分针马达端0输出低电平
+            know::MotM1 = 0;                          //分针马达端1输出低电平
+            mcstpSe=0;
+            cmp_cmin();
+            if(know::polSta[33]=="1") {
+                know::polSta[27]="1";
+                //know::time1.attach_us(&isr_systick1,15625);    
+            }
+        break;
+        default:
+        break;
+    }  
+}
+
+void cloDAct::cmp_cmin(void)
+{
+    tm *tim;
+    sec++;
+
+    if(sec>=3){                  //定时器3 15.625ms*24=375ms=1min  实际追1分钟(分针1格)只需要375ms
+        sec=0;
+        min++;
+        if(min>=60){
+            min=0;
+            hour++;
+            if(hour>=12) hour=0;
+        }
+    }
+
+    time_t seconds=time(NULL);
+    tim=localtime(&seconds);
+     
+    if(tim->tm_min== min&&tim->tm_hour== hour){
+        min=54;                                             //分针检测信号有效为11时59分 开始追针或等追
+        hour=11;
+        know::polSta[33]="1";
+    }
+}
+
+/*****************************
+Fun.: miao停止,脉冲信号保持为低电平,最少停止250ms。
+Desc.:
+Auth. Vesion:2017.7.2
+*****************************/
+void cloDAct::put_sstop(void)
+{
+    spstpSe++;                             //延时250ms
+    
+    switch(spstpSe){
+        case 1:
+            know::MotS0 = 0;                     //Mot1秒针驱动引脚输出低电平
+            know::MotS1 = 0;
+        break;
+        case 17:
+            cmp_sec();
+            if(atoi(know::polSta[32].c_str())==1){
+                spstpSe=0;
+                know::polSta[28]="1";                    //cmpsec_state="k";
+            }
+            else spstpSe=16;
+        break;
+        default:
+        break;
+    }
+}
+
+void cloDAct::cmp_sec(void)
+{
+    tm *tim;
+    time_t seconds=time(NULL);
+    tim=localtime(&seconds);
+    if(tim->tm_sec==56) know::polSta[32]="1";                  //秒针检测信号有效为56秒 等追        
+}
+
+/*****************************
+Fun.: min停止。
+Desc.:
+Auth. Vesion:2017.7.2
+*****************************/
+void cloDAct::put_mstop(void)
+{
+    know::MotM0 = 0;                          //Mot1分针驱动引脚输出低电平
+    know::MotM1 = 0;
+    cmp_smin();
+    if(atoi(know::polSta[34].c_str())==1){
+        know::polSta[29]="1";                        //正常走时停止则为59分
+        //know::time1.attach_us(&cloSAct::isr_systick1,15625);
+    }
+}
+
+void cloDAct::cmp_smin(void)
+{
+    tm *tim;
+    time_t seconds=time(NULL);
+    tim=localtime(&seconds);
+    if(tim->tm_min==59) know::polSta[34]="1";         //待测 若追针后停止分针则为58分 pol_min=58
+} 
+