yan zhang
/
NB_CLOCK_180505
clock
Diff: myScope/myclodriv.cpp
- 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 +} +