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