main.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "stm32f10x.h"
  5. #include "stdio.h"
  6. #include "usart.h"
  7. #include "adc.h"
  8. #include "oled.h"
  9. #include "ds18b20.h"
  10. #define HwInput PBin(7) //红外传感器输入
  11. #define KEY1 PAin(0) // 手动控制加热
  12. #define JR_OUT_PIN PCout(14) //控制输出
  13. #define CS_OUT_PIN PBout(13) //控制
  14. #define KEY_GPIO_PROT GPIOA
  15. #define KEY1_GPIO_PIN GPIO_Pin_0
  16. #define KEY2_GPIO_PIN GPIO_Pin_1
  17. #define KEY3_GPIO_PIN GPIO_Pin_2
  18. #define KEY4_GPIO_PIN GPIO_Pin_2
  19. #define KEY1_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY1_GPIO_PIN)
  20. #define KEY2_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY2_GPIO_PIN)
  21. #define KEY3_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY3_GPIO_PIN)
  22. #define KEY4_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY4_GPIO_PIN)
  23. //#define KEY5_IN GPIO_ReadInputDataBit(KEY_GPIO_PROT,KEY5_GPIO_PIN)
  24. u8 start_flag=0;
  25. void Hw_Init(void)
  26. {
  27. GPIO_InitTypeDef GPIO_InitStructure;
  28. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);
  29. GPIO_InitStructure.GPIO_Pin = KEY1_GPIO_PIN|KEY2_GPIO_PIN|KEY3_GPIO_PIN|KEY4_GPIO_PIN;
  30. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  31. GPIO_Init(KEY_GPIO_PROT, &GPIO_InitStructure);
  32. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  33. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  34. GPIO_Init(GPIOA, &GPIO_InitStructure);
  35. }
  36. u8 set_flag=0;
  37. u8 delay_off_time=30; //没人时关闭时间
  38. u8 time1_temp=0;
  39. u8 true_rt_time=60; //有人时延时关闭时间
  40. u8 time2_temp=0;
  41. u8 manual_mode_flag=0;//模式控制
  42. void key_Task(void)
  43. {
  44. static char key_flag=0;
  45. if(KEY1_IN==0||KEY2_IN==0||KEY3_IN==0||KEY4_IN==0)
  46. {
  47. if(key_flag==0)
  48. {
  49. key_flag=1;
  50. if(KEY1_IN==0)
  51. {
  52. if(++set_flag>1)
  53. {
  54. set_flag=0;
  55. }
  56. start_flag=0;
  57. }
  58. else if(KEY2_IN==0)
  59. {
  60. if(set_flag==0)
  61. {
  62. if(++delay_off_time>99)delay_off_time=0;
  63. }else if(set_flag==1)
  64. {
  65. if(++true_rt_time>99)true_rt_time=0;
  66. }
  67. }
  68. else if(KEY3_IN==0)
  69. {
  70. if(set_flag==0)
  71. {
  72. if(delay_off_time>0)delay_off_time--;
  73. }else if(set_flag==1)
  74. {
  75. if(true_rt_time>0)true_rt_time--;
  76. }
  77. }
  78. else if(KEY4_IN==0)
  79. {
  80. manual_mode_flag^=1;
  81. // start_flag=0;
  82. }
  83. }
  84. }else
  85. {
  86. key_flag=0;
  87. }
  88. }
  89. u8 get_time=0;
  90. u16 sec;
  91. void TIM2_IRQHandler()
  92. {
  93. u8 st;
  94. st=TIM_GetFlagStatus(TIM2, TIM_IT_Update);
  95. if(st!=0)
  96. {
  97. TIM_ClearFlag(TIM2, TIM_IT_Update);
  98. key_Task();
  99. get_time++;
  100. if(start_flag)
  101. {
  102. if(++sec>50*60)
  103. {
  104. sec=0;
  105. if(time1_temp>0)time1_temp--;
  106. if(time2_temp>0)time2_temp--;
  107. if(time1_temp==0||time2_temp==0)
  108. {
  109. start_flag=0;
  110. JR_OUT_PIN=0;//关闭电源
  111. manual_mode_flag=0;//手动模式下开关标志关闭
  112. }
  113. }
  114. }
  115. }
  116. }
  117. void Timer2_init()
  118. {
  119. TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  120. NVIC_InitTypeDef NVIC_InitStructure;
  121. RCC_APB1PeriphClockCmd (RCC_APB1Periph_TIM2,ENABLE);
  122. TIM_TimeBaseStructure.TIM_Period = 20000-1;
  123. TIM_TimeBaseStructure.TIM_Prescaler =72-1;
  124. TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
  125. TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  126. TIM_DeInit(TIM2);
  127. TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);
  128. TIM_Cmd(TIM2, ENABLE);
  129. TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
  130. NVIC_InitStructure.NVIC_IRQChannel =TIM2_IRQn;
  131. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  132. NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  133. NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  134. NVIC_Init (&NVIC_InitStructure);
  135. }
  136. u8 check_sta=0;
  137. char showbuff[16]={0};
  138. int main(void)
  139. {
  140. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  141. delay_init(); //延时函数初始化
  142. LED_Init(); //初始化与LED连接的硬件接口
  143. uart_init(9600);
  144. ADC1_Init();
  145. OLED_Init();
  146. OLED_Clear();
  147. Hw_Init();
  148. Timer2_init();
  149. while(1)
  150. {
  151. if(get_time>100) //100ms刷新一次
  152. {
  153. get_time=0;
  154. sprintf(showbuff,"check_states:%d",check_sta); //识别状态
  155. OLED_ShowString(0,2,(u8*)showbuff,16);
  156. sprintf(showbuff,"time1:%3d %3d",delay_off_time,time1_temp); //没人延时关闭的时间
  157. OLED_ShowString(0,4,(u8*)showbuff,16);
  158. sprintf(showbuff,"time2:%3d %3d",true_rt_time,time2_temp); //使用者自行设置关闭时间
  159. OLED_ShowString(0,6,(u8*)showbuff,16);
  160. if(set_flag==0) //自动模式 通过摄像头控制
  161. {
  162. OLED_ShowString(0,0,(u8*)"mode:auto ",16);
  163. if(check_sta==1)
  164. {
  165. if(start_flag==0)
  166. {
  167. start_flag=1;
  168. time1_temp=delay_off_time;
  169. time2_temp=0;
  170. }
  171. }else
  172. {
  173. start_flag=0;//不倒计时
  174. JR_OUT_PIN=1;//开启电源
  175. time1_temp=0;
  176. time2_temp=0;
  177. }
  178. }else //手动模式 使用者自行设置延时断电
  179. {
  180. OLED_ShowString(0,0,(u8*)"mode:manual",16);
  181. if(manual_mode_flag==1)
  182. {
  183. if(start_flag==0)
  184. {
  185. start_flag=1;
  186. time2_temp=true_rt_time;
  187. time1_temp=0;
  188. JR_OUT_PIN=1;//开启电源
  189. }
  190. }else
  191. {
  192. manual_mode_flag=0;
  193. time1_temp=0;
  194. JR_OUT_PIN=1;//开启电源
  195. time2_temp=0;
  196. start_flag=0;
  197. }
  198. }
  199. }
  200. }
  201. }