clock

Dependencies:   mbed

myScope/myclodriv.cpp

Committer:
donghuoyinzi
Date:
2018-05-08
Revision:
0:17e9016529cf
Child:
1:013b9fdc4e78

File content as of revision 0:17e9016529cf:

#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
}