clock

Dependencies:   mbed

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?

UserRevisionLine numberNew 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