yan zhang
/
NB_CLOCK_180505
clock
myScope/myclodriv.cpp
- Committer:
- donghuoyinzi
- Date:
- 2018-05-22
- Revision:
- 3:b8766d623f01
- Parent:
- 2:e54d9d87c6cb
File content as of revision 3:b8766d623f01:
#include "myclodriv.h" #include "myclosenr.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=0; mnstpSe=0; mcstpSe=0; spstpSe=0; mcstpSe=0; know::polSta[26]='0'; know::polSta[33]='0'; know::polSta[32]='0'; know::polSta[34]='0'; sec=0; min=0; hour=0; 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(know::polSta[26]-'0'){ //周期交替标志 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(know::polSta[26]-'0'){ 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(&cloSAct::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((know::polSta[32]-'0')==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((know::polSta[34]-'0')==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 }