yan zhang
/
NB_CLOCK_180505
clock
myScope/myclosenr.cpp
- Committer:
- donghuoyinzi
- Date:
- 2018-05-22
- Revision:
- 3:b8766d623f01
- Parent:
- 2:e54d9d87c6cb
File content as of revision 3:b8766d623f01:
#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'; } } } } 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); } } }