main.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "stm32f10x.h"
  5. #include "stdio.h"
  6. #include "key.h"
  7. #include "usart.h"
  8. #include "drive_dht11.h"
  9. #include "bh1750.h"
  10. #include "ds1302.h"
  11. #include "oled.h"
  12. #include "sk9822.h"
  13. #include "string.h"
  14. u8 humi=0;//湿度值
  15. u8 temp=0;//温度值
  16. u8 buffer[10]={0};
  17. u16 GzVal=0; //实际光照值
  18. char ShowBuf[16]={0};
  19. char DateShowBuf[30]={0};
  20. char SendBuff[50]={0};
  21. short TEMP = 0;
  22. u16 cj_val=0;//测距值
  23. u8 openflag=0;//手动模式开关按钮
  24. u8 mode_flag=0;
  25. #define YP1 PCout(13)
  26. #define YP2 PCout(14)
  27. #define YP3 PCout(15)
  28. u8 warning_cnt=0;
  29. u16 GetTimer=0;//采集时间计数器
  30. u8 dw_val=0;//挡位//亮度值
  31. u8 sc_val=0;//色彩
  32. int set_s1=7,set_f1=0; //设置 时间1
  33. int cnt_s1=2,cnt_f1=0,cnt_m1=0;//学习时间 时分秒
  34. #define RT_INPUT PBin(8)//人体红外感应
  35. #define KEY_GPIO_PROT GPIOA
  36. #define KEY1_GPIO_PIN GPIO_Pin_0
  37. #define KEY2_GPIO_PIN GPIO_Pin_1
  38. #define KEY3_GPIO_PIN GPIO_Pin_2
  39. #define KEY4_GPIO_PIN GPIO_Pin_3
  40. #define KEY5_GPIO_PIN GPIO_Pin_4
  41. #define KEY1_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY1_GPIO_PIN)
  42. #define KEY2_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY2_GPIO_PIN)
  43. #define KEY3_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY3_GPIO_PIN)
  44. #define KEY4_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY4_GPIO_PIN)
  45. #define KEY5_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY5_GPIO_PIN)
  46. void key_gpio_init(void)
  47. {
  48. GPIO_InitTypeDef GPIO_InitStructure;
  49. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);
  50. GPIO_InitStructure.GPIO_Pin = KEY1_GPIO_PIN|KEY2_GPIO_PIN|KEY3_GPIO_PIN|KEY4_GPIO_PIN|KEY5_GPIO_PIN;
  51. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  52. GPIO_Init(KEY_GPIO_PROT, &GPIO_InitStructure);
  53. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  54. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  55. GPIO_Init(GPIOA, &GPIO_InitStructure);
  56. }
  57. #define Trig PBout(10) // 超声波测距
  58. #define CW_ECHO1 PBin(11)
  59. u16 Distance=0;
  60. //超声波端口初始化
  61. void Wave_IO_Init(void)
  62. {
  63. GPIO_InitTypeDef GPIO_InitStructure;
  64. // NVIC_InitTypeDef NVIC_InitStructure;
  65. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  66. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
  67. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB , ENABLE);
  68. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB0接TRIG
  69. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设为推挽输出模式
  70. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  71. GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化外设GPIO
  72. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //接ECH0
  73. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //设为输入
  74. GPIO_Init(GPIOB, &GPIO_InitStructure);
  75. TIM_DeInit(TIM2);
  76. TIM_TimeBaseStructure.TIM_Period=65535; /* 自动重装载寄存器周期的值(计数值) */
  77. /* 累计 TIM_Period个频率后产生一个更新或者中断 */
  78. TIM_TimeBaseStructure.TIM_Prescaler= (360 - 1); /* 时钟预分频数 72M/360 */
  79. TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; /* 采样分频 */
  80. TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; /* 向上计数模式 */
  81. TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  82. TIM_ClearFlag(TIM2, TIM_FLAG_Update); /* 清除溢出中断标志 */
  83. // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  84. // NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  85. // NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  86. // NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
  87. // NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  88. // NVIC_Init(&NVIC_InitStructure);
  89. //
  90. //TIM2_NVIC_Configuration();//定时器初始化
  91. //TIM2_Configuration();
  92. }
  93. //void TIM2_IRQHandler()
  94. //{
  95. // static u8 st;
  96. // st=TIM_GetFlagStatus(TIM2, TIM_IT_Update);
  97. // if(st!=0)
  98. // {
  99. // TIM_ClearFlag(TIM2, TIM_IT_Update);
  100. // }
  101. //}
  102. //测距
  103. //开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间
  104. u16 Wave_Start(void)
  105. {
  106. u32 Distance;
  107. u32 timeout=0;
  108. Trig=1;
  109. delay_us(20); //输入一个10us的高电平
  110. Trig=0;
  111. TIM_SetCounter(TIM2,0);
  112. timeout=0;
  113. while(!CW_ECHO1) //等待高电平
  114. {
  115. if(++timeout>60000)break;
  116. delay_us(1);
  117. }
  118. TIM_Cmd(TIM2, ENABLE); //开启时钟
  119. timeout=0;
  120. while(CW_ECHO1) //等待低电平
  121. {
  122. if(++timeout>600000)break;
  123. delay_us(1);
  124. }
  125. TIM_Cmd(TIM2, DISABLE); //定时器2失能
  126. Distance=TIM_GetCounter(TIM2)*5*34/2000; //计算距离 厘米cm
  127. TIM_SetCounter(TIM2,0);
  128. if(Distance>200)Distance=200;
  129. return Distance;
  130. }
  131. void TIMER3_Int_Init(u16 arr,u16 psc)
  132. {
  133. TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue;
  134. NVIC_InitTypeDef NVIC_InitStructure;
  135. TIM_TimeBaseInitStrue.TIM_Period=arr;
  136. TIM_TimeBaseInitStrue.TIM_Prescaler=psc;
  137. TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up;
  138. TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CounterMode_Up;
  139. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  140. TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStrue);
  141. TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//使能TIM3更新中断
  142. //中断优先级NVIC设置
  143. NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断
  144. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级
  145. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级
  146. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  147. NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器
  148. TIM_Cmd(TIM3, ENABLE); //使能TIMx
  149. }
  150. int key_Task(void)
  151. {
  152. static char key_flag=0;
  153. if(KEY1_IN==0|KEY2_IN==0|KEY3_IN==0|KEY4_IN==0|KEY5_IN==0)
  154. {
  155. if(key_flag==0)
  156. {
  157. key_flag=1;
  158. if(KEY1_IN==0)
  159. {
  160. mode_flag^=1;
  161. }
  162. else if(KEY2_IN==0)
  163. {
  164. if(mode_flag==0)
  165. {
  166. if(++dw_val>2)dw_val=0;
  167. }else
  168. {
  169. }
  170. }
  171. else if(KEY3_IN==0)
  172. {
  173. if(mode_flag==0)
  174. {
  175. if(++sc_val>2)sc_val=0;
  176. }else
  177. {
  178. }
  179. }
  180. else if(KEY4_IN==0)
  181. {
  182. if(mode_flag==0)
  183. {
  184. openflag^=1;//开关按钮
  185. }else
  186. {
  187. }
  188. }
  189. else if(KEY5_IN==0)
  190. {
  191. }
  192. }
  193. }else
  194. {
  195. key_flag=0;
  196. }
  197. return 20;
  198. }
  199. u16 DataUpTime=0;//时间显示计数器
  200. u8 rt_flag=0;//红外人体标志位
  201. u16 rt_cnt=0;
  202. u8 seccnt=0;
  203. void TIM3_IRQHandler(void)//中断服务程序
  204. {
  205. if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)//SET为1
  206. {
  207. GetTimer++;//采集计数器
  208. TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除TIM3的更新中断标志
  209. key_Task();
  210. DataUpTime++;
  211. if(RT_INPUT==1) //检测人体感应
  212. {
  213. rt_flag=1;
  214. rt_cnt=0;
  215. }else
  216. {
  217. if(rt_cnt++>50*15)//15s没人了
  218. {
  219. rt_cnt=0;rt_flag=0;
  220. }
  221. }
  222. if(rt_flag) //有人 开始计时计算学习时间
  223. {
  224. if(++seccnt>50)
  225. {
  226. seccnt=0;
  227. if(++cnt_m1>59)
  228. {
  229. cnt_m1=0;
  230. if(++cnt_f1>59)
  231. {
  232. cnt_f1=0;
  233. if(++cnt_s1>23)
  234. {
  235. cnt_s1=0;
  236. }
  237. }
  238. }
  239. }
  240. }
  241. }
  242. }
  243. u8 GetFlag=0;
  244. uint8_t sendBuff[16]={0};
  245. void ShowTo(char* Pdat,char len)//字符串中的空格补 0
  246. {
  247. char ixd=0;
  248. for(ixd=0;ixd<len;ixd++)
  249. {
  250. if(Pdat[ixd]==' ')
  251. {
  252. Pdat[ixd]='0';
  253. }
  254. }
  255. }
  256. #define IO_TX_GPIO_Port PAout(7)
  257. void uartX_sendByte(uint8_t val)
  258. {
  259. int i = 0;
  260. IO_TX_GPIO_Port=0;
  261. delay_us(104);
  262. for (i = 0; i < 8; i++)
  263. {
  264. if (val & 0x01)
  265. {
  266. IO_TX_GPIO_Port=1;
  267. } else {
  268. IO_TX_GPIO_Port=0;
  269. }
  270. delay_us(104);
  271. val >>= 1;
  272. }
  273. IO_TX_GPIO_Port=1;
  274. delay_us(104);
  275. }
  276. /*********************************************************************************************
  277. //函数名:Next_Play()
  278. //
  279. //功能说明:设定音量
  280. //
  281. //入口参数:
  282. //
  283. //出口参数:NO
  284. ***********************************************************************************************/
  285. void Next_Play()
  286. {
  287. uartX_sendByte(0x7E);
  288. uartX_sendByte(0x02);
  289. uartX_sendByte(0x01);
  290. uartX_sendByte(0xEF);
  291. }
  292. /*********************************************************************************************
  293. //函数名:Last_Play()
  294. //
  295. //功能说明:
  296. //
  297. //入口参数:
  298. //
  299. //出口参数:NO
  300. ***********************************************************************************************/
  301. void Last_Play()
  302. {
  303. uartX_sendByte(0x7E);
  304. uartX_sendByte(0x02);
  305. uartX_sendByte(0x02);
  306. uartX_sendByte(0xEF);
  307. }
  308. /*********************************************************************************************
  309. //函数名:Specify_Musi_Play()
  310. //
  311. //功能说明:指定曲目播放
  312. //
  313. //入口参数:
  314. //
  315. //出口参数:NO
  316. ***********************************************************************************************/
  317. void Specify_Musi_Play(u8 num)
  318. {
  319. uartX_sendByte(0x7E);
  320. uartX_sendByte(0x04);
  321. uartX_sendByte(0x03);
  322. uartX_sendByte(0x00);
  323. uartX_sendByte(num);
  324. uartX_sendByte(0xEF);
  325. }
  326. /*********************************************************************************************
  327. //函数名:Volume_add()
  328. //
  329. //功能说明:音量加
  330. //
  331. //入口参数:
  332. //
  333. //出口参数:NO
  334. ***********************************************************************************************/
  335. void Volume_add()
  336. {
  337. uartX_sendByte(0x7E);
  338. uartX_sendByte(0x02);
  339. uartX_sendByte(0x04);
  340. uartX_sendByte(0xEF);
  341. }
  342. /*********************************************************************************************
  343. //函数名:Volume_nec()
  344. //
  345. //功能说明:音量减
  346. //
  347. //入口参数:
  348. //
  349. //出口参数:NO
  350. ***********************************************************************************************/
  351. void Volume_nec()
  352. {
  353. uartX_sendByte(0x7E);
  354. uartX_sendByte(0x02);
  355. uartX_sendByte(0x05);
  356. uartX_sendByte(0xEF);
  357. }
  358. /*********************************************************************************************
  359. //函数名:Specify_Volume()
  360. //
  361. //功能说明:指定音量
  362. //
  363. //入口参数:
  364. //
  365. //出口参数:NO
  366. ***********************************************************************************************/
  367. void Specify_Volume(u8 num)
  368. {
  369. uartX_sendByte(0x7E);
  370. uartX_sendByte(0x03);
  371. uartX_sendByte(0x06);
  372. uartX_sendByte(num);
  373. uartX_sendByte(0xEF);
  374. }
  375. /*********************************************************************************************
  376. //函数名:Music_play()
  377. //
  378. //功能说明:播放
  379. //
  380. //入口参数:
  381. //
  382. //出口参数:NO
  383. ***********************************************************************************************/
  384. void Music_play()
  385. {
  386. uartX_sendByte(0x7E);
  387. uartX_sendByte(0x02);
  388. uartX_sendByte(0x0D);
  389. uartX_sendByte(0xEF);
  390. }
  391. /*********************************************************************************************
  392. //函数名:Music_pause()
  393. //
  394. //功能说明:暂停
  395. //
  396. //入口参数:
  397. //
  398. //出口参数:NO
  399. ***********************************************************************************************/
  400. void Music_pause()
  401. {
  402. uartX_sendByte(0x7E);
  403. uartX_sendByte(0x02);
  404. uartX_sendByte(0x0E);
  405. uartX_sendByte(0xEF);
  406. }
  407. /*********************************************************************************************
  408. //函数名:Music_stop()
  409. //
  410. //功能说明:停止
  411. //
  412. //入口参数:
  413. //
  414. //出口参数:NO
  415. ***********************************************************************************************/
  416. void Music_stop()
  417. {
  418. uartX_sendByte(0x7E);
  419. uartX_sendByte(0x02);
  420. uartX_sendByte(0x10);
  421. uartX_sendByte(0xEF);
  422. }
  423. /*********************************************************************************************
  424. //函数名:Switch_play_Device()
  425. //
  426. //功能说明:U/TF/AUX/SLEEP/FLASH(0/1/2/3/4)切换
  427. //
  428. //入口参数:
  429. //
  430. //出口参数:NO
  431. ***********************************************************************************************/
  432. void Switch_play_Device(u8 num)
  433. {
  434. uartX_sendByte(0x7E);
  435. uartX_sendByte(0x03);
  436. uartX_sendByte(0x09);
  437. uartX_sendByte(num);
  438. uartX_sendByte(0xEF);
  439. }
  440. /*********************************************************************************************
  441. //函数名:Cycle_play()
  442. //
  443. //功能说明:1:全部循环 0:单曲循环
  444. //
  445. //入口参数:
  446. //
  447. //出口参数:NO
  448. ***********************************************************************************************/
  449. void Cycle_play(u8 num)
  450. {
  451. uartX_sendByte(0x7E);
  452. uartX_sendByte(0x03);
  453. uartX_sendByte(0x11);
  454. uartX_sendByte(num);
  455. uartX_sendByte(0xEF);
  456. }
  457. u8 test=0;
  458. int main(void)
  459. {
  460. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  461. delay_init(); //延时函数初始化
  462. LED_Init(); //初始化与连接的硬件接口
  463. YP1=1;YP2=1;YP3=1;
  464. uart_init(9600);
  465. delay_ms(1000);
  466. key_gpio_init();
  467. TIMER3_Int_Init(20000,71);//定时器初始化 //10ms进一次中断
  468. BH1750_Init();
  469. OLED_Init();//液晶初始化
  470. OLED_Clear();//液晶清屏
  471. delay_ms(10);//上电延时一会
  472. Ds1302_Gpio_Init();
  473. SK9822_Intit();
  474. Wave_IO_Init();
  475. SK9822_Write_Data(0xff,0,0,0);
  476. Ds1302_Write_Time_All(1);
  477. // Next_Play();
  478. delay_ms(10);
  479. Cycle_play(1);
  480. delay_ms(10);
  481. Cycle_play(1);
  482. delay_ms(10);
  483. Specify_Musi_Play(2);
  484. delay_ms(10);
  485. Cycle_play(1);
  486. delay_ms(10);
  487. while(1)
  488. {
  489. if(GetTimer>50)//1S
  490. {
  491. GetTimer=0;
  492. if(openflag)
  493. {
  494. switch(dw_val)
  495. {
  496. case 0:
  497. switch(sc_val)
  498. {
  499. case 0:
  500. YP1=0;YP2=1;YP3=1;
  501. SK9822_Write_Data(0xff,0xff,0xff,0xff);
  502. break;
  503. case 1:
  504. YP1=1;YP2=0;YP3=1;
  505. SK9822_Write_Data(0xff,255,255,0);
  506. break ;
  507. case 2:
  508. YP1=1;YP2=1;YP3=0;
  509. SK9822_Write_Data(0xff,60,255,60);
  510. break;
  511. }
  512. break;
  513. case 1:
  514. switch(sc_val)
  515. {
  516. case 0:
  517. SK9822_Write_Data(0xff,125,125,125);
  518. break;
  519. case 1:
  520. SK9822_Write_Data(0xff,125,125,0);
  521. break ;
  522. case 2:
  523. SK9822_Write_Data(0xff,30,125,30);
  524. break;
  525. }
  526. break;
  527. case 2:
  528. switch(sc_val)
  529. {
  530. case 0:
  531. SK9822_Write_Data(0xff,30,30,30);
  532. break;
  533. case 1:
  534. SK9822_Write_Data(0xff,40,40,0);
  535. break ;
  536. case 2:
  537. SK9822_Write_Data(0xff,10,50,10);
  538. break;
  539. }
  540. break;
  541. }
  542. }else{
  543. SK9822_Write_Data(0xff,0,0,0);//熄灭
  544. }
  545. if(mode_flag)
  546. {
  547. OLED_ShowString(90,6,"A",16);
  548. }else{
  549. OLED_ShowString(90,6,"M",16);
  550. }
  551. if(dht11_read_data(buffer) == 0)//读取温湿度
  552. {
  553. humi = buffer[0] + buffer[1] / 10;//取湿度值
  554. temp = buffer[2] + buffer[3] / 10;//取温度值
  555. }
  556. GzVal = Dispose();//读取光照
  557. cj_val=Wave_Start();
  558. if(cj_val>15)
  559. {
  560. OLED_ShowText(0,6,"坐姿:异常",0);
  561. warning_cnt|=0x01;
  562. }else
  563. {
  564. warning_cnt&=~0x01;
  565. OLED_ShowText(0,6,"坐姿:正常",0);
  566. }
  567. if(rt_flag) //有人
  568. {
  569. OLED_ShowString(103,6,"1",16);
  570. }
  571. else //没人
  572. {
  573. OLED_ShowString(103,6,"0",16);
  574. }
  575. printf("drv_X%dH%dD%dZ%d\r\n",temp,humi,GzVal,cj_val);//发送到上位机app
  576. if(mode_flag)//自动模式
  577. {
  578. }else{ //手动模式
  579. }
  580. }
  581. if(DataUpTime>20) //400ms刷新一次数据
  582. {
  583. DataUpTime=0;//
  584. Ds1302_Readtime();
  585. sprintf((char*)DateShowBuf,"时间:%2d:%2d:%2d", (int)ds1302Data.hour, (int)ds1302Data.min, (int)ds1302Data.sec);
  586. ShowTo(DateShowBuf,strlen(DateShowBuf));
  587. OLED_ShowText(0,0,DateShowBuf,0);
  588. sprintf((char*)DateShowBuf,"闹钟:%2d:%2d:00", (int)set_s1, (int)set_f1);
  589. ShowTo(DateShowBuf,strlen(DateShowBuf));
  590. OLED_ShowText(0,2,DateShowBuf,0);
  591. sprintf((char*)DateShowBuf,"学习:%2d:%2d:%2d", (int)cnt_s1, (int)cnt_f1,cnt_m1);
  592. ShowTo(DateShowBuf,strlen(DateShowBuf));
  593. OLED_ShowText(0,4,DateShowBuf,0);
  594. if((ds1302Data.hour==set_s1)&&(ds1302Data.min==set_f1)) //到达闹钟时间
  595. {
  596. warning_cnt|=0x02;
  597. }
  598. else
  599. {
  600. warning_cnt&=~0x02;
  601. }
  602. if(cnt_s1>=2)
  603. {
  604. warning_cnt|=0x04;
  605. }else{
  606. warning_cnt&=~0x04;
  607. }
  608. // if((warning_cnt&0x01)==0x01) //坐姿异常
  609. // {
  610. // YP1=0;delay_us(10);YP2=1;delay_us(10);YP3=1;delay_us(10);
  611. // }
  612. // else if((warning_cnt&0x02)==0x02)//闹钟
  613. // {
  614. // YP1=1;delay_us(10);YP2=0;delay_us(10);YP3=1;delay_us(10);
  615. // }
  616. // else if((warning_cnt&0x04)==0x04)//学习时间过长
  617. // {
  618. // YP1=1;delay_us(10);YP2=1;delay_us(10);YP3=0;delay_us(10);
  619. // }
  620. // else{
  621. // YP1=1;YP2=1;YP3=1;delay_us(10);
  622. // }
  623. }
  624. }
  625. }