clock

Dependencies:   mbed

Committer:
donghuoyinzi
Date:
Sat May 12 03:03:14 2018 +0000
Revision:
1:013b9fdc4e78
Parent:
0:17e9016529cf
Child:
2:e54d9d87c6cb
180512

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 0:17e9016529cf 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 1:013b9fdc4e78 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 1:013b9fdc4e78 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 0:17e9016529cf 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 0:17e9016529cf 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 1:013b9fdc4e78 124 if(tim->tm_sec!=56) know::polSta[40]="1"; //getsecS
donghuoyinzi 1:013b9fdc4e78 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 1:013b9fdc4e78 159 if(tim->tm_hour==11&&tim->tm_min==54) know::polSta[41]="2"; //getminS 正常
donghuoyinzi 1:013b9fdc4e78 160 else if(tim->tm_hour==11&&tim->tm_min<54&&tim->tm_min>=49) know::polSta[41]="1"; //getminS; 停
donghuoyinzi 1:013b9fdc4e78 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 1:013b9fdc4e78 184 if(know::polSta[42]=="2"&&know::polSta[47]=="0") know::time3.attach_us(&isr_systick3,15625); //putsecS,定时器3打开,运行其中的秒检测
donghuoyinzi 1:013b9fdc4e78 185
donghuoyinzi 1:013b9fdc4e78 186 if(know::polSta[42]=="3") { //检测分
donghuoyinzi 1:013b9fdc4e78 187 get_min();
donghuoyinzi 1:013b9fdc4e78 188 if(know::polSta[41]=="1"||know::polSta[41]=="3") { //getminS
donghuoyinzi 0:17e9016529cf 189 know::time1.attach_us(0,15625); //停或者追都关闭定时器1
donghuoyinzi 1:013b9fdc4e78 190 if(know::polSta[41]=="3"&&know::polSta[47]=="0") know::time3.attach_us(&isr_systick3,15625); //打开定时器3,运行其中的分追
donghuoyinzi 1:013b9fdc4e78 191 if(know::polSta[41]=="1"&&know::polSta[29]=="0") { //put mstop S
donghuoyinzi 1:013b9fdc4e78 192 cloDAct::put_mstop();
donghuoyinzi 1:013b9fdc4e78 193 if(know::polSta[29]=="1") { //停分针结束
donghuoyinzi 1:013b9fdc4e78 194 know::polSta[29]="0"; //状态复位
donghuoyinzi 1:013b9fdc4e78 195 know::polSta[41]="0";
donghuoyinzi 1:013b9fdc4e78 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 0:17e9016529cf 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 1:013b9fdc4e78 205 know::polSta[15]="1"; //state of step
donghuoyinzi 0:17e9016529cf 206
donghuoyinzi 0:17e9016529cf 207 tick2cnt++;
donghuoyinzi 1:013b9fdc4e78 208 if(tick2cnt>=20) {
donghuoyinzi 0:17e9016529cf 209 tick2cnt=0;
donghuoyinzi 1:013b9fdc4e78 210 know::polSta[46]="1"; //state of tick2S
donghuoyinzi 0:17e9016529cf 211 }
donghuoyinzi 0:17e9016529cf 212 if(tick2cnt>=40) tick2cnt=0;
donghuoyinzi 0:17e9016529cf 213
donghuoyinzi 0:17e9016529cf 214 }
donghuoyinzi 0:17e9016529cf 215
donghuoyinzi 0:17e9016529cf 216 /*****************************
donghuoyinzi 0:17e9016529cf 217 Fun.: 定时器3中断。
donghuoyinzi 0:17e9016529cf 218 Desc.:
donghuoyinzi 0:17e9016529cf 219 Auth. Vesion:2018.1.27
donghuoyinzi 0:17e9016529cf 220 *****************************/
donghuoyinzi 0:17e9016529cf 221 void cloSAct::isr_systick3(void)
donghuoyinzi 0:17e9016529cf 222 {
donghuoyinzi 0:17e9016529cf 223 know::polSta[47]="1";
donghuoyinzi 0:17e9016529cf 224
donghuoyinzi 1:013b9fdc4e78 225 if(know::polSta[42]=="1"&& know::polSta[40]=="0") get_sec(); //putsecS,getsecS
donghuoyinzi 0:17e9016529cf 226
donghuoyinzi 1:013b9fdc4e78 227 if(know::polSta[40]=="1"&& know::polSta[28]=="0"){ //getsecS, putsstopS
donghuoyinzi 0:17e9016529cf 228 know::time1.attach_us(0,15625);
donghuoyinzi 0:17e9016529cf 229 cloDAct::put_sstop(); //停止秒针
donghuoyinzi 1:013b9fdc4e78 230 if(know::polSta[28]=="1"){ //校秒结束
donghuoyinzi 1:013b9fdc4e78 231 know::polSta[28]="0"; //状态复位
donghuoyinzi 1:013b9fdc4e78 232 know::polSta[40]="0";
donghuoyinzi 1:013b9fdc4e78 233 know::polSta[42]="0";
donghuoyinzi 1:013b9fdc4e78 234 know::polSta[47]="0";
donghuoyinzi 0:17e9016529cf 235 know::time1.attach_us(&isr_systick1,15625);
donghuoyinzi 0:17e9016529cf 236 know::time3.attach_us(0,15625);
donghuoyinzi 0:17e9016529cf 237 }
donghuoyinzi 0:17e9016529cf 238 }
donghuoyinzi 0:17e9016529cf 239
donghuoyinzi 1:013b9fdc4e78 240 if(know::polSta[41]=="3"&&know::polSta[27]=="0"){ // getminS, putmchasS分针追针
donghuoyinzi 0:17e9016529cf 241 cloDAct::put_mchas();
donghuoyinzi 1:013b9fdc4e78 242 if(know::polSta[27]=="1"){ //追分完成
donghuoyinzi 1:013b9fdc4e78 243 know::polSta[27]="0"; //状态复位
donghuoyinzi 1:013b9fdc4e78 244 know::polSta[41]="0";
donghuoyinzi 1:013b9fdc4e78 245 know::polSta[42]="0";
donghuoyinzi 1:013b9fdc4e78 246 know::polSta[47]="0";
donghuoyinzi 0:17e9016529cf 247 know::time1.attach_us(&isr_systick1,15625);
donghuoyinzi 1:013b9fdc4e78 248 know::time3.attach_us(0,15625);
donghuoyinzi 0:17e9016529cf 249 }
donghuoyinzi 0:17e9016529cf 250 }
donghuoyinzi 0:17e9016529cf 251 }
donghuoyinzi 0:17e9016529cf 252
donghuoyinzi 0:17e9016529cf 253