yan zhang
/
NB_CLOCK_180505
clock
myScope/mybc95.cpp@2:e54d9d87c6cb, 2018-05-14 (annotated)
- Committer:
- donghuoyinzi
- Date:
- Mon May 14 00:04:42 2018 +0000
- Revision:
- 2:e54d9d87c6cb
- Parent:
- 1:013b9fdc4e78
- Child:
- 3:b8766d623f01
0514
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
donghuoyinzi | 0:17e9016529cf | 1 | #include "mybc95.h" |
donghuoyinzi | 0:17e9016529cf | 2 | |
donghuoyinzi | 1:013b9fdc4e78 | 3 | char buf_bc95Tx[7]=""; |
donghuoyinzi | 1:013b9fdc4e78 | 4 | char bc95Act::buf[50]= {0x00}; |
donghuoyinzi | 1:013b9fdc4e78 | 5 | char bc95Act::buf_bc95Tx[buf_bc95TxSize]= {0x00}; |
donghuoyinzi | 1:013b9fdc4e78 | 6 | char bc95Act::buf_bc95Rx[buf_bc95RxSize]= {0x00}; |
donghuoyinzi | 1:013b9fdc4e78 | 7 | int bc95Act::stpSe=0; |
donghuoyinzi | 1:013b9fdc4e78 | 8 | int bc95Act::cnt=0; |
donghuoyinzi | 1:013b9fdc4e78 | 9 | int bc95Act::cntche; |
donghuoyinzi | 1:013b9fdc4e78 | 10 | int bc95Act::cntlink=0; |
donghuoyinzi | 1:013b9fdc4e78 | 11 | int bc95Act::year=0; |
donghuoyinzi | 1:013b9fdc4e78 | 12 | int bc95Act::mon=0; |
donghuoyinzi | 1:013b9fdc4e78 | 13 | int bc95Act::day=0; |
donghuoyinzi | 1:013b9fdc4e78 | 14 | int bc95Act::hour=0; |
donghuoyinzi | 1:013b9fdc4e78 | 15 | int bc95Act::min=0; |
donghuoyinzi | 1:013b9fdc4e78 | 16 | int bc95Act::sec=0; |
donghuoyinzi | 1:013b9fdc4e78 | 17 | const int mon_table[12]= {31,28,31,30,31,30,31,31,30,31,30,31}; |
donghuoyinzi | 0:17e9016529cf | 18 | /***************************** |
donghuoyinzi | 0:17e9016529cf | 19 | Fun.: base initialization of bc95。 |
donghuoyinzi | 0:17e9016529cf | 20 | Desc.: |
donghuoyinzi | 0:17e9016529cf | 21 | Auth. Vesion:2017.7.2 |
donghuoyinzi | 0:17e9016529cf | 22 | *****************************/ |
donghuoyinzi | 0:17e9016529cf | 23 | void bc95Act::init(void) |
donghuoyinzi | 0:17e9016529cf | 24 | { |
donghuoyinzi | 0:17e9016529cf | 25 | know::uart3.baud(9600); |
donghuoyinzi | 0:17e9016529cf | 26 | know::uart3.attach(&getISR,SerialBase::RxIrq); |
donghuoyinzi | 0:17e9016529cf | 27 | } |
donghuoyinzi | 0:17e9016529cf | 28 | |
donghuoyinzi | 0:17e9016529cf | 29 | /***************************** |
donghuoyinzi | 0:17e9016529cf | 30 | Fun.: initialization of bc95 start。 |
donghuoyinzi | 0:17e9016529cf | 31 | Desc.: |
donghuoyinzi | 0:17e9016529cf | 32 | Auth. Vesion:2017.7.2 |
donghuoyinzi | 0:17e9016529cf | 33 | *****************************/ |
donghuoyinzi | 0:17e9016529cf | 34 | void bc95Act::start(void) |
donghuoyinzi | 0:17e9016529cf | 35 | { |
donghuoyinzi | 0:17e9016529cf | 36 | know::pow.write(1); //BC95POW_ON(); |
donghuoyinzi | 0:17e9016529cf | 37 | wait(50); |
donghuoyinzi | 0:17e9016529cf | 38 | } |
donghuoyinzi | 0:17e9016529cf | 39 | |
donghuoyinzi | 0:17e9016529cf | 40 | /***************************** |
donghuoyinzi | 0:17e9016529cf | 41 | Fun.: initialization of bc95 data。 |
donghuoyinzi | 0:17e9016529cf | 42 | Desc.: |
donghuoyinzi | 0:17e9016529cf | 43 | Auth. Vesion:2017.7.2 |
donghuoyinzi | 0:17e9016529cf | 44 | *****************************/ |
donghuoyinzi | 0:17e9016529cf | 45 | void bc95Act::data(void) |
donghuoyinzi | 0:17e9016529cf | 46 | { |
donghuoyinzi | 0:17e9016529cf | 47 | stpSe=1; |
donghuoyinzi | 0:17e9016529cf | 48 | cnt=0; |
donghuoyinzi | 0:17e9016529cf | 49 | } |
donghuoyinzi | 0:17e9016529cf | 50 | |
donghuoyinzi | 0:17e9016529cf | 51 | /***************************** |
donghuoyinzi | 0:17e9016529cf | 52 | Fun.: initialization of bc95 ready。 |
donghuoyinzi | 0:17e9016529cf | 53 | Desc.: |
donghuoyinzi | 0:17e9016529cf | 54 | Auth. Vesion:2017.7.2 |
donghuoyinzi | 0:17e9016529cf | 55 | *****************************/ |
donghuoyinzi | 0:17e9016529cf | 56 | void bc95Act::ready(void) |
donghuoyinzi | 0:17e9016529cf | 57 | { |
donghuoyinzi | 0:17e9016529cf | 58 | |
donghuoyinzi | 0:17e9016529cf | 59 | } |
donghuoyinzi | 0:17e9016529cf | 60 | |
donghuoyinzi | 0:17e9016529cf | 61 | /***************************** |
donghuoyinzi | 0:17e9016529cf | 62 | Fun.: bc95 revoke |
donghuoyinzi | 0:17e9016529cf | 63 | Desc.: |
donghuoyinzi | 0:17e9016529cf | 64 | Auth. Vesion:2017.7.2 |
donghuoyinzi | 0:17e9016529cf | 65 | *****************************/ |
donghuoyinzi | 0:17e9016529cf | 66 | void bc95Act::revok(void) |
donghuoyinzi | 0:17e9016529cf | 67 | { |
donghuoyinzi | 0:17e9016529cf | 68 | know::pow.write(0); //BC95POW_OFF(); |
donghuoyinzi | 0:17e9016529cf | 69 | } |
donghuoyinzi | 0:17e9016529cf | 70 | |
donghuoyinzi | 0:17e9016529cf | 71 | /***************************** |
donghuoyinzi | 0:17e9016529cf | 72 | Fun.: get time。 |
donghuoyinzi | 0:17e9016529cf | 73 | Desc.: |
donghuoyinzi | 0:17e9016529cf | 74 | Auth. Vesion:2017.7.2 |
donghuoyinzi | 0:17e9016529cf | 75 | *****************************/ |
donghuoyinzi | 2:e54d9d87c6cb | 76 | char *bc95Act::get_tim(void) |
donghuoyinzi | 0:17e9016529cf | 77 | { |
donghuoyinzi | 2:e54d9d87c6cb | 78 | static char buf_tim[7]=""; |
donghuoyinzi | 1:013b9fdc4e78 | 79 | tm *tim; |
donghuoyinzi | 1:013b9fdc4e78 | 80 | time_t seconds=time(NULL); |
donghuoyinzi | 1:013b9fdc4e78 | 81 | tim=localtime(&seconds); |
donghuoyinzi | 1:013b9fdc4e78 | 82 | |
donghuoyinzi | 2:e54d9d87c6cb | 83 | buf_tim[0]=char(tim->tm_year-100); |
donghuoyinzi | 2:e54d9d87c6cb | 84 | buf_tim[1]=char(tim->tm_mon); |
donghuoyinzi | 2:e54d9d87c6cb | 85 | buf_tim[2]=char(tim->tm_mday); |
donghuoyinzi | 2:e54d9d87c6cb | 86 | buf_tim[3]=char(tim->tm_hour); |
donghuoyinzi | 2:e54d9d87c6cb | 87 | buf_tim[4]=char(tim->tm_min); |
donghuoyinzi | 2:e54d9d87c6cb | 88 | buf_tim[5]=char(tim->tm_sec); |
donghuoyinzi | 2:e54d9d87c6cb | 89 | |
donghuoyinzi | 2:e54d9d87c6cb | 90 | return buf_tim; |
donghuoyinzi | 0:17e9016529cf | 91 | } |
donghuoyinzi | 0:17e9016529cf | 92 | |
donghuoyinzi | 0:17e9016529cf | 93 | /***************************** |
donghuoyinzi | 0:17e9016529cf | 94 | Fun.: get know。 |
donghuoyinzi | 0:17e9016529cf | 95 | Desc.: |
donghuoyinzi | 0:17e9016529cf | 96 | Auth. Vesion:2017.7.2 |
donghuoyinzi | 0:17e9016529cf | 97 | *****************************/ |
donghuoyinzi | 0:17e9016529cf | 98 | void bc95Act::get_knw(void) |
donghuoyinzi | 0:17e9016529cf | 99 | { |
donghuoyinzi | 0:17e9016529cf | 100 | if(bc95Act::stpSe==1){ |
donghuoyinzi | 0:17e9016529cf | 101 | know::uart3.printf("AT+CCLK?\r\n"); |
donghuoyinzi | 0:17e9016529cf | 102 | jump_Judg(2,250); |
donghuoyinzi | 0:17e9016529cf | 103 | |
donghuoyinzi | 0:17e9016529cf | 104 | } |
donghuoyinzi | 0:17e9016529cf | 105 | if(bc95Act::stpSe==2) CheckOK(200,1,10); //10是最大的查询次数 |
donghuoyinzi | 0:17e9016529cf | 106 | if(bc95Act::stpSe==250){ //规范250是失败 |
donghuoyinzi | 1:013b9fdc4e78 | 107 | know::polSta[15]="2"; |
donghuoyinzi | 0:17e9016529cf | 108 | bc95Act::stpSe=0; |
donghuoyinzi | 0:17e9016529cf | 109 | } |
donghuoyinzi | 0:17e9016529cf | 110 | if(bc95Act::stpSe==200){ //规范200是成功, |
donghuoyinzi | 0:17e9016529cf | 111 | bc95Act::stpSe=0; |
donghuoyinzi | 0:17e9016529cf | 112 | //know::magtsk(); |
donghuoyinzi | 1:013b9fdc4e78 | 113 | know::polSta[15]="1"; |
donghuoyinzi | 0:17e9016529cf | 114 | } |
donghuoyinzi | 0:17e9016529cf | 115 | return; |
donghuoyinzi | 0:17e9016529cf | 116 | } |
donghuoyinzi | 0:17e9016529cf | 117 | |
donghuoyinzi | 0:17e9016529cf | 118 | /***************************************** |
donghuoyinzi | 0:17e9016529cf | 119 | Fun.: rtc set。 |
donghuoyinzi | 0:17e9016529cf | 120 | Desc.: |
donghuoyinzi | 0:17e9016529cf | 121 | Auth. Vesion:2017.7.2 |
donghuoyinzi | 0:17e9016529cf | 122 | *****************************************/ |
donghuoyinzi | 0:17e9016529cf | 123 | void bc95Act::setrtc(void) |
donghuoyinzi | 0:17e9016529cf | 124 | { |
donghuoyinzi | 0:17e9016529cf | 125 | uint32_t secc; |
donghuoyinzi | 0:17e9016529cf | 126 | |
donghuoyinzi | 0:17e9016529cf | 127 | changdate(); |
donghuoyinzi | 0:17e9016529cf | 128 | secc=changsec(); |
donghuoyinzi | 0:17e9016529cf | 129 | set_time(secc); |
donghuoyinzi | 0:17e9016529cf | 130 | } |
donghuoyinzi | 0:17e9016529cf | 131 | |
donghuoyinzi | 2:e54d9d87c6cb | 132 | void bc95Act::changdate(void) |
donghuoyinzi | 0:17e9016529cf | 133 | { |
donghuoyinzi | 2:e54d9d87c6cb | 134 | year= (buf_bc95Rx[5]-0x30)*10+(buf_bc95Rx[6]-0x30)+2000; //年 |
donghuoyinzi | 2:e54d9d87c6cb | 135 | mon = (buf_bc95Rx[8]-0x30)*10+(buf_bc95Rx[9]-0x30); //月 |
donghuoyinzi | 2:e54d9d87c6cb | 136 | day = (buf_bc95Rx[11]-0x30)*10+(buf_bc95Rx[12]-0x30); //日 |
donghuoyinzi | 2:e54d9d87c6cb | 137 | hour= (buf_bc95Rx[14]-0x30)*10+(buf_bc95Rx[15]-0x30); //时 |
donghuoyinzi | 2:e54d9d87c6cb | 138 | min = (buf_bc95Rx[17]-0x30)*10+(buf_bc95Rx[18]-0x30); //分 |
donghuoyinzi | 2:e54d9d87c6cb | 139 | sec = (buf_bc95Rx[20]-0x30)*10+(buf_bc95Rx[21]-0x30); //秒 |
donghuoyinzi | 0:17e9016529cf | 140 | } |
donghuoyinzi | 0:17e9016529cf | 141 | |
donghuoyinzi | 2:e54d9d87c6cb | 142 | uint32_t bc95Act::changsec(void) |
donghuoyinzi | 0:17e9016529cf | 143 | { |
donghuoyinzi | 0:17e9016529cf | 144 | uint16_t t; |
donghuoyinzi | 0:17e9016529cf | 145 | uint32_t seccount=0; |
donghuoyinzi | 0:17e9016529cf | 146 | |
donghuoyinzi | 1:013b9fdc4e78 | 147 | for(t=1970; t< year; t++) { |
donghuoyinzi | 0:17e9016529cf | 148 | if(Is_Leap_Year(t)) seccount+=31622400; |
donghuoyinzi | 1:013b9fdc4e78 | 149 | else seccount+=31536000; |
donghuoyinzi | 0:17e9016529cf | 150 | } |
donghuoyinzi | 0:17e9016529cf | 151 | mon-=1; |
donghuoyinzi | 1:013b9fdc4e78 | 152 | for(t=0; t< mon; t++) { |
donghuoyinzi | 0:17e9016529cf | 153 | seccount+=(uint32_t) mon_table[t]*86400; |
donghuoyinzi | 1:013b9fdc4e78 | 154 | if(Is_Leap_Year(year)&&t==1) seccount+=86400; |
donghuoyinzi | 0:17e9016529cf | 155 | } |
donghuoyinzi | 1:013b9fdc4e78 | 156 | seccount+=(uint32_t)( day-1)*86400; |
donghuoyinzi | 0:17e9016529cf | 157 | seccount+=(uint32_t) hour*3600; |
donghuoyinzi | 1:013b9fdc4e78 | 158 | seccount+=(uint32_t) min*60; |
donghuoyinzi | 0:17e9016529cf | 159 | seccount+= sec; |
donghuoyinzi | 1:013b9fdc4e78 | 160 | return seccount; |
donghuoyinzi | 0:17e9016529cf | 161 | } |
donghuoyinzi | 0:17e9016529cf | 162 | |
donghuoyinzi | 0:17e9016529cf | 163 | /***************************************** |
donghuoyinzi | 0:17e9016529cf | 164 | Fun.: 闰年判断。 |
donghuoyinzi | 0:17e9016529cf | 165 | Desc.: |
donghuoyinzi | 0:17e9016529cf | 166 | Auth. Vesion:2017.7.2 |
donghuoyinzi | 0:17e9016529cf | 167 | *****************************************/ |
donghuoyinzi | 0:17e9016529cf | 168 | uint8_t bc95Act::Is_Leap_Year(uint16_t year) |
donghuoyinzi | 0:17e9016529cf | 169 | { |
donghuoyinzi | 1:013b9fdc4e78 | 170 | if(year%4==0) { |
donghuoyinzi | 1:013b9fdc4e78 | 171 | if(year%100==0) { |
donghuoyinzi | 1:013b9fdc4e78 | 172 | if(year%400==0)return 1;// |
donghuoyinzi | 1:013b9fdc4e78 | 173 | else return 0; |
donghuoyinzi | 1:013b9fdc4e78 | 174 | } else return 1; |
donghuoyinzi | 1:013b9fdc4e78 | 175 | } else return 0; |
donghuoyinzi | 0:17e9016529cf | 176 | } |
donghuoyinzi | 0:17e9016529cf | 177 | |
donghuoyinzi | 0:17e9016529cf | 178 | /***************************** |
donghuoyinzi | 0:17e9016529cf | 179 | Fun.: 判断AT指令返回值。 |
donghuoyinzi | 0:17e9016529cf | 180 | Desc.: |
donghuoyinzi | 0:17e9016529cf | 181 | Auth. Vesion:2017.7.2 |
donghuoyinzi | 0:17e9016529cf | 182 | *****************************/ |
donghuoyinzi | 0:17e9016529cf | 183 | void bc95Act::jump_Judg(int Chekstep,int Nexnexstep){ |
donghuoyinzi | 0:17e9016529cf | 184 | bc95Act::stpSe =Chekstep; |
donghuoyinzi | 0:17e9016529cf | 185 | bc95Act::cntche=0; |
donghuoyinzi | 0:17e9016529cf | 186 | bc95Act::cntlink++; |
donghuoyinzi | 0:17e9016529cf | 187 | if(bc95Act::cntlink>2){ |
donghuoyinzi | 0:17e9016529cf | 188 | bc95Act::stpSe=Nexnexstep; |
donghuoyinzi | 0:17e9016529cf | 189 | bc95Act::cntlink=0; |
donghuoyinzi | 0:17e9016529cf | 190 | } |
donghuoyinzi | 0:17e9016529cf | 191 | } |
donghuoyinzi | 0:17e9016529cf | 192 | |
donghuoyinzi | 0:17e9016529cf | 193 | void bc95Act::CheckOK(int Nexstp,int Lastp,int maxstp) |
donghuoyinzi | 0:17e9016529cf | 194 | { |
donghuoyinzi | 0:17e9016529cf | 195 | if(know::polSta[17]=="1"){ |
donghuoyinzi | 0:17e9016529cf | 196 | know::polSta[17]="0"; |
donghuoyinzi | 0:17e9016529cf | 197 | bc95Act::stpSe=Nexstp; |
donghuoyinzi | 0:17e9016529cf | 198 | bc95Act::cntlink=0; |
donghuoyinzi | 0:17e9016529cf | 199 | } |
donghuoyinzi | 0:17e9016529cf | 200 | else{ |
donghuoyinzi | 0:17e9016529cf | 201 | bc95Act::stpSe= bc95Act::stpSe; |
donghuoyinzi | 0:17e9016529cf | 202 | bc95Act::cntche++; |
donghuoyinzi | 0:17e9016529cf | 203 | if(bc95Act::cntche>maxstp) bc95Act::stpSe=Lastp; |
donghuoyinzi | 0:17e9016529cf | 204 | } |
donghuoyinzi | 0:17e9016529cf | 205 | } |
donghuoyinzi | 0:17e9016529cf | 206 | |
donghuoyinzi | 0:17e9016529cf | 207 | void bc95Act::put(void) |
donghuoyinzi | 0:17e9016529cf | 208 | { |
donghuoyinzi | 1:013b9fdc4e78 | 209 | know::uart3.printf("AT+NSOCR=DGRAM,17,9090,1\r\n"); |
donghuoyinzi | 0:17e9016529cf | 210 | wait_ms(50); |
donghuoyinzi | 1:013b9fdc4e78 | 211 | know::uart3.printf("%s",know::polDat[2].c_str()); |
donghuoyinzi | 0:17e9016529cf | 212 | wait_ms(50); |
donghuoyinzi | 1:013b9fdc4e78 | 213 | know::uart3.printf("AT+NSOCL=0\r\n"); |
donghuoyinzi | 0:17e9016529cf | 214 | wait_ms(50); |
donghuoyinzi | 0:17e9016529cf | 215 | |
donghuoyinzi | 1:013b9fdc4e78 | 216 | know::polSta[16]=1; |
donghuoyinzi | 0:17e9016529cf | 217 | } |
donghuoyinzi | 0:17e9016529cf | 218 | |
donghuoyinzi | 0:17e9016529cf | 219 | /***************************** |
donghuoyinzi | 0:17e9016529cf | 220 | Fun.: bc95接收数据中断函数。 |
donghuoyinzi | 0:17e9016529cf | 221 | Desc.: |
donghuoyinzi | 0:17e9016529cf | 222 | Auth. Vesion:2017.7.2 |
donghuoyinzi | 0:17e9016529cf | 223 | *****************************/ |
donghuoyinzi | 0:17e9016529cf | 224 | void bc95Act::getISR(void) |
donghuoyinzi | 0:17e9016529cf | 225 | { |
donghuoyinzi | 0:17e9016529cf | 226 | char buf; |
donghuoyinzi | 0:17e9016529cf | 227 | |
donghuoyinzi | 0:17e9016529cf | 228 | buf=know::uart3.getc(); |
donghuoyinzi | 0:17e9016529cf | 229 | bc95Act::buf[cnt]=buf; |
donghuoyinzi | 0:17e9016529cf | 230 | cnt++; |
donghuoyinzi | 0:17e9016529cf | 231 | if(cnt>5&&buf==0x0D) cnt=0; |
donghuoyinzi | 0:17e9016529cf | 232 | if(cnt>40) cnt=0; |
donghuoyinzi | 0:17e9016529cf | 233 | } |