clock

Dependencies:   mbed

Committer:
donghuoyinzi
Date:
Tue May 22 09:10:05 2018 +0000
Revision:
3:b8766d623f01
Parent:
2:e54d9d87c6cb
0522

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donghuoyinzi 0:17e9016529cf 1 #include "myclosenr.h"
donghuoyinzi 1:013b9fdc4e78 2 #include "myclodriv.h"
donghuoyinzi 0:17e9016529cf 3
donghuoyinzi 2:e54d9d87c6cb 4 int cloSAct::gsstpSe=0; int cloSAct::gmstpSe=0; int cloSAct::tick2cnt=0;
donghuoyinzi 0:17e9016529cf 5 /*****************************
donghuoyinzi 0:17e9016529cf 6 Fun.: closenr initialization。
donghuoyinzi 0:17e9016529cf 7 Desc.:
donghuoyinzi 0:17e9016529cf 8 Auth. Vesion:2018.1.5
donghuoyinzi 0:17e9016529cf 9 *****************************/
donghuoyinzi 0:17e9016529cf 10 void cloSAct::init(void)
donghuoyinzi 0:17e9016529cf 11 {
donghuoyinzi 0:17e9016529cf 12 know::TestIn.fall(&get_min);
donghuoyinzi 0:17e9016529cf 13 know::time2.attach(&isr_systick2,1.0); //定时器中断设置
donghuoyinzi 0:17e9016529cf 14 know::time1.attach_us(&isr_systick1,15625);
donghuoyinzi 0:17e9016529cf 15 know::time3.attach_us(&isr_systick3,15625);
donghuoyinzi 0:17e9016529cf 16 }
donghuoyinzi 0:17e9016529cf 17
donghuoyinzi 0:17e9016529cf 18 /*****************************
donghuoyinzi 0:17e9016529cf 19 Fun.:
donghuoyinzi 0:17e9016529cf 20 Desc.:
donghuoyinzi 0:17e9016529cf 21 Auth. Vesion:2018.1.5
donghuoyinzi 0:17e9016529cf 22 *****************************/
donghuoyinzi 0:17e9016529cf 23 void cloSAct::start(void)
donghuoyinzi 0:17e9016529cf 24 {
donghuoyinzi 0:17e9016529cf 25
donghuoyinzi 0:17e9016529cf 26 }
donghuoyinzi 0:17e9016529cf 27
donghuoyinzi 0:17e9016529cf 28 /*****************************
donghuoyinzi 0:17e9016529cf 29 Fun.:
donghuoyinzi 0:17e9016529cf 30 Desc.:
donghuoyinzi 0:17e9016529cf 31 Auth. Vesion:2018.1.5
donghuoyinzi 0:17e9016529cf 32 *****************************/
donghuoyinzi 0:17e9016529cf 33 void cloSAct::data(void)
donghuoyinzi 0:17e9016529cf 34 {
donghuoyinzi 0:17e9016529cf 35 know::TestO_S=0;
donghuoyinzi 0:17e9016529cf 36 know::TestO_M=0;
donghuoyinzi 0:17e9016529cf 37 }
donghuoyinzi 0:17e9016529cf 38
donghuoyinzi 0:17e9016529cf 39 /*****************************
donghuoyinzi 0:17e9016529cf 40 Fun.:
donghuoyinzi 0:17e9016529cf 41 Desc.:
donghuoyinzi 0:17e9016529cf 42 Auth.:ZY
donghuoyinzi 0:17e9016529cf 43 Vesion:2018.1.5
donghuoyinzi 0:17e9016529cf 44 *****************************/
donghuoyinzi 0:17e9016529cf 45 void cloSAct::ready(void)
donghuoyinzi 0:17e9016529cf 46 {
donghuoyinzi 0:17e9016529cf 47
donghuoyinzi 0:17e9016529cf 48 }
donghuoyinzi 0:17e9016529cf 49
donghuoyinzi 0:17e9016529cf 50 /*****************************
donghuoyinzi 0:17e9016529cf 51 Fun.: closenr revoke。
donghuoyinzi 0:17e9016529cf 52 Desc.:
donghuoyinzi 0:17e9016529cf 53 Auth. Vesion:2018.1.5
donghuoyinzi 0:17e9016529cf 54 *****************************/
donghuoyinzi 0:17e9016529cf 55 void cloSAct::revok(void)
donghuoyinzi 0:17e9016529cf 56 {
donghuoyinzi 0:17e9016529cf 57
donghuoyinzi 0:17e9016529cf 58 }
donghuoyinzi 0:17e9016529cf 59
donghuoyinzi 0:17e9016529cf 60 /*****************************
donghuoyinzi 0:17e9016529cf 61 Fun.: 打开光耦。
donghuoyinzi 0:17e9016529cf 62 Desc.:
donghuoyinzi 0:17e9016529cf 63 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 64 *****************************/
donghuoyinzi 0:17e9016529cf 65 void cloSAct::put_open(void)
donghuoyinzi 0:17e9016529cf 66 {
donghuoyinzi 0:17e9016529cf 67 tm *tim;
donghuoyinzi 0:17e9016529cf 68 time_t seconds=time(NULL);
donghuoyinzi 0:17e9016529cf 69 tim=localtime(&seconds);
donghuoyinzi 0:17e9016529cf 70
donghuoyinzi 0:17e9016529cf 71 if(tim->tm_hour==11&&tim->tm_min==45){
donghuoyinzi 0:17e9016529cf 72 know::TestO_S=0;
donghuoyinzi 0:17e9016529cf 73 know::TestO_M=1; //分针检测输出引脚置
donghuoyinzi 3:b8766d623f01 74 know::polSta[42]='2'; //putopenS
donghuoyinzi 0:17e9016529cf 75 }
donghuoyinzi 0:17e9016529cf 76 else if(tim->tm_sec==50&&(tim->tm_min==15|| tim->tm_min ==25||tim->tm_min ==35)){
donghuoyinzi 0:17e9016529cf 77 know::TestO_M=0;
donghuoyinzi 1:013b9fdc4e78 78 know::TestO_S=1; //秒针检测输出引脚置高
donghuoyinzi 3:b8766d623f01 79 know::polSta[42]='3'; //putopenS
donghuoyinzi 0:17e9016529cf 80 }
donghuoyinzi 0:17e9016529cf 81
donghuoyinzi 0:17e9016529cf 82 if(tim->tm_sec==10) { //关闭秒光耦
donghuoyinzi 0:17e9016529cf 83 know::TestO_S=0;
donghuoyinzi 3:b8766d623f01 84 know::polSta[42]='0';
donghuoyinzi 0:17e9016529cf 85 }
donghuoyinzi 0:17e9016529cf 86 if(tim->tm_min==10){ //关闭分光耦
donghuoyinzi 0:17e9016529cf 87 know::TestO_M=0;
donghuoyinzi 3:b8766d623f01 88 know::polSta[42]='0';
donghuoyinzi 0:17e9016529cf 89 }
donghuoyinzi 0:17e9016529cf 90 }
donghuoyinzi 0:17e9016529cf 91
donghuoyinzi 0:17e9016529cf 92 /*****************************
donghuoyinzi 0:17e9016529cf 93 Fun.: 秒针检测及判断校准方式(停,正常)。
donghuoyinzi 0:17e9016529cf 94 Desc.:
donghuoyinzi 0:17e9016529cf 95 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 96 *****************************/
donghuoyinzi 0:17e9016529cf 97 void cloSAct::get_sec(void)
donghuoyinzi 0:17e9016529cf 98 {
donghuoyinzi 0:17e9016529cf 99 gsstpSe++;
donghuoyinzi 0:17e9016529cf 100 if(gsstpSe>=128) gsstpSe=0; //防止stpSe溢出
donghuoyinzi 0:17e9016529cf 101
donghuoyinzi 0:17e9016529cf 102 switch(know::TestIn.read()){
donghuoyinzi 0:17e9016529cf 103 case 0:
donghuoyinzi 0:17e9016529cf 104 if(gsstpSe>=6&&gsstpSe<=128){
donghuoyinzi 1:013b9fdc4e78 105 know::TestO_S=0; //关闭秒光耦
donghuoyinzi 0:17e9016529cf 106 judg_sec(); //判断校准方式(停,正常)
donghuoyinzi 0:17e9016529cf 107 }
donghuoyinzi 0:17e9016529cf 108 break;
donghuoyinzi 0:17e9016529cf 109 case 1:
donghuoyinzi 0:17e9016529cf 110 gsstpSe=0;
donghuoyinzi 0:17e9016529cf 111 break;
donghuoyinzi 0:17e9016529cf 112 default:
donghuoyinzi 0:17e9016529cf 113 break;
donghuoyinzi 0:17e9016529cf 114 }
donghuoyinzi 0:17e9016529cf 115 }
donghuoyinzi 0:17e9016529cf 116
donghuoyinzi 0:17e9016529cf 117 /***判断秒校准方式(停,正常)*****/
donghuoyinzi 0:17e9016529cf 118 void cloSAct::judg_sec(void)
donghuoyinzi 0:17e9016529cf 119 {
donghuoyinzi 0:17e9016529cf 120 tm *tim;
donghuoyinzi 0:17e9016529cf 121 time_t seconds=time(NULL);
donghuoyinzi 0:17e9016529cf 122 tim=localtime(&seconds);
donghuoyinzi 0:17e9016529cf 123
donghuoyinzi 3:b8766d623f01 124 if(tim->tm_sec!=56) know::polSta[40]='1'; //getsecS
donghuoyinzi 3:b8766d623f01 125 else know::polSta[40]='2'; //getsecS return =55正常
donghuoyinzi 0:17e9016529cf 126 }
donghuoyinzi 0:17e9016529cf 127
donghuoyinzi 0:17e9016529cf 128 /*****************************
donghuoyinzi 0:17e9016529cf 129 Fun.: 分针检测判断校准方式(停,追、正常)。
donghuoyinzi 0:17e9016529cf 130 Desc.:
donghuoyinzi 0:17e9016529cf 131 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 132 *****************************/
donghuoyinzi 0:17e9016529cf 133 void cloSAct::get_min(void)
donghuoyinzi 0:17e9016529cf 134 {
donghuoyinzi 0:17e9016529cf 135 if(gmstpSe>=0&& gmstpSe<=3){
donghuoyinzi 0:17e9016529cf 136 wait_ms(20);
donghuoyinzi 0:17e9016529cf 137 if(know::TestIn.read()==0){
donghuoyinzi 0:17e9016529cf 138 gmstpSe++;
donghuoyinzi 0:17e9016529cf 139 if(gmstpSe>10) gmstpSe=0; //防止Step溢出
donghuoyinzi 0:17e9016529cf 140 if(gmstpSe==4){
donghuoyinzi 0:17e9016529cf 141 know::TestO_M=0; //关闭分光耦
donghuoyinzi 0:17e9016529cf 142 judg_min(); //判断分位置
donghuoyinzi 0:17e9016529cf 143 }
donghuoyinzi 0:17e9016529cf 144 }
donghuoyinzi 0:17e9016529cf 145 else gmstpSe=0;
donghuoyinzi 0:17e9016529cf 146 return;
donghuoyinzi 0:17e9016529cf 147 }
donghuoyinzi 0:17e9016529cf 148 }
donghuoyinzi 0:17e9016529cf 149
donghuoyinzi 0:17e9016529cf 150 /***判断分校准方式(停,正常)********/
donghuoyinzi 0:17e9016529cf 151 void cloSAct::judg_min(void)
donghuoyinzi 0:17e9016529cf 152 {
donghuoyinzi 0:17e9016529cf 153 tm *tim;
donghuoyinzi 0:17e9016529cf 154 time_t seconds=time(NULL);
donghuoyinzi 0:17e9016529cf 155 tim=localtime(&seconds);
donghuoyinzi 0:17e9016529cf 156
donghuoyinzi 0:17e9016529cf 157 tim->tm_hour=tim->tm_hour%12;
donghuoyinzi 0:17e9016529cf 158
donghuoyinzi 3:b8766d623f01 159 if(tim->tm_hour==11&&tim->tm_min==54) know::polSta[41]='2'; //getminS 正常
donghuoyinzi 3:b8766d623f01 160 else if(tim->tm_hour==11&&tim->tm_min<54&&tim->tm_min>=49) know::polSta[41]='1'; //getminS; 停
donghuoyinzi 3:b8766d623f01 161 else know::polSta[41]='3'; //getminS 追
donghuoyinzi 0:17e9016529cf 162 }
donghuoyinzi 0:17e9016529cf 163
donghuoyinzi 0:17e9016529cf 164 /*****************************
donghuoyinzi 0:17e9016529cf 165 Fun.: 定时器1中断。
donghuoyinzi 0:17e9016529cf 166 Desc.:
donghuoyinzi 0:17e9016529cf 167 Auth. Vesion:2018.1.27
donghuoyinzi 0:17e9016529cf 168 *****************************/
donghuoyinzi 0:17e9016529cf 169 void cloSAct::isr_systick1(void)
donghuoyinzi 0:17e9016529cf 170 {
donghuoyinzi 1:013b9fdc4e78 171 cloDAct::put_snorm();
donghuoyinzi 1:013b9fdc4e78 172 cloDAct::put_mnorm();
donghuoyinzi 0:17e9016529cf 173 }
donghuoyinzi 0:17e9016529cf 174
donghuoyinzi 0:17e9016529cf 175 /*****************************
donghuoyinzi 0:17e9016529cf 176 Fun.: 定时器2中断。
donghuoyinzi 0:17e9016529cf 177 Desc.:
donghuoyinzi 0:17e9016529cf 178 Auth. Vesion:2018.1.27
donghuoyinzi 0:17e9016529cf 179 *****************************/
donghuoyinzi 0:17e9016529cf 180 void cloSAct::isr_systick2(void)
donghuoyinzi 0:17e9016529cf 181 {
donghuoyinzi 0:17e9016529cf 182 put_open(); //判断是否开/关秒、分光耦
donghuoyinzi 0:17e9016529cf 183
donghuoyinzi 3:b8766d623f01 184 if(know::polSta[42]=='2'&&know::polSta[47]=='0') know::time3.attach_us(&isr_systick3,15625); //putsecS,定时器3打开,运行其中的秒检测
donghuoyinzi 1:013b9fdc4e78 185
donghuoyinzi 3:b8766d623f01 186 if(know::polSta[42]=='3') { //检测分
donghuoyinzi 1:013b9fdc4e78 187 get_min();
donghuoyinzi 3:b8766d623f01 188 if(know::polSta[41]=='1'||know::polSta[41]=='3') { //getminS
donghuoyinzi 0:17e9016529cf 189 know::time1.attach_us(0,15625); //停或者追都关闭定时器1
donghuoyinzi 3:b8766d623f01 190 if(know::polSta[41]=='3'&&know::polSta[47]=='0') know::time3.attach_us(&isr_systick3,15625); //打开定时器3,运行其中的分追
donghuoyinzi 3:b8766d623f01 191 if(know::polSta[41]=='1'&&know::polSta[29]=='0') { //put mstop S
donghuoyinzi 1:013b9fdc4e78 192 cloDAct::put_mstop();
donghuoyinzi 3:b8766d623f01 193 if(know::polSta[29]=='1') { //停分针结束
donghuoyinzi 3:b8766d623f01 194 know::polSta[29]='0'; //状态复位
donghuoyinzi 3:b8766d623f01 195 know::polSta[41]='0';
donghuoyinzi 3:b8766d623f01 196 know::polSta[42]='0';
donghuoyinzi 0:17e9016529cf 197 know::time1.attach_us(&isr_systick1,15625);
donghuoyinzi 0:17e9016529cf 198 know::time3.attach_us(0,15625); //任务互斥,关闭定时器3
donghuoyinzi 3:b8766d623f01 199 know::polSta[47]='0';
donghuoyinzi 0:17e9016529cf 200 }
donghuoyinzi 0:17e9016529cf 201 }
donghuoyinzi 0:17e9016529cf 202 }
donghuoyinzi 0:17e9016529cf 203 }
donghuoyinzi 0:17e9016529cf 204
donghuoyinzi 0:17e9016529cf 205 tick2cnt++;
donghuoyinzi 1:013b9fdc4e78 206 if(tick2cnt>=20) {
donghuoyinzi 0:17e9016529cf 207 tick2cnt=0;
donghuoyinzi 3:b8766d623f01 208 know::polSta[46]='1'; //state of tick2S
donghuoyinzi 0:17e9016529cf 209 }
donghuoyinzi 0:17e9016529cf 210 if(tick2cnt>=40) tick2cnt=0;
donghuoyinzi 0:17e9016529cf 211
donghuoyinzi 0:17e9016529cf 212 }
donghuoyinzi 0:17e9016529cf 213
donghuoyinzi 0:17e9016529cf 214 /*****************************
donghuoyinzi 0:17e9016529cf 215 Fun.: 定时器3中断。
donghuoyinzi 0:17e9016529cf 216 Desc.:
donghuoyinzi 0:17e9016529cf 217 Auth. Vesion:2018.1.27
donghuoyinzi 0:17e9016529cf 218 *****************************/
donghuoyinzi 0:17e9016529cf 219 void cloSAct::isr_systick3(void)
donghuoyinzi 0:17e9016529cf 220 {
donghuoyinzi 3:b8766d623f01 221 know::polSta[47]='1';
donghuoyinzi 0:17e9016529cf 222
donghuoyinzi 3:b8766d623f01 223 if(know::polSta[42]=='1'&& know::polSta[40]=='0') get_sec(); //putsecS,getsecS
donghuoyinzi 0:17e9016529cf 224
donghuoyinzi 3:b8766d623f01 225 if(know::polSta[40]=='1'&& know::polSta[28]=='0'){ //getsecS, putsstopS
donghuoyinzi 0:17e9016529cf 226 know::time1.attach_us(0,15625);
donghuoyinzi 0:17e9016529cf 227 cloDAct::put_sstop(); //停止秒针
donghuoyinzi 3:b8766d623f01 228 if(know::polSta[28]=='1'){ //校秒结束
donghuoyinzi 3:b8766d623f01 229 know::polSta[28]='0'; //状态复位
donghuoyinzi 3:b8766d623f01 230 know::polSta[40]='0';
donghuoyinzi 3:b8766d623f01 231 know::polSta[42]='0';
donghuoyinzi 3:b8766d623f01 232 know::polSta[47]='0';
donghuoyinzi 0:17e9016529cf 233 know::time1.attach_us(&isr_systick1,15625);
donghuoyinzi 0:17e9016529cf 234 know::time3.attach_us(0,15625);
donghuoyinzi 0:17e9016529cf 235 }
donghuoyinzi 0:17e9016529cf 236 }
donghuoyinzi 0:17e9016529cf 237
donghuoyinzi 3:b8766d623f01 238 if(know::polSta[41]=='3'&&know::polSta[27]=='0'){ // getminS, putmchasS分针追针
donghuoyinzi 0:17e9016529cf 239 cloDAct::put_mchas();
donghuoyinzi 3:b8766d623f01 240 if(know::polSta[27]=='1'){ //追分完成
donghuoyinzi 3:b8766d623f01 241 know::polSta[27]='0'; //状态复位
donghuoyinzi 3:b8766d623f01 242 know::polSta[41]='0';
donghuoyinzi 3:b8766d623f01 243 know::polSta[42]='0';
donghuoyinzi 3:b8766d623f01 244 know::polSta[47]='0';
donghuoyinzi 0:17e9016529cf 245 know::time1.attach_us(&isr_systick1,15625);
donghuoyinzi 1:013b9fdc4e78 246 know::time3.attach_us(0,15625);
donghuoyinzi 0:17e9016529cf 247 }
donghuoyinzi 0:17e9016529cf 248 }
donghuoyinzi 0:17e9016529cf 249 }
donghuoyinzi 0:17e9016529cf 250
donghuoyinzi 0:17e9016529cf 251