yan zhang
/
NB_CLOCK_180505
clock
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 }