yan zhang
/
NB_CLOCK_180505
clock
Embed:
(wiki syntax)
Show/hide line numbers
myclosenr.cpp
00001 #include "myclosenr.h" 00002 #include "myclodriv.h" 00003 00004 int cloSAct::gsstpSe=0; int cloSAct::gmstpSe=0; int cloSAct::tick2cnt=0; 00005 /***************************** 00006 Fun.: closenr initialization。 00007 Desc.: 00008 Auth. Vesion:2018.1.5 00009 *****************************/ 00010 void cloSAct::init(void) 00011 { 00012 know::TestIn.fall(&get_min); 00013 know::time2.attach(&isr_systick2,1.0); //定时器中断设置 00014 know::time1.attach_us(&isr_systick1,15625); 00015 know::time3.attach_us(&isr_systick3,15625); 00016 } 00017 00018 /***************************** 00019 Fun.: 00020 Desc.: 00021 Auth. Vesion:2018.1.5 00022 *****************************/ 00023 void cloSAct::start(void) 00024 { 00025 00026 } 00027 00028 /***************************** 00029 Fun.: 00030 Desc.: 00031 Auth. Vesion:2018.1.5 00032 *****************************/ 00033 void cloSAct::data(void) 00034 { 00035 know::TestO_S=0; 00036 know::TestO_M=0; 00037 } 00038 00039 /***************************** 00040 Fun.: 00041 Desc.: 00042 Auth.:ZY 00043 Vesion:2018.1.5 00044 *****************************/ 00045 void cloSAct::ready(void) 00046 { 00047 00048 } 00049 00050 /***************************** 00051 Fun.: closenr revoke。 00052 Desc.: 00053 Auth. Vesion:2018.1.5 00054 *****************************/ 00055 void cloSAct::revok(void) 00056 { 00057 00058 } 00059 00060 /***************************** 00061 Fun.: 打开光耦。 00062 Desc.: 00063 Auth. Vesion:2017.7.2 00064 *****************************/ 00065 void cloSAct::put_open(void) 00066 { 00067 tm *tim; 00068 time_t seconds=time(NULL); 00069 tim=localtime(&seconds); 00070 00071 if(tim->tm_hour==11&&tim->tm_min==45){ 00072 know::TestO_S=0; 00073 know::TestO_M=1; //分针检测输出引脚置 00074 know::polSta[42]='2'; //putopenS 00075 } 00076 else if(tim->tm_sec==50&&(tim->tm_min==15|| tim->tm_min ==25||tim->tm_min ==35)){ 00077 know::TestO_M=0; 00078 know::TestO_S=1; //秒针检测输出引脚置高 00079 know::polSta[42]='3'; //putopenS 00080 } 00081 00082 if(tim->tm_sec==10) { //关闭秒光耦 00083 know::TestO_S=0; 00084 know::polSta[42]='0'; 00085 } 00086 if(tim->tm_min==10){ //关闭分光耦 00087 know::TestO_M=0; 00088 know::polSta[42]='0'; 00089 } 00090 } 00091 00092 /***************************** 00093 Fun.: 秒针检测及判断校准方式(停,正常)。 00094 Desc.: 00095 Auth. Vesion:2017.7.2 00096 *****************************/ 00097 void cloSAct::get_sec(void) 00098 { 00099 gsstpSe++; 00100 if(gsstpSe>=128) gsstpSe=0; //防止stpSe溢出 00101 00102 switch(know::TestIn.read()){ 00103 case 0: 00104 if(gsstpSe>=6&&gsstpSe<=128){ 00105 know::TestO_S=0; //关闭秒光耦 00106 judg_sec(); //判断校准方式(停,正常) 00107 } 00108 break; 00109 case 1: 00110 gsstpSe=0; 00111 break; 00112 default: 00113 break; 00114 } 00115 } 00116 00117 /***判断秒校准方式(停,正常)*****/ 00118 void cloSAct::judg_sec(void) 00119 { 00120 tm *tim; 00121 time_t seconds=time(NULL); 00122 tim=localtime(&seconds); 00123 00124 if(tim->tm_sec!=56) know::polSta[40]='1'; //getsecS 00125 else know::polSta[40]='2'; //getsecS return =55正常 00126 } 00127 00128 /***************************** 00129 Fun.: 分针检测判断校准方式(停,追、正常)。 00130 Desc.: 00131 Auth. Vesion:2017.7.2 00132 *****************************/ 00133 void cloSAct::get_min(void) 00134 { 00135 if(gmstpSe>=0&& gmstpSe<=3){ 00136 wait_ms(20); 00137 if(know::TestIn.read()==0){ 00138 gmstpSe++; 00139 if(gmstpSe>10) gmstpSe=0; //防止Step溢出 00140 if(gmstpSe==4){ 00141 know::TestO_M=0; //关闭分光耦 00142 judg_min(); //判断分位置 00143 } 00144 } 00145 else gmstpSe=0; 00146 return; 00147 } 00148 } 00149 00150 /***判断分校准方式(停,正常)********/ 00151 void cloSAct::judg_min(void) 00152 { 00153 tm *tim; 00154 time_t seconds=time(NULL); 00155 tim=localtime(&seconds); 00156 00157 tim->tm_hour=tim->tm_hour%12; 00158 00159 if(tim->tm_hour==11&&tim->tm_min==54) know::polSta[41]='2'; //getminS 正常 00160 else if(tim->tm_hour==11&&tim->tm_min<54&&tim->tm_min>=49) know::polSta[41]='1'; //getminS; 停 00161 else know::polSta[41]='3'; //getminS 追 00162 } 00163 00164 /***************************** 00165 Fun.: 定时器1中断。 00166 Desc.: 00167 Auth. Vesion:2018.1.27 00168 *****************************/ 00169 void cloSAct::isr_systick1(void) 00170 { 00171 cloDAct::put_snorm(); 00172 cloDAct::put_mnorm(); 00173 } 00174 00175 /***************************** 00176 Fun.: 定时器2中断。 00177 Desc.: 00178 Auth. Vesion:2018.1.27 00179 *****************************/ 00180 void cloSAct::isr_systick2(void) 00181 { 00182 put_open(); //判断是否开/关秒、分光耦 00183 00184 if(know::polSta[42]=='2'&&know::polSta[47]=='0') know::time3.attach_us(&isr_systick3,15625); //putsecS,定时器3打开,运行其中的秒检测 00185 00186 if(know::polSta[42]=='3') { //检测分 00187 get_min(); 00188 if(know::polSta[41]=='1'||know::polSta[41]=='3') { //getminS 00189 know::time1.attach_us(0,15625); //停或者追都关闭定时器1 00190 if(know::polSta[41]=='3'&&know::polSta[47]=='0') know::time3.attach_us(&isr_systick3,15625); //打开定时器3,运行其中的分追 00191 if(know::polSta[41]=='1'&&know::polSta[29]=='0') { //put mstop S 00192 cloDAct::put_mstop(); 00193 if(know::polSta[29]=='1') { //停分针结束 00194 know::polSta[29]='0'; //状态复位 00195 know::polSta[41]='0'; 00196 know::polSta[42]='0'; 00197 know::time1.attach_us(&isr_systick1,15625); 00198 know::time3.attach_us(0,15625); //任务互斥,关闭定时器3 00199 know::polSta[47]='0'; 00200 } 00201 } 00202 } 00203 } 00204 00205 tick2cnt++; 00206 if(tick2cnt>=20) { 00207 tick2cnt=0; 00208 know::polSta[46]='1'; //state of tick2S 00209 } 00210 if(tick2cnt>=40) tick2cnt=0; 00211 00212 } 00213 00214 /***************************** 00215 Fun.: 定时器3中断。 00216 Desc.: 00217 Auth. Vesion:2018.1.27 00218 *****************************/ 00219 void cloSAct::isr_systick3(void) 00220 { 00221 know::polSta[47]='1'; 00222 00223 if(know::polSta[42]=='1'&& know::polSta[40]=='0') get_sec(); //putsecS,getsecS 00224 00225 if(know::polSta[40]=='1'&& know::polSta[28]=='0'){ //getsecS, putsstopS 00226 know::time1.attach_us(0,15625); 00227 cloDAct::put_sstop(); //停止秒针 00228 if(know::polSta[28]=='1'){ //校秒结束 00229 know::polSta[28]='0'; //状态复位 00230 know::polSta[40]='0'; 00231 know::polSta[42]='0'; 00232 know::polSta[47]='0'; 00233 know::time1.attach_us(&isr_systick1,15625); 00234 know::time3.attach_us(0,15625); 00235 } 00236 } 00237 00238 if(know::polSta[41]=='3'&&know::polSta[27]=='0'){ // getminS, putmchasS分针追针 00239 cloDAct::put_mchas(); 00240 if(know::polSta[27]=='1'){ //追分完成 00241 know::polSta[27]='0'; //状态复位 00242 know::polSta[41]='0'; 00243 know::polSta[42]='0'; 00244 know::polSta[47]='0'; 00245 know::time1.attach_us(&isr_systick1,15625); 00246 know::time3.attach_us(0,15625); 00247 } 00248 } 00249 } 00250 00251
Generated on Sun Jul 24 2022 03:33:11 by 1.7.2