yan zhang
/
NB_CLOCK_180505
clock
myScope/myclosenr.cpp
- Committer:
- donghuoyinzi
- Date:
- 2018-05-12
- Revision:
- 1:013b9fdc4e78
- Parent:
- 0:17e9016529cf
- Child:
- 2:e54d9d87c6cb
File content as of revision 1:013b9fdc4e78:
#include "myclosenr.h" #include "myclodriv.h" int cloSAct::gsstpSe=0; int cloSAct::gmstpSe=0; int cloSAct::tick2cnt=0; /***************************** Fun.: closenr initialization。 Desc.: Auth. Vesion:2018.1.5 *****************************/ void cloSAct::init(void) { know::TestIn.fall(&get_min); know::time2.attach(&isr_systick2,1.0); //定时器中断设置 know::time1.attach_us(&isr_systick1,15625); know::time3.attach_us(&isr_systick3,15625); } /***************************** Fun.: Desc.: Auth. Vesion:2018.1.5 *****************************/ void cloSAct::start(void) { } /***************************** Fun.: Desc.: Auth. Vesion:2018.1.5 *****************************/ void cloSAct::data(void) { know::TestO_S=0; know::TestO_M=0; } /***************************** Fun.: Desc.: Auth.:ZY Vesion:2018.1.5 *****************************/ void cloSAct::ready(void) { } /***************************** Fun.: closenr revoke。 Desc.: Auth. Vesion:2018.1.5 *****************************/ void cloSAct::revok(void) { } /***************************** Fun.: 打开光耦。 Desc.: Auth. Vesion:2017.7.2 *****************************/ void cloSAct::put_open(void) { tm *tim; time_t seconds=time(NULL); tim=localtime(&seconds); if(tim->tm_hour==11&&tim->tm_min==45){ know::TestO_S=0; know::TestO_M=1; //分针检测输出引脚置 know::polSta[42]="2"; //putopenS } else if(tim->tm_sec==50&&(tim->tm_min==15|| tim->tm_min ==25||tim->tm_min ==35)){ know::TestO_M=0; know::TestO_S=1; //秒针检测输出引脚置高 know::polSta[42]="3"; //putopenS } if(tim->tm_sec==10) { //关闭秒光耦 know::TestO_S=0; know::polSta[42]="0"; } if(tim->tm_min==10){ //关闭分光耦 know::TestO_M=0; know::polSta[42]="0"; } } /***************************** Fun.: 秒针检测及判断校准方式(停,正常)。 Desc.: Auth. Vesion:2017.7.2 *****************************/ void cloSAct::get_sec(void) { gsstpSe++; if(gsstpSe>=128) gsstpSe=0; //防止stpSe溢出 switch(know::TestIn.read()){ case 0: if(gsstpSe>=6&&gsstpSe<=128){ know::TestO_S=0; //关闭秒光耦 judg_sec(); //判断校准方式(停,正常) } break; case 1: gsstpSe=0; break; default: break; } } /***判断秒校准方式(停,正常)*****/ void cloSAct::judg_sec(void) { tm *tim; time_t seconds=time(NULL); tim=localtime(&seconds); if(tim->tm_sec!=56) know::polSta[40]="1"; //getsecS else know::polSta[40]="2"; //getsecS return =55正常 } /***************************** Fun.: 分针检测判断校准方式(停,追、正常)。 Desc.: Auth. Vesion:2017.7.2 *****************************/ void cloSAct::get_min(void) { if(gmstpSe>=0&& gmstpSe<=3){ wait_ms(20); if(know::TestIn.read()==0){ gmstpSe++; if(gmstpSe>10) gmstpSe=0; //防止Step溢出 if(gmstpSe==4){ know::TestO_M=0; //关闭分光耦 judg_min(); //判断分位置 } } else gmstpSe=0; return; } } /***判断分校准方式(停,正常)********/ void cloSAct::judg_min(void) { tm *tim; time_t seconds=time(NULL); tim=localtime(&seconds); tim->tm_hour=tim->tm_hour%12; if(tim->tm_hour==11&&tim->tm_min==54) know::polSta[41]="2"; //getminS 正常 else if(tim->tm_hour==11&&tim->tm_min<54&&tim->tm_min>=49) know::polSta[41]="1"; //getminS; 停 else know::polSta[41]="3"; //getminS 追 } /***************************** Fun.: 定时器1中断。 Desc.: Auth. Vesion:2018.1.27 *****************************/ void cloSAct::isr_systick1(void) { cloDAct::put_snorm(); cloDAct::put_mnorm(); } /***************************** Fun.: 定时器2中断。 Desc.: Auth. Vesion:2018.1.27 *****************************/ void cloSAct::isr_systick2(void) { put_open(); //判断是否开/关秒、分光耦 if(know::polSta[42]=="2"&&know::polSta[47]=="0") know::time3.attach_us(&isr_systick3,15625); //putsecS,定时器3打开,运行其中的秒检测 if(know::polSta[42]=="3") { //检测分 get_min(); if(know::polSta[41]=="1"||know::polSta[41]=="3") { //getminS know::time1.attach_us(0,15625); //停或者追都关闭定时器1 if(know::polSta[41]=="3"&&know::polSta[47]=="0") know::time3.attach_us(&isr_systick3,15625); //打开定时器3,运行其中的分追 if(know::polSta[41]=="1"&&know::polSta[29]=="0") { //put mstop S cloDAct::put_mstop(); if(know::polSta[29]=="1") { //停分针结束 know::polSta[29]="0"; //状态复位 know::polSta[41]="0"; know::polSta[42]="0"; know::time1.attach_us(&isr_systick1,15625); know::time3.attach_us(0,15625); //任务互斥,关闭定时器3 know::polSta[47]="0"; } } } } know::polSta[15]="1"; //state of step tick2cnt++; if(tick2cnt>=20) { tick2cnt=0; know::polSta[46]="1"; //state of tick2S } if(tick2cnt>=40) tick2cnt=0; } /***************************** Fun.: 定时器3中断。 Desc.: Auth. Vesion:2018.1.27 *****************************/ void cloSAct::isr_systick3(void) { know::polSta[47]="1"; if(know::polSta[42]=="1"&& know::polSta[40]=="0") get_sec(); //putsecS,getsecS if(know::polSta[40]=="1"&& know::polSta[28]=="0"){ //getsecS, putsstopS know::time1.attach_us(0,15625); cloDAct::put_sstop(); //停止秒针 if(know::polSta[28]=="1"){ //校秒结束 know::polSta[28]="0"; //状态复位 know::polSta[40]="0"; know::polSta[42]="0"; know::polSta[47]="0"; know::time1.attach_us(&isr_systick1,15625); know::time3.attach_us(0,15625); } } if(know::polSta[41]=="3"&&know::polSta[27]=="0"){ // getminS, putmchasS分针追针 cloDAct::put_mchas(); if(know::polSta[27]=="1"){ //追分完成 know::polSta[27]="0"; //状态复位 know::polSta[41]="0"; know::polSta[42]="0"; know::polSta[47]="0"; know::time1.attach_us(&isr_systick1,15625); know::time3.attach_us(0,15625); } } }