yan zhang
/
NB_CLOCK_180505
clock
myScope/myclosenr.cpp@3:b8766d623f01, 2018-05-22 (annotated)
- Committer:
- donghuoyinzi
- Date:
- Tue May 22 09:10:05 2018 +0000
- Revision:
- 3:b8766d623f01
- Parent:
- 2:e54d9d87c6cb
0522
Who changed what in which revision?
User | Revision | Line number | New 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 |