73b3a3f32954423b27a5491f7beed56379e37e64.svn-base 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. C51 COMPILER V9.53.0.0 MAIN 09/30/2018 11:45:29 PAGE 1
  2. C51 COMPILER V9.53.0.0, COMPILATION OF MODULE MAIN
  3. OBJECT MODULE PLACED IN .\Output\Main.obj
  4. COMPILER INVOKED BY: D:\Keil_v5\C51\BIN\C51.EXE ..\..\Code\User\Main.c LARGE OPTIMIZE(0,SPEED) BROWSE INCDIR(../../Code/
  5. -Include;../../Code/User;../../Code/User/Common;../../Code/User/Driver) DEFINE(FOSC_160000=1) DEBUG OBJECTEXTEND PRINT(.\
  6. -Output\LST\Main.lst) TABS(2) OBJECT(.\Output\Main.obj)
  7. line level source
  8. 1 /******************************************************************************/
  9. 2 /* -- 居加居-- */
  10. 3 /*
  11. 4 // 文件名:
  12. 5 // 说明:
  13. 6 // 编写人员:kinve
  14. 7 // 编写日期:2018-8-21
  15. 8 // 程序维护:
  16. 9 // 维护记录:
  17. 10 //
  18. 11 //
  19. 12 */
  20. 13 // 免责声明:
  21. 14 // (c) Anxinke Corporation. All rights reserved.
  22. 15 /******************************************************************************/
  23. 16 #include <string.h>
  24. 17 #include "Common.h"
  25. 18 #include "Delay.h"
  26. 19 #include "Timer.h"
  27. 20 #include "Interrupt.h"
  28. 21 #include "Flash.h"
  29. 22 #include "Version.h"
  30. 23 #include "Packdata.h"
  31. 24 #include "DHT11.h"
  32. 25 #include "Keys.h"
  33. 26
  34. 27 #define USE_2401_API
  35. 28 #ifdef USE_2401_API
  36. 29 #include "nRF24L01_API.h"
  37. 30 #else
  38. #include "NRF24L01_inte.H"
  39. #define TX_PLOAD_WIDTH NRF24L01_TX_PLOAD_LEN
  40. #define RX_PLOAD_WIDTH NRF24L01_TX_PLOAD_LEN
  41. #endif
  42. 35 unsigned char P12_Led_state = 0;
  43. 36 unsigned char P04_Delay_state = 0;
  44. 37 unsigned char Sys_Type = SysRun_Norm;
  45. 38
  46. 39 //********************************************************************************************************
  47. -***
  48. 40 // Application: SPI Function
  49. 41 // Master send 0x90 and recevie 0x4E
  50. 42 // Master send 0x01 and recevie 0x55
  51. 43 // Master send 0x02 and recevie 0x56
  52. 44 // Master send 0x03 and recevie 0x4F
  53. 45 // Master send 0x04 and recevie 0x54
  54. 46 //
  55. 47 // Master recevie 0x4E and 0x4F form slave after transmitting
  56. 48 //********************************************************************************************************
  57. -***
  58. 49
  59. 50 //--------------------------------------------------------------------------------------------------------
  60. ----
  61. C51 COMPILER V9.53.0.0 MAIN 09/30/2018 11:45:29 PAGE 2
  62. 51 void SPI_Error ( void )
  63. 52 {
  64. 53 1 DBG ( "\nSPI error.\n" );
  65. 54 1
  66. 55 1 while ( 1 ) // SPI error and P0.7 flash/
  67. 56 1 {
  68. 57 2 P07 = 1;
  69. 58 2 Timer0_Delay1ms ( 500 );
  70. 59 2 P07 = 0;
  71. 60 2 Timer0_Delay1ms ( 500 );
  72. 61 2 }
  73. 62 1 }
  74. 63
  75. 64 //--------------------------------------------------------------------------------------------------------
  76. ----
  77. 65 void SPI_Initial ( void )
  78. 66 {
  79. 67 1 clr_SPIEN; //禁止SPI
  80. 68 1 P15_Quasi_Mode; // P15 (SS) Quasi mode
  81. 69 1 P10_Quasi_Mode; // P10(SPCLK) Quasi mode
  82. 70 1 P00_Quasi_Mode; // P00 (MOSI) Quasi mode
  83. 71 1 P01_Quasi_Mode; // P22 (MISO) Quasi mode
  84. 72 1
  85. 73 1 //SS仅在从机有效
  86. 74 1 set_DISMODF; // 1 = 禁止模式错误检测. SS的特征依赖SSOE 位
  87. 75 1 clr_SSOE; // SS 作为 0.普通IO 1.自动拉低
  88. 76 1
  89. 77 1 clr_LSBFE; // 0.MSB first
  90. 78 1
  91. 79 1 clr_CPOL; // 0.SPI空闲时SCL为低
  92. 80 1 clr_CPHA; // 0.在第1个边沿采样
  93. 81 1
  94. 82 1 set_MSTR; // 主设备
  95. 83 1 //SPICLK_DIV16; // Select SPI clock=1Mhz
  96. 84 1 SPICLK_DIV4; // 16/4=4Mhz, 24l01速度不能太快,最大的数据传输率为 10Mbps
  97. 85 1 set_SPIEN; // 使能SPI
  98. 86 1 clr_SPIF; // 清标志位
  99. 87 1 }
  100. 88 //--------------------------------------------------------------------------------------------------------
  101. ----
  102. 89 void Start_Sending_SPI ( uint8 *pu8MID, uint8 *pu8DID )
  103. 90 {
  104. 91 1 SS = 0;
  105. 92 1
  106. 93 1 SPDR = 0x90;
  107. 94 1 Timer3_Delay10us ( 1 ); // Send 0x90 to Slave
  108. 95 1
  109. 96 1 while ( ! ( SPSR & SET_BIT7 ) );
  110. 97 1
  111. 98 1 clr_SPIF;
  112. 99 1
  113. 100 1 if ( SPDR != 0x4E )
  114. 101 1 SPI_Error();
  115. 102 1
  116. 103 1 DBG ( "\nSlave Return %c!\n", SPDR );
  117. 104 1
  118. 105 1 SPDR = 0x01; // Send 0x01 to Slave
  119. 106 1 Timer3_Delay10us ( 1 );
  120. 107 1
  121. 108 1 while ( ! ( SPSR & SET_BIT7 ) );
  122. 109 1
  123. 110 1 clr_SPIF;
  124. C51 COMPILER V9.53.0.0 MAIN 09/30/2018 11:45:29 PAGE 3
  125. 111 1
  126. 112 1 if ( SPDR != 0x55 )
  127. 113 1 SPI_Error();
  128. 114 1
  129. 115 1 DBG ( "\nSlave Return %c!\n", SPDR );
  130. 116 1
  131. 117 1 SPDR = 0x02; // Send 0x02 to Slave
  132. 118 1 Timer3_Delay10us ( 1 );
  133. 119 1
  134. 120 1 while ( ! ( SPSR & SET_BIT7 ) );
  135. 121 1
  136. 122 1 clr_SPIF;
  137. 123 1
  138. 124 1 if ( SPDR != 0x56 )
  139. 125 1 SPI_Error();
  140. 126 1
  141. 127 1 DBG ( "\nSlave Return %c!\n", SPDR );
  142. 128 1
  143. 129 1 SPDR = 0x03; // Send 0x03 to Slave
  144. 130 1 Timer3_Delay10us ( 1 );
  145. 131 1
  146. 132 1 while ( ! ( SPSR & SET_BIT7 ) );
  147. 133 1
  148. 134 1 clr_SPIF;
  149. 135 1
  150. 136 1 if ( SPDR != 0x4F )
  151. 137 1 SPI_Error();
  152. 138 1
  153. 139 1 DBG ( "\nSlave Return %c!\n", SPDR );
  154. 140 1
  155. 141 1 SPDR = 0x04; // Send 0x04 to Slave
  156. 142 1 Timer3_Delay10us ( 1 );
  157. 143 1
  158. 144 1 while ( ! ( SPSR & SET_BIT7 ) );
  159. 145 1
  160. 146 1 clr_SPIF;
  161. 147 1
  162. 148 1 if ( SPDR != 0x54 )
  163. 149 1 SPI_Error();
  164. 150 1
  165. 151 1 DBG ( "\nSlave Return %c!\n", SPDR );
  166. 152 1
  167. 153 1 SPDR = 0xFF;
  168. 154 1 Timer3_Delay10us ( 1 );
  169. 155 1
  170. 156 1 while ( ! ( SPSR & SET_BIT7 ) );
  171. 157 1
  172. 158 1 clr_SPIF;
  173. 159 1 *pu8MID = SPDR; // Receive Slave 1st DATA from Slave
  174. 160 1 DBG ( "\nSlave Return %c!\n", SPDR );
  175. 161 1
  176. 162 1 SPDR = 0xFF;
  177. 163 1 Timer3_Delay10us ( 1 );
  178. 164 1
  179. 165 1 while ( ! ( SPSR & SET_BIT7 ) );
  180. 166 1
  181. 167 1 clr_SPIF;
  182. 168 1 *pu8DID = SPDR; // Receive Slave 2nd DATA from Slave
  183. 169 1 DBG ( "\nSlave Return %c!\n", SPDR );
  184. 170 1
  185. 171 1 SS = 1;
  186. 172 1 }
  187. C51 COMPILER V9.53.0.0 MAIN 09/30/2018 11:45:29 PAGE 4
  188. 173
  189. 174 //1.关闭POR (TA 保护) 上电复位(检测电源上升到系统可以工作的电压)
  190. 175 #ifdef N76E003_IAR
  191. __sfr __no_init volatile unsigned char PORDIS @ 0XFD;
  192. #else
  193. 178 sfr PORDIS = 0XFD;
  194. 179 #endif
  195. 180 void CLOSE_POR ( void )
  196. 181 {
  197. 182 1 TA = 0XAA;
  198. 183 1 TA = 0X55;
  199. 184 1 PORDIS = 0X5A;
  200. 185 1 TA = 0XAA;
  201. 186 1 TA = 0X55;
  202. 187 1 PORDIS = 0XA5;
  203. 188 1 }
  204. 189
  205. 190 /******************************************************************************
  206. 191 This code illustrates how to do APROM and CONFIG IAP from LDROM.
  207. 192 APROM are re-programmed by the code to output P1 as 55h and P0 as aah.
  208. 193 The CONFIG2 is also updated to disable BOD reset.
  209. 194 User needs to configure CONFIG0 = 0x7F, CONFIG1 = 0xFE, CONFIG2 = 0xFF.
  210. 195 ******************************************************************************/
  211. 196 //2.关闭BOD 欠压检测 (监测运行期间VDD电平)
  212. 197 #ifdef N76E003_IAR
  213. __sfr __no_init volatile unsigned char BODCON0 @ 0XA3;
  214. __sfr __no_init volatile unsigned char BODCON1 @ 0XAB;
  215. //__sfr __no_init volatile unsigned char CONFIG2 @ 0XFD;
  216. #else
  217. 202 //sfr BODCON0 = 0XA3;
  218. 203 //sfr BODCON1 = 0XAB;
  219. 204 #endif
  220. 205 void CLOSE_BOD ( void )
  221. 206 {
  222. 207 1 BODCON0 &= ~ ( 1 << 7 ); //0 =禁用欠压检测电路
  223. 208 1 }
  224. 209
  225. 210 enum
  226. 211 {
  227. 212 UMKNOW_RESET,
  228. 213 POWER_ON_RESET, //上电复位
  229. 214 BROWN_OUT_RESET, //欠压复位
  230. 215 RST_PIN_RESET, //RST引脚复位
  231. 216 HARD_FAULT_RESET, //硬件故障复位
  232. 217 WATCHGOD_TIMER_RESET, //看门狗定时器复位
  233. 218 SOFTWARE_RESET, //软件复位
  234. 219 MAX_RESET
  235. 220 };
  236. 221 /*
  237. 222 RST pin reset
  238. 223 Brown-out reset
  239. 224 Software reset
  240. 225 Power-on reset
  241. 226 Watchgod Timer reset
  242. 227 Hard Fault reset
  243. 228 */
  244. 229 unsigned char Reset_Reason ( void )
  245. 230 {
  246. 231 1 unsigned char res = UMKNOW_RESET;
  247. 232 1
  248. 233 1 if ( PCON & ( 1 << 4 ) )
  249. 234 1 {
  250. C51 COMPILER V9.53.0.0 MAIN 09/30/2018 11:45:29 PAGE 5
  251. 235 2 PCON &= ~ ( 1 << 4 );
  252. 236 2 res = POWER_ON_RESET;
  253. 237 2 }
  254. 238 1
  255. 239 1 if ( BODCON0 & ( 1 << 1 ) )
  256. 240 1 {
  257. 241 2 BODCON0 &= ~ ( 1 << 1 );
  258. 242 2 res = BROWN_OUT_RESET;
  259. 243 2 }
  260. 244 1
  261. 245 1 if ( AUXR1 & ( 1 << 6 ) )
  262. 246 1 {
  263. 247 2 AUXR1 &= ~ ( 1 << 6 );
  264. 248 2 res = RST_PIN_RESET;
  265. 249 2 }
  266. 250 1
  267. 251 1 if ( AUXR1 & ( 1 << 5 ) )
  268. 252 1 {
  269. 253 2 AUXR1 &= ~ ( 1 << 5 );
  270. 254 2 res = HARD_FAULT_RESET;
  271. 255 2 }
  272. 256 1
  273. 257 1 if ( WDCON & ( 1 << 3 ) )
  274. 258 1 {
  275. 259 2 WDCON &= ~ ( 1 << 3 );
  276. 260 2 res = WATCHGOD_TIMER_RESET;
  277. 261 2 }
  278. 262 1
  279. 263 1 if ( AUXR1 & ( 1 << 7 ) )
  280. 264 1 {
  281. 265 2 AUXR1 &= ~ ( 1 << 7 );
  282. 266 2 res = SOFTWARE_RESET;
  283. 267 2 }
  284. 268 1
  285. 269 1 return res;
  286. 270 1 }
  287. 271
  288. 272
  289. 273 void ResetSys ( void )
  290. 274 {
  291. 275 1 AUXR1 &= ~ ( 1 << 7 ); //software reset flag clear
  292. 276 1 EA = 0;
  293. 277 1 TA = 0xAA;
  294. 278 1 TA = 0x55;
  295. 279 1 CHPCON |= ( 1 << 7 ); //software reset
  296. 280 1 }
  297. 281
  298. 282 void P12_Flash ( unsigned char num )
  299. 283 {
  300. 284 1 unsigned char i;
  301. 285 1
  302. 286 1 for ( i = 0; i < num && num < 5 ; i++ )
  303. 287 1 {
  304. 288 2 P12 = 1;
  305. 289 2 Timer3_Delay100ms ( 1 );
  306. 290 2 P12 = 0;
  307. 291 2 Timer3_Delay100ms ( 1 );
  308. 292 2 }
  309. 293 1
  310. 294 1 P12_Led_state = P12;
  311. 295 1 }
  312. 296 #if 0
  313. C51 COMPILER V9.53.0.0 MAIN 09/30/2018 11:45:29 PAGE 6
  314. unsigned char flag;
  315. //NRF24L01中断处理
  316. #ifdef N76E003_IAR
  317. #pragma vector=0x3B
  318. __interrupt void NRF24L01_Handler ( void )
  319. #else
  320. void NRF24L01_Handler ( void ) interrupt 7 //interrupt address is 0x001B
  321. #endif
  322. {
  323. clr_EPI; //关闭管脚中断7
  324. flag = PIF;
  325. PIF = 0x00; //清除全部标志
  326. DBG ( "\nNRF24L01 interrupt!\n" );
  327. set_EPI; //开启管脚中断7
  328. }
  329. void NRF24L01_Interrupt_P03 ( void )
  330. {
  331. //P0M1|=SET_BIT3;P0M2&=~SET_BIT3; //input
  332. PICON &= ~ ( SET_BIT0 | SET_BIT1 );
  333. PICON |= ( 0x00 ); //[1:0]=0.端口0
  334. PICON |= SET_BIT5; //通道3=1.边沿触发
  335. PINEN |= SET_BIT3; // 1 = 低电平/ 下降沿触发中断
  336. PIPEN &= ~SET_BIT3; //0 = 关闭中断(高电平/ 上升沿触发中断)
  337. EIE |= SET_BIT1; //管脚中断,最多8个,中断号7
  338. EA = 1; //总中断
  339. }
  340. #endif
  341. 327 //96位 UID与128位UCID
  342. 328 unsigned char xdata UIDBuf[12]; //本机的存储96bit的UID内容
  343. 329 unsigned char xdata UID_Master[12]; //主机的存储96bit的UID内容
  344. 330 UINT8 UID_BYTE ( UINT8 Addr )
  345. 331 {
  346. 332 1 UINT8 DATATEMP;
  347. 333 1 set_IAPEN;
  348. 334 1 IAPAL = Addr;
  349. 335 1 IAPAH = 0x00;
  350. 336 1 IAPCN = READ_UID;
  351. 337 1 set_IAPGO;
  352. 338 1 DATATEMP = IAPFD;
  353. 339 1 clr_IAPEN;
  354. 340 1 return DATATEMP;
  355. 341 1 }
  356. 342
  357. 343 //读出芯片的96bit的UID
  358. 344 void ReadUID_UCID ( UINT8 UID, UINT8 *out )
  359. 345 {
  360. 346 1 UINT8 i;
  361. 347 1
  362. 348 1 for ( i = 0; i < 12; i++ )
  363. 349 1 {
  364. 350 2 out[i] = UID_BYTE ( i + UID ); //ucid=0x20
  365. 351 2 }
  366. 352 1 }
  367. 353
  368. 354
  369. 355 //最长4byte
  370. 356 #define GET_VER_POS(NUM,VER) ((VER>>(8*NUM))&0xff)
  371. 357 //--------------------------------------------------------------------------------------------------------
  372. ----
  373. C51 COMPILER V9.53.0.0 MAIN 09/30/2018 11:45:29 PAGE 7
  374. 358 void main ( void )
  375. 359 {
  376. 360 1 unsigned char reset_num, i;
  377. 361 1 //unsigned char datatemp[8];
  378. 362 1 unsigned char TxBuf[TX_PLOAD_WIDTH] = {'>', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'}; //
  379. 363 1 unsigned char RxBuf[RX_PLOAD_WIDTH] = {0};
  380. 364 1 unsigned char PackBuf[TX_PLOAD_WIDTH];
  381. 365 1 pDataBuff CheckRxBuf = {0};
  382. 366 1 unsigned char CheckUID = 0;
  383. 367 1 //uint8 u8MID, u8DID;
  384. 368 1 reset_num = Reset_Reason();
  385. 369 1
  386. 370 1 CLOSE_POR();
  387. 371 1 CLOSE_BOD();
  388. 372 1
  389. 373 1 Set_All_GPIO_Quasi_Mode;
  390. 374 1
  391. 375 1
  392. 376 1 //NRF24L01_Interrupt_P03();
  393. 377 1 //定时器
  394. 378 1 Timer0_init ( TIMER_SCAN ); //1ms
  395. 379 1
  396. 380 1 //ResetSys();
  397. 381 1 InitialUART0_Timer1 ( 115200 ); /* 115200 Baud Rate*/
  398. 382 1 Timer3_Delay10us ( 1000 );
  399. 383 1 DBG ( "\nHome Light %s, Build by Kinve in %ld\n", THIS_VER, CUSTOM_VER );
  400. 384 1
  401. 385 1 ReadUID_UCID ( 0x00, UIDBuf ); //0x00=uid 0x20=ucid
  402. 386 1 DBG ( "UID=%x%x%x%x\n", UIDBuf[0], UIDBuf[1], UIDBuf[2], UIDBuf[3] );
  403. 387 1
  404. 388 1 #if 0
  405. //call read byte
  406. datatemp[5] = Read_APROM_BYTE ( 0x3885 );
  407. if ( datatemp[5] != 0x4A )
  408. {
  409. //call write byte
  410. for ( i = 0; i < sizeof ( datatemp ); i++ )
  411. {
  412. if ( i == 5 ) Write_DATAFLASH_BYTE ( 0x3880 + i, 0x4A );
  413. else Write_DATAFLASH_BYTE ( 0x3880 + i, GET_VER_POS ( i, CUSTOM_VER ) );
  414. datatemp[i] = Read_APROM_BYTE ( ( UINT16 code * ) ( 0x3880 + i ) );
  415. }
  416. }
  417. #endif
  418. 404 1 for ( i = 0; i < sizeof ( UID_Master ); i++ )
  419. 405 1 {
  420. 406 2 UID_Master[i] = Read_APROM_BYTE ( ( UINT16 code * ) ( 0x3881 + i ) );
  421. 407 2 }
  422. 408 1
  423. 409 1 Timer3_Delay100ms(1);
  424. 410 1 if(Keys[KEY_CS].Res == ONE_HITS_KEY_FLAG)
  425. 411 1 {
  426. 412 2 Keys[KEY_CS].Res = NO_KEY_FLAG;
  427. 413 2 Sys_Type = SysRun_Test;
  428. 414 2 }
  429. 415 1
  430. 416 1 SPI_Initial();
  431. 417 1
  432. 418 1 NRF24L01_Wait_Check(); // 等待检测到NRF24L01,程序才会向下执行
  433. 419 1 NRF24L01_RT_Init ();
  434. C51 COMPILER V9.53.0.0 MAIN 09/30/2018 11:45:29 PAGE 8
  435. 420 1 DBG ( "NRF24L01 init OK!\n" );
  436. 421 1
  437. 422 1 while ( 1 )
  438. 423 1 {
  439. 424 2 switch(Sys_Type)
  440. 425 2 {
  441. 426 3 case SysRun_Test:
  442. 427 3 if ( System_Flag_200Ms)
  443. 428 3 {
  444. 429 4 System_Flag_200Ms = 0;
  445. 430 4 P12_Led_state = !P12_Led_state;
  446. 431 4 P12 = P12_Led_state;
  447. 432 4 }
  448. 433 3
  449. 434 3 if(Keys[KEY_CS].Res == ONE_HITS_KEY_FLAG) //配对发
  450. 435 3 {
  451. 436 4 Keys[KEY_CS].Res = NO_KEY_FLAG;
  452. 437 4 memset(TxBuf, 0, sizeof(TxBuf));
  453. 438 4 TxBuf[0] = '*'; //*(1byte)+?(1byte)
  454. 439 4 TxBuf[1] = '?';
  455. 440 4 PackData(TxBuf, 2, PackBuf);
  456. 441 4 SEND_BUF ( PackBuf, sizeof(PackBuf) );
  457. 442 4 DBG ( "Send: %s\n", &PackBuf[2] );
  458. 443 4 }
  459. 444 3
  460. 445 3 if(Keys[KEY_CS].Res == LONG_KEY_FLAG) //配对删除
  461. 446 3 {
  462. 447 4 Keys[KEY_CS].Res = NO_KEY_FLAG;
  463. 448 4 //保存到flash
  464. 449 4 memset(UID_Master, 0xFF, sizeof(UID_Master));
  465. 450 4 Write_DATAFLASH_BYTE ( 0x3880, 0xFF );
  466. 451 4 for ( i = 0; i < sizeof ( UID_Master ); i++ )
  467. 452 4 {
  468. 453 5 Write_DATAFLASH_BYTE ( 0x3881 + i, UID_Master[i] );
  469. 454 5 }
  470. 455 4 }
  471. 456 3 break;
  472. 457 3 case SysRun_Norm:
  473. 458 3 default:
  474. 459 3 if ( System_Flag_1s )
  475. 460 3 {
  476. 461 4 System_Flag_1s = 0;
  477. 462 4 P12_Led_state = !P12_Led_state;
  478. 463 4 P12 = P12_Led_state;
  479. 464 4
  480. 465 4 //温湿度获取
  481. 466 4 if(DHT11_Read_Data( &DHT11_Data )){
  482. 467 5 DBG ( "%02d%% - %02dC\n", DHT11_Data.humi_int, DHT11_Data.temp_int );
  483. 468 5 }
  484. 469 4 }
  485. 470 3
  486. 471 3 if(Keys[KEY_CS].Res == ONE_HITS_KEY_FLAG)//配对发
  487. 472 3 {
  488. 473 4 Keys[KEY_CS].Res = NO_KEY_FLAG;
  489. 474 4 memset(TxBuf, 0, sizeof(TxBuf));
  490. 475 4 TxBuf[0] = '>'; //*(1byte)+?(1byte)
  491. 476 4 TxBuf[1] = 'L'; //灯
  492. 477 4 TxBuf[2] = 'T'; //翻转
  493. 478 4 memcpy(&TxBuf[3], UID_Master, 12);
  494. 479 4 PackData(TxBuf, 15, PackBuf);
  495. 480 4 SEND_BUF ( PackBuf, sizeof(PackBuf) );
  496. 481 4 DBG ( "Send: %s\n", &PackBuf[2] );
  497. C51 COMPILER V9.53.0.0 MAIN 09/30/2018 11:45:29 PAGE 9
  498. 482 4 }
  499. 483 3 break;
  500. 484 3 }
  501. 485 2
  502. 486 2
  503. 487 2 if ( NRF_IRQ == 0 )
  504. 488 2 {
  505. 489 3 if ( NRF24L01_RxPacket ( RxBuf, sizeof ( RxBuf ) ) )
  506. 490 3 {
  507. 491 4 if(CheckData(RxBuf, RX_PLOAD_WIDTH, &CheckRxBuf)){
  508. 492 5 P12_Flash ( 2 );
  509. 493 5 DBG ( "Recv: %s\n", &(CheckRxBuf.Data[2]) );
  510. 494 5 switch(CheckRxBuf.Data[2]){
  511. 495 6 case '*': //配对
  512. 496 6 switch(CheckRxBuf.Data[3]){
  513. 497 7 case '?':
  514. 498 7 memset(TxBuf, 0, sizeof(TxBuf));
  515. 499 7 TxBuf[0] = '*'; //*(1byte)+Y(1byte)+uid(12byte)
  516. 500 7 TxBuf[1] = '1';
  517. 501 7 memcpy(&TxBuf[2], UIDBuf, 12);
  518. 502 7 PackData(TxBuf, 14, PackBuf);
  519. 503 7 SEND_BUF ( PackBuf, sizeof(PackBuf) );
  520. 504 7 DBG ( "Send: %s\n", &PackBuf[2] );
  521. 505 7 break;
  522. 506 7 case '1':
  523. 507 7 memcpy(UID_Master, &CheckRxBuf.Data[4], 12);
  524. 508 7 //保存到flash
  525. 509 7 Write_DATAFLASH_BYTE ( 0x3880, 0x4A );
  526. 510 7 for ( i = 0; i < sizeof ( UID_Master ); i++ )
  527. 511 7 {
  528. 512 8 Write_DATAFLASH_BYTE ( 0x3881 + i, UID_Master[i] );
  529. 513 8 }
  530. 514 7 //返回成功
  531. 515 7 memset(TxBuf, 0, sizeof(TxBuf));
  532. 516 7 TxBuf[0] = '*'; //*(1byte)+Y(1byte)+uid(10byte)
  533. 517 7 TxBuf[1] = '2';
  534. 518 7 PackData(TxBuf, 2, PackBuf);
  535. 519 7 SEND_BUF ( PackBuf, sizeof(PackBuf) );
  536. 520 7 DBG ( "Send: %s\n", &PackBuf[2] );
  537. 521 7 break;
  538. 522 7 case '2':
  539. 523 7
  540. 524 7 break;
  541. 525 7 }
  542. 526 6 break;
  543. 527 6 case '>': //数据
  544. 528 6 switch(CheckRxBuf.Data[3]){
  545. 529 7 case 'L':
  546. 530 7 if(CheckRxBuf.Data[4] == 'T'){
  547. 531 8 CheckUID = 0;
  548. 532 8 if(0 == memcmp(&(CheckRxBuf.Data[5]), UIDBuf, 12)){
  549. 533 9 P04_Delay_state = !P04_Delay_state;
  550. 534 9 P04 = P04_Delay_state;
  551. 535 9 CheckUID = 1;
  552. 536 9 }
  553. 537 8 //返回成功
  554. 538 8 memset(TxBuf, 0, sizeof(TxBuf));
  555. 539 8 TxBuf[0] = '>'; //*(1byte)+Y(1byte)+uid(10byte)
  556. 540 8 TxBuf[1] = 'L';
  557. 541 8 TxBuf[2] = 'T';
  558. 542 8 TxBuf[3] = CheckUID?'N':'Y';
  559. 543 8 PackData(TxBuf, 4, PackBuf);
  560. C51 COMPILER V9.53.0.0 MAIN 09/30/2018 11:45:29 PAGE 10
  561. 544 8 SEND_BUF ( PackBuf, sizeof(PackBuf) );
  562. 545 8 DBG ( "Send: %s\n", &PackBuf[2] );
  563. 546 8 }
  564. 547 7 break;
  565. 548 7 }
  566. 549 6 break;
  567. 550 6 }
  568. 551 5 }
  569. 552 4 }
  570. 553 3 }
  571. 554 2
  572. 555 2 }
  573. 556 1 }
  574. 557 //--------------------------------------------------------------------------------------------------------
  575. ----
  576. 558
  577. 559
  578. 560
  579. 561
  580. MODULE INFORMATION: STATIC OVERLAYABLE
  581. CODE SIZE = 2739 ----
  582. CONSTANT SIZE = 214 ----
  583. XDATA SIZE = 147 ----
  584. PDATA SIZE = ---- ----
  585. DATA SIZE = ---- ----
  586. IDATA SIZE = ---- ----
  587. BIT SIZE = ---- ----
  588. END OF MODULE INFORMATION.
  589. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)