![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
clock
Diff: myScope/myclosenr.cpp
- Revision:
- 0:17e9016529cf
- Child:
- 1:013b9fdc4e78
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/myScope/myclosenr.cpp Tue May 08 02:13:50 2018 +0000 @@ -0,0 +1,252 @@ +#include "myclosenr.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[6]=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[6]=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[3]=1; //getsecS + else know::polSta[3]=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[7]="2"; //getminS 正常 + else if(tim->tm_hour==11&&tim->tm_min<54&&tim->tm_min>=49) know::polSta[7]="1"; //getminS; 停 + else know::polSta[7]="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[7]=="2"&&know::polSta[47]=="0") know::time3.attach_us(&isr_systick3,15625); //putsecS,定时器3打开,运行其中的秒检测 + + if(know::polSta[7]=="3") { + get_min(); + if(know::polSta[9]=="1"||know::polSta[9]=="3"){ //getminS + know::time1.attach_us(0,15625); //停或者追都关闭定时器1 + if(know::polSta[9]=="3"&&know::polSta[47]=="0") know::time3.attach_us(&isr_systick3,15625); //打开定时器3,运行其中的分追 + if(know::polSta[9]=="1"&&know::polSta[11]=="0"){ //put mstop S + cloDAct::put_mstop(); + if(know::polSta[11]=="1"){ //停分针结束 + know::polSta[7]="0"; //状态复位 + know::polSta[9]="0"; + know::polSta[11]="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[16]="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[7]=="1"&& know::polSta[5]=="0") get_sec(); //putsecS,getsecS + + if(know::polSta[3]=="1"&& know::polSta[8]=="0"){ //getsecS, putsstopS + know::time1.attach_us(0,15625); + cloDAct::put_sstop(); //停止秒针 + if(know::polSta[8]=="1"){ //校秒结束 + know::polSta[8]="0"; //状态复位 + know::polSta[7]="0"; + know::polSta[3]="0"; + know::time1.attach_us(&isr_systick1,15625); + know::time3.attach_us(0,15625); + know::polSta[47]="0"; + } + } + + if(know::polSta[9]=="3"&&know::polSta[12]=="0"){ // getminS, putmchasS分针追针 + cloDAct::put_mchas(); + if(know::polSta[12]=="1"){ //追分完成 + know::polSta[12]="0"; //状态复位 + know::polSta[9]="0"; + know::polSta[7]="0"; + know::time1.attach_us(&isr_systick1,15625); + know::time3.attach_us(0,15625); + know::polSta[47]="0"; + } + } +} + +