找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3788|回复: 3
收起左侧

stm32控制GSM模块进行红外报警程序源码(可以报警拨打手机)

[复制链接]
ID:398185 发表于 2018-9-15 06:16 | 显示全部楼层 |阅读模式
全套原代码,可以报警拨打手机。

单片机源程序如下:
  1. //#include "lcd1602_drive.h"
  2. //#include "main.h"
  3. //#include "ldssht10.h"
  4. #include "menu.h"
  5. #include "sht10.h"
  6. #include "delay.h"
  7. #include "lcd1602.h"
  8. #include "PWM.h"
  9. #include "TIMER.h"
  10. #include "PID.h"
  11. #include "EXIT.h"
  12. #include "DS1302.H"
  13. #include "moto.h"
  14. #include"Flash.h"
  15. #include "Irda.h"
  16. #include "DS18B20.h"
  17. #include "oled.h"
  18. #include "bmp.h"
  19. #include "stm32f10x_lib.h"

  20. //#include "adc.h"
  21. typedef volatile unsigned char  vu8;
  22. typedef volatile unsigned short vu16;
  23. unsigned char DS1302_flg=0x00;                                                                                          

  24. //#include "key.h"
  25. u16 Now_TH=0;    //当前读取到的温度值,扩大10倍数
  26. u16 Now_PH=0;         //当前读取到的湿度值,扩大10倍数
  27. u16 Now_TH_D=0;
  28. u16 Now_PH_D=0;
  29. u16 Now_TH_S=0;    //当前读取到的温度值,扩大10倍数
  30. u16 Now_PH_S=0;         //当前读取到的湿度值,扩大10倍数
  31. u16 avr_ph;
  32. float avr_ph_f;
  33. unsigned char Run_days=1;  //孵蛋进行天数
  34. unsigned char Run_YN=0;   //系统是否运行中,Y:运行中,N:停止中
  35. u32 cnt=0;
  36. u32 cnt_wet=0;
  37. u32 cnt_wet_h=0;
  38. //u16 heat_pwm=0;
  39. //u16 set_temprature=0x0186;//39.0 度

  40. u16 Set_Temp_date_num[100]  ={0};
  41. u16 Set_Shidu_date_num[100] ={0};
  42. u16 Set_MOto_fanzhuang[100] ={0
  43. //                              0x004e,0x004e,0x004e,0x004e,0x004e,0x004e,0x004e,0x004e,0x4e,0x4e
  44. //                             ,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e
  45. //                                                         ,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e
  46.                                                          };
  47. u16 Set_fan_runtime[100] = {0};
  48. u16 Set_egg_codetime[100] = {0};




  49. u16 set_temprature = 0X0172;//0x0177;//0x0177;//37.5 度
  50. u16 set_Shidu = 0x00fa;

  51. u16 target_temprature;  //需要达到的目标温度
  52. u16 target_Shidu;//需要达到的目标的湿度
  53. u8 target_moto; //当日是否需要翻蛋设置参数
  54. u8 target_fan; //当日排风扇是否工作设置参数

  55. u8 Moto_turn_flag;
  56. u8 moto_start_flag;//电机启动转动标示
  57. u8 dianji_conut = 0; //电机转动时间控制参数

  58. u16 Shubeng_Time_Control_Count = 0;//水泵时间计时
  59. u16 Shuibeng_Control_flag = 0;     //水泵工作标志位默认不工作
  60.                                                                                                                                           
  61. u8 Close_jiashi_flg = 0x01;        //关加湿器标志位
  62. u8 fengshan_stop_flg = 0x00; //关关风扇标志位

  63. //unsigned char set_mototurn = 0;                 //设置翻蛋参数
  64. u8 set_mototurn = 0;
  65. u8 set_fan_time = 0;        //设置排风扇运行参数
  66. //uchar s2,s3,s4;
  67. unsigned char key_num_check_flg = 0x00;
  68. uchar* table_1[]={"Show Para","Set  Para","Hatch Days:","Set TH:","Set PH:","Turn Egg Y/N:"}; //需要显示的字符串
  69. uchar* table_0[]={"Display","Set Days","Set TH","Set RH","Current Set","Set Pid_P","Set Pid_D","Set Date","Display Tmp RH","Set Moto Chage","Set Moto Init"};//***主菜单显
  70. unsigned char  Display_digit[10]={"0123456789"};   //定义字符数组显示数字
  71. unsigned char* display_YN[]={"Start Y/N?","Stop Y/N?","Reset Y/N?"};   //显示是不是开始或者停止运行运行参数

  72. u16 PID_Check_flg=0x00; // 1s检测一次温度标志位
  73. u8 Display_tp_flag = 0x00;//设备不在孵蛋状态是,读取温度参数值,并显示的标示

  74. u16 Set_Temp_Flash_Date[1];         //写入flash的初始温度
  75. u16 Set_Shidu_Flash_Date[1];         //写入flash的初始湿度
  76. u16 Set_Days_Flash_Date[1];         //写入flash的初始天数
  77. u16 Set_PID_P_Flash_Date[1];         //写入flash的初始P
  78. u16 Set_PID_D_Flash_Date[1];         //写入flash的初始D
  79. u16 Set_Fanzhuan_Flash_Date[1];         //写入flash的初始反转

  80. u16 Read_Temp_Flash_Date[100];
  81. u16 Read_Shidu_Flash_Date[100];
  82. u16 Read_Fanzhuan_Flash_Date[100];

  83. u16 Read_Temp_Flash_Date_All[1];
  84. u16 Read_Shidu_Flash_Date_All[1];
  85. u16 Read_Fanzhuan_Flash_Date_All[1];


  86. u16 Read_Days_Flash_Date[1];
  87. u16 Read_PID_P_Flash_Date[1];
  88. u16 Read_PID_D_Flash_Date[1];

  89. u16 Flash_Read_Days_TH_PH_Turn_All_Set[5]={0};
  90. u16 Flash_Write_Days_TH_PH_Turn_All_Set[5] = {0,0,0,0,1};  //所有天数,温度,湿度,和翻转设置

  91. u8 Moto_Set_Time_flg = 0x00;
  92. //u8 Moto_Set_flg = 0x00;
  93. u8 Moto_Left_flg = 0x01;
  94. u8 Moto_Right_flg = 0x00;
  95. u8 Moto_Stop_flg = 0x00;
  96. u8 wet_state_flag=0;

  97. u16  Moto_Minte_conut = 0x00;
  98. u8 break_flag=0;

  99. unsigned char Set_Input_Day_Num = 30; // 初始化天数是30天 最大只能99
  100. unsigned char Set_Input_Day_Num_t;
  101. unsigned short PID_P = 2000;//10
  102. unsigned short PID_D = 5;//5

  103. u8 Set_MOto_fangzhuan_num = 0x59;                                        //89 Y

  104. unsigned char set_year = 14;
  105. unsigned char set_month = 5;
  106. unsigned char set_day = 29;
  107. unsigned char set_hour =23;
  108. unsigned char set_minute = 22;
  109. unsigned char set_second =30;

  110. unsigned char second,minute,hour,day,month,year;
  111. unsigned char minute_d,hour_d,second_d,init_date_state,date_erro_flag;
  112. u32 cnt_d;
  113. unsigned char Now_minute,Now_year,Now_month,Now_day,Now_hour;         //记录系统启动日期
  114. //unsigned char Stop_year,Stop_month,Stop_day;  // 记录系统停止的日期
  115. unsigned char Stop_year,Stop_month,Stop_day,set_time;  // 记录系统停止的日期
  116. unsigned char wetfan_state,hotfan_state;
  117. unsigned char LCD_now_state;          // 液晶显示当前状态  SKY HU
  118. unsigned char LCD_next_state;     // 液晶显示下一个状态  SKY HU
  119. unsigned char LCD_mouse;          //  ->指示位置  SKY HU
  120. unsigned char KEY_onoff;                //是否开始运行 >|
  121. unsigned char KEY_reset;        //是否复位设定参数按键CH-
  122. unsigned char KEY_up;             //往下翻页按键识别 -
  123. unsigned char KEY_down;           //往下翻页按键识别 +
  124. unsigned char KEY_confirm;        //确认按键识别  EQ
  125. unsigned char KEY_cancel;         //取消按键识别  >>|
  126. unsigned char KEY_back;                          //返回按键识别  CH+
  127. unsigned char KEY_data;                          //数字按键识别标示  0~9
  128. unsigned char KEY_value;          //数字按键数值  0~9
  129. unsigned char* KEY_char;                          //数字按键数值 字符型 “0~9”
  130. unsigned char KEY_time;           //设置时间按钮  100+

  131. unsigned char KEY_pre;
  132. unsigned char KEY_next;
  133. unsigned char KEY_mode;

  134. unsigned char Cancel_flag;        //收到消除标志符号,标示要消除输入错误的值
  135. unsigned char Set_day_value;      //记录需要修改的是哪一天的参数
  136. unsigned char UpDown_flag;        //翻页标示
  137. //unsigned char ONOFF_flag;         //当前启动关闭状态标示 0:关闭; 1:开启
  138. unsigned char  digit[10]={"0123456789"};   //定义字符数组显示数字

  139. unsigned char bird_mode,Fan_mode, Moto_Runtime, Fan1_Opentime, Warning_Switch,Pump_Runtime; //5个参数变量
  140. unsigned char Set_bird_mode,Set_Fan_mode, Set_Moto_Runtime, Set_Fan1_Opentime, Set_Warning_Switch,Set_Pump_Runtime; //5个参数变量

  141. unsigned char Cold_Runtime, Cold_Temp,High_Temp,Low_Temp,pid_mode,wet_time,th_step,wet_fan_speed;
  142. unsigned char Set_Cold_Runtime, Set_Cold_Temp,Set_High_Temp,Set_Low_Temp,Set_self_test,Set_pid_mode,Set_wet_time,Set_th_step,Set_wet_fan;
  143. u32 hot_cnt;
  144. float wendunum1[]={0.00};
  145. float shidunum1[]={0.00};
  146. float wendunum1_S[]={0.00};
  147. float shidunum1_S[]={0.00};
  148. u8 egg_flag;
  149. u8 self_test_over=0;
  150. unsigned char hand_egg_turn,lcd_close_flag,disp_mode,hand_add_water;
  151. /*红外参数变量设定*/
  152. unsigned char* bird_name;
  153. u8 fhua_days;
  154. u8 step_days[4];
  155. u16 wendu_t[4],shidu_t[4];
  156. u8 fandan_t[4],paifen_t[4],liang_t[4];
  157. u8 egg_size;
  158. u32 fan_erro_cnt;
  159. #define REMOTE_ID 0             
  160. #define RDATA PAin(0)         //红外数据输入脚

  161. u8  fac_us=0;//us延时倍乘数
  162. u16 fac_ms=0;//ms延时倍乘数
  163. u32 Remote_Odr=0;           //命令暂存处
  164. u8  Remote_Cnt=0;    //按键次数,此次按下键的次数
  165. u8  Remote_Rdy=0;    //红外接收到数据
  166. u8  key;
  167. u8 set_flag=0;
  168. u16 start_year=14;//2014;
  169. u16 start_month=5;//5;
  170. u16 start_day =17;//17;
  171. u16 target_cold;
  172. int start_time_ymd;
  173. int power_val;
  174. u32 fan_detect_cnt;
  175. void delay_init(u8 SYSCLK);
  176. void delay_irda_us(u32 nus);
  177. void delay_us(u32 nus);
  178. void delay_ms(u16 nms);
  179. u8 Remote_Process(void);   //红外接收到数据处理
  180. u8 Pulse_Width_Check(void);//检查脉宽

  181. void RCC_Configuration(void); //时钟配置
  182. void GPIO_Configuration(void);//GPIO口配置
  183. void NVIC_Configuraton(void);//flash调试   
  184. void RCC_Configuration(void);//时钟配置
  185. void EXTI_Configuration(void);

  186. void Display_0(void);  //液晶状态0下面的显示
  187. void  Read_THPH(float *wendu,float *shidu);
  188. void read_new_para(void);
  189. u8 moto_goto_start(void);
  190. u8 moto_goto_end(void);
  191. void self_test(void);
  192. void device_init(void);
  193. u8 egg_turn(void);
  194. u8 add_water(u8 init);
  195. //u8 open_wet(void);

  196. u8 egg_erro_flag=0;
  197. u8 wet_erro_flag=0;
  198. u8 sen_erro_flag=0;
  199. u8 sen_erro_flag_S=0;
  200. int sen_erro_all=0;
  201. u8 w_first=0;
  202. u32 w_cnt_t1=0;
  203. u32 w_cnt_t2=0;
  204. u8 turn_flag=0;
  205. u8 no_power_flag,dianchi_flag;
  206. u8 cold_flag;
  207. u32 p_cnt_t1=0;
  208. u32 p_cnt_t2=0;
  209. u32 s1_cnt,s2_cnt;
  210. u32 wet_t_cnt ;
  211. u8 fan_erro_flag;
  212. unsigned char no_water_flag,no_water_flag_pre,get_water_flag;
  213. u32 get_water_cnt;
  214. int temp_cnt;
  215. int fan_cnt,fan_cnt_pre,add_water_cnt,open_wet_cnt,wet_cnt_tj,wet_cnt_si;
  216. u8 wet_many_flag,wet_high_temp;
  217. int max_s1_temp,max_s2_temp;
  218. int min_s1_temp,min_s2_temp;
  219. int max_s1_ph,max_s2_ph;
  220. int min_s1_ph,min_s2_ph;
  221. unsigned short ds18b20_temp,dot,tt;

  222. u32 low_t_cnt,high_t_cnt,low_wet_cnt,high_wet_cnt,power_erro_cnt,bump_erro_cnt,fan_erro_cnt;
  223. void warning_report(void) ;
  224. void IWDG_Init(u8 prer,u16 rlr);
  225. void IWDG_Feed(void);
  226. void fan_ctrl(void);
  227. void egg_cold(void);
  228. void shuiben_test(void);
  229. //void power_switch(void)        ;
  230. #define ADC1_DR_Address   ((u32)0x4001244C)
  231. #define ADC2_DR_Address   ((u32)0x4001284C)
  232. vu16 ADCConvertedValue;
  233. u16 AD_value[2];
  234. //vu16 Temperature;

  235. void DMA_Configuration(void);
  236. void ADC_Configuration(void);
  237. void ADC2_Configuration(void);
  238. void ADC3_Configuration(void);
  239. int chip_temp;
  240. int pw_cnt_t1 ,pw_cnt_t2, no_power_flag_pre;
  241. int water_lever,power_lever;
  242. int pid_cnt;
  243. u16 wet_flag;
  244. u8 dianchi_flag        ,dianchi_val;
  245. u8 fan_open_flag;
  246. u8 open_wet(void);

  247. u8 fan_test(void)         ;
  248. //void fan_detect()  ;
  249. u8 power_detect(void);
  250. u8 blank;
  251. u32 disp_cnt;
  252. u8 oled_write_flag;
  253. u8 sen_use_flag;
  254. int ave_hot,max_hot;
  255. u32 wetfan_cnt,wetfan_cnt_t,date_erro_cnt;
  256. unsigned char too_wet_flag;
  257. u16 wet_power_level;
  258. u16 wet_new;
  259. int u_wet,his_wet;
  260. u32 wet_erro_cnt,wet_erro_cnt1;
  261. u8 wet_short_flag ;
  262. u32 cnt,cnt_egg_time,egg_direct;
  263. int cnt_turn;
  264. int egg_turn_time  ;
  265. u8 egg_turn_on;
  266. u8 egg_use_flag;
  267. u32 crc_erro;
  268. u32 read_erro;
  269. u32 crc_erro_S;
  270. u32 read_erro_S;




  271. u8 check_flag = 0;  
  272. u8 found_flag = 0;  
  273. u8 bit_count = 0;  
  274. u32 puls_high_time = 0;  
  275. u32 puls_low_time = 0;  



  276. u16 ADC_Get_aveg(u8 ch,u8 n);
  277. u16 Get_val(u8 ch);
  278. void hand_turn();
  279. u8 ueid;
  280. u16 ReadADCAverageValue()

  281. {

  282. u8 i;

  283. u32 sum = 0;

  284. /*for(i=0; i<8; i++)

  285. {

  286.   sum+=ADCConvertedValue[i];

  287. }        
  288.   //sum= ADCConvertedValue;         */
  289. return (ADCConvertedValue);

  290. }
  291. /* u16 ffan_detect()
  292. {
  293.   u16 t1,t2,t4;
  294.   float t3;
  295.           // adcx=ADC_Get_aveg(ADC_Channel_1,10);
  296. //temp=(float)adcx*(3.3/4096);
  297.          // power_lever=(ADC_GetConversionValue(ADC2)*3.3)*110/4096+10;
  298.          t1=ADC_Get_aveg(ADC_Channel_17,10);       
  299.          t2=ADC_Get_aveg(ADC_Channel_7,10);
  300.          t3=  t2*1200/t1;
  301.          t4=(u16)t3;
  302.          
  303.             return(t4);

  304. }                */
  305. void temp_cal()
  306. {

  307. vu16 Temperature;
  308. int t;
  309.               //t =ADCConvertedValue;
  310.                            t=ADC_Get_aveg(ADC_Channel_16,10);
  311.               Temperature=(1.42-t*3.3/4096)*1000/4.35 + 25;

  312.               chip_temp  = chip_temp/2+Temperature/2;
  313.                           if(chip_temp>99) chip_temp=99;       
  314. }
  315. //  u8 water_detect();


  316. /* u16         ADC_Filter(void)
  317. {

  318. u16 result=0;

  319. u8        i;

  320.     for(i=16;i>0;i--)

  321.    {

  322.      delay_nms(1);

  323.     result        += ADCConvertedValue;

  324.   }

  325.   return  result/16;

  326. }
  327.    */
  328. /*u8 bird_name[];
  329. void get_bird_name(void);          */

  330. void I2C_Mode_config(void);
  331. void get_bird_name(u8 mode)
  332. {
  333.   switch(mode)
  334.   {
  335.   case 0:
  336.     bird_name="手动";
  337.         fhua_days=1;
  338.         step_days[0]=1;
  339.         step_days[1]=0;
  340.         step_days[2]=0;
  341.         step_days[3]=0;
  342.         wendu_t[0]=375;
  343.         wendu_t[1]=372;
  344.         wendu_t[2]=370;
  345.         wendu_t[3]=368;
  346.         shidu_t[0]=450;
  347.         shidu_t[1]=550;
  348.         shidu_t[2]=600;
  349.         shidu_t[3]=650;
  350.         fandan_t[0]=1;
  351.         fandan_t[1]=1;
  352.         fandan_t[2]=2;
  353.         fandan_t[3]=4;
  354.         paifen_t[0]=2;
  355.     paifen_t[1]=6;
  356.         paifen_t[2]=4;
  357.         paifen_t[3]=4;
  358.         liang_t[0]=0;
  359.         liang_t[1]=0;
  360.         liang_t[2]=1;
  361.         liang_t[3]=1;
  362.         egg_size=6;


  363.     break;
  364.   case 1:
  365.     bird_name="牡丹";
  366.         fhua_days=21;
  367.         step_days[0]=5;
  368.         step_days[1]=12;
  369.         step_days[2]=3;
  370.         step_days[3]=1;
  371.         wendu_t[0]=376;
  372.         wendu_t[1]=375;
  373.         wendu_t[2]=372;
  374.         wendu_t[3]=370;
  375.         shidu_t[0]=600;
  376.         shidu_t[1]=550;
  377.         shidu_t[2]=600;
  378.         shidu_t[3]=650;
  379.         fandan_t[0]=4;
  380.         fandan_t[1]=1;
  381.         fandan_t[2]=2;
  382.         fandan_t[3]=4;
  383.         paifen_t[0]=4;
  384.     paifen_t[1]=3;
  385.         paifen_t[2]=2;
  386.         paifen_t[3]=1;
  387.         liang_t[0]=0;
  388.         liang_t[1]=0;
  389.         liang_t[2]=1;
  390.         liang_t[3]=1;
  391.         egg_size=6;
  392.     break;
  393.   case 2:
  394.     bird_name="玄凤";
  395.         fhua_days=21;
  396.         step_days[0]=5;
  397.         step_days[1]=12;
  398.         step_days[2]=3;
  399.         step_days[3]=1;
  400.         wendu_t[0]=376;
  401.         wendu_t[1]=375;
  402.         wendu_t[2]=372;
  403.         wendu_t[3]=370;
  404.         shidu_t[0]=450;
  405.         shidu_t[1]=450;
  406.         shidu_t[2]=450;
  407.         shidu_t[3]=650;
  408.         fandan_t[0]=4;
  409.         fandan_t[1]=2;
  410.         fandan_t[2]=1;
  411.         fandan_t[3]=4;
  412.         paifen_t[0]=4;
  413.     paifen_t[1]=3;
  414.         paifen_t[2]=2;
  415.         paifen_t[3]=1;
  416.         liang_t[0]=0;
  417.         liang_t[1]=0;
  418.         liang_t[2]=1;
  419.         liang_t[3]=1;
  420.         egg_size=6;
  421.     break;
  422.   case 3:
  423.     bird_name="虎皮";
  424.         fhua_days=21;
  425.         step_days[0]=5;
  426.         step_days[1]=12;
  427.         step_days[2]=3;
  428.         step_days[3]=1;
  429.         wendu_t[0]=376;
  430.         wendu_t[1]=375;
  431.         wendu_t[2]=372;
  432.         wendu_t[3]=370;
  433.         shidu_t[0]=600;
  434.         shidu_t[1]=550;
  435.         shidu_t[2]=600;
  436.         shidu_t[3]=650;
  437.         fandan_t[0]=4;
  438.         fandan_t[1]=1;
  439.         fandan_t[2]=2;
  440.         fandan_t[3]=4;
  441.         paifen_t[0]=4;
  442.     paifen_t[1]=3;
  443.         paifen_t[2]=2;
  444.         paifen_t[3]=1;
  445.         liang_t[0]=0;
  446.         liang_t[1]=0;
  447.         liang_t[2]=1;
  448.         liang_t[3]=1;
  449.         egg_size=6;
  450.     break;
  451.   case 4:
  452.     bird_name="和尚";  
  453.         fhua_days=24;
  454.         step_days[0]=5;
  455.         step_days[1]=15;
  456.         step_days[2]=3;
  457.         step_days[3]=1;
  458.         wendu_t[0]=376;
  459.         wendu_t[1]=375;
  460.         wendu_t[2]=372;
  461.         wendu_t[3]=370;
  462.         shidu_t[0]=450;
  463.         shidu_t[1]=450;
  464.         shidu_t[2]=450;
  465.         shidu_t[3]=650;
  466.         fandan_t[0]=4;
  467.         fandan_t[1]=1;
  468.         fandan_t[2]=2;
  469.         fandan_t[3]=4;
  470.         paifen_t[0]=4;
  471.     paifen_t[1]=3;
  472.         paifen_t[2]=2;
  473.         paifen_t[3]=1;
  474.         liang_t[0]=0;
  475.         liang_t[1]=0;
  476.         liang_t[2]=1;
  477.         liang_t[3]=1;
  478.         egg_size=6;
  479.     break;
  480.   case 5:
  481.     bird_name="太阳";
  482.         fhua_days=24;
  483.         step_days[0]=5;
  484.         step_days[1]=15;
  485.         step_days[2]=3;
  486.         step_days[3]=1;
  487.         wendu_t[0]=376;
  488.         wendu_t[1]=375;
  489.         wendu_t[2]=372;
  490.         wendu_t[3]=370;
  491.         shidu_t[0]=550;
  492.         shidu_t[1]=550;
  493.         shidu_t[2]=550;
  494.         shidu_t[3]=650;
  495.         fandan_t[0]=4;
  496.         fandan_t[1]=1;
  497.         fandan_t[2]=2;
  498.         fandan_t[3]=4;
  499.         paifen_t[0]=4;
  500.     paifen_t[1]=3;
  501.         paifen_t[2]=2;
  502.         paifen_t[3]=1;
  503.         liang_t[0]=0;
  504.         liang_t[1]=0;
  505.         liang_t[2]=1;
  506.         liang_t[3]=1;
  507.         egg_size=6;
  508.     break;
  509.   case 6:
  510.     bird_name="灰机";
  511.         fhua_days=28;  
  512.         step_days[0]=6;
  513.         step_days[1]=18;
  514.         step_days[2]=3;
  515.         step_days[3]=1;
  516.         wendu_t[0]=376;
  517.         wendu_t[1]=375;
  518.         wendu_t[2]=372;
  519.         wendu_t[3]=370;
  520.         shidu_t[0]=450;
  521.         shidu_t[1]=430;
  522.         shidu_t[2]=450;
  523.         shidu_t[3]=650;
  524.         fandan_t[0]=4;
  525.         fandan_t[1]=1;
  526.         fandan_t[2]=2;
  527.         fandan_t[3]=4;
  528.         paifen_t[0]=4;
  529.     paifen_t[1]=3;
  530.         paifen_t[2]=2;
  531.         paifen_t[3]=1;
  532.         liang_t[0]=0;
  533.         liang_t[1]=0;
  534.         liang_t[2]=1;
  535.         liang_t[3]=1;
  536.         egg_size=6;
  537.     break;
  538.   case 7:
  539.     bird_name="折中";
  540.         fhua_days=28;  
  541.         step_days[0]=6;
  542.         step_days[1]=18;
  543.         step_days[2]=3;
  544.         step_days[3]=1;
  545.         wendu_t[0]=376;
  546.         wendu_t[1]=375;
  547.         wendu_t[2]=372;
  548.         wendu_t[3]=370;
  549.         shidu_t[0]=450;
  550.         shidu_t[1]=450;
  551.         shidu_t[2]=450;
  552.         shidu_t[3]=650;
  553.         fandan_t[0]=4;
  554.         fandan_t[1]=1;
  555.         fandan_t[2]=2;
  556.         fandan_t[3]=4;
  557.         paifen_t[0]=4;
  558.     paifen_t[1]=3;
  559.         paifen_t[2]=2;
  560.         paifen_t[3]=1;
  561.         liang_t[0]=0;
  562.         liang_t[1]=0;
  563.         liang_t[2]=1;
  564.         liang_t[3]=1;
  565.         egg_size=6;
  566.     break;
  567.   case 8:
  568.     bird_name="小鸡";  
  569.         fhua_days=21;
  570.         step_days[0]=5;
  571.         step_days[1]=14;
  572.         step_days[2]=3;
  573.         step_days[3]=1;
  574.         wendu_t[0]=380;
  575.         wendu_t[1]=380;
  576.         wendu_t[2]=378;
  577.         wendu_t[3]=376;
  578.         shidu_t[0]=600;
  579.         shidu_t[1]=550;
  580.         shidu_t[2]=600;
  581.         shidu_t[3]=650;
  582.         fandan_t[0]=4;
  583.         fandan_t[1]=1;
  584.         fandan_t[2]=2;
  585.         fandan_t[3]=4;
  586.         paifen_t[0]=4;
  587.     paifen_t[1]=3;
  588.         paifen_t[2]=2;
  589.         paifen_t[3]=1;
  590.         liang_t[0]=0;
  591.         liang_t[1]=0;
  592.         liang_t[2]=1;
  593.         liang_t[3]=1;
  594.         egg_size=6;
  595.     break;
  596.   case 9:
  597.     bird_name="太平";  
  598.         fhua_days=19;
  599.         step_days[0]=5;
  600.         step_days[1]=10;
  601.         step_days[2]=3;
  602.         step_days[3]=1;
  603.         wendu_t[0]=376;
  604.         wendu_t[1]=375;
  605.         wendu_t[2]=372;
  606.         wendu_t[3]=370;
  607.         shidu_t[0]=600;
  608.         shidu_t[1]=550;
  609.         shidu_t[2]=600;
  610.         shidu_t[3]=650;
  611.         fandan_t[0]=4;
  612.         fandan_t[1]=1;
  613.         fandan_t[2]=2;
  614.         fandan_t[3]=4;
  615.         paifen_t[0]=4;
  616.     paifen_t[1]=3;
  617.         paifen_t[2]=2;
  618.         paifen_t[3]=1;
  619.         liang_t[0]=0;
  620.         liang_t[1]=0;
  621.         liang_t[2]=1;
  622.         liang_t[3]=1;
  623.         egg_size=6;
  624.     break;
  625.   case 10:
  626.     bird_name="金刚";
  627.         fhua_days=26;
  628.         step_days[0]=6;
  629.         step_days[1]=16;
  630.         step_days[2]=3;
  631.         step_days[3]=1;
  632.         wendu_t[0]=376;
  633.         wendu_t[1]=375;
  634.         wendu_t[2]=372;
  635.         wendu_t[3]=370;
  636.         shidu_t[0]=450;
  637.         shidu_t[1]=420;
  638.         shidu_t[2]=450;
  639.         shidu_t[3]=650;
  640.         fandan_t[0]=4;
  641.         fandan_t[1]=1;
  642.         fandan_t[2]=2;
  643.         fandan_t[3]=4;
  644.         paifen_t[0]=4;
  645.     paifen_t[1]=3;
  646.         paifen_t[2]=2;
  647.         paifen_t[3]=1;
  648.         liang_t[0]=0;
  649.         liang_t[1]=0;
  650.         liang_t[2]=1;
  651.         liang_t[3]=1;
  652.         egg_size=6;
  653.     break;
  654.   case 11:
  655.     bird_name="葵花";
  656.         fhua_days=28;
  657.         step_days[0]=6;
  658.         step_days[1]=18;
  659.         step_days[2]=3;
  660.         step_days[3]=21;
  661.         wendu_t[0]=376;
  662.         wendu_t[1]=375;
  663.         wendu_t[2]=372;
  664.         wendu_t[3]=370;
  665.         shidu_t[0]=450;
  666.         shidu_t[1]=420;
  667.         shidu_t[2]=450;
  668.         shidu_t[3]=650;
  669.         fandan_t[0]=4;
  670.         fandan_t[1]=1;
  671.         fandan_t[2]=2;
  672.         fandan_t[3]=4;
  673.         paifen_t[0]=4;
  674.     paifen_t[1]=3;
  675.         paifen_t[2]=2;
  676.         paifen_t[3]=1;
  677.         liang_t[0]=0;
  678.         liang_t[1]=0;
  679.         liang_t[2]=1;
  680.         liang_t[3]=1;
  681.         egg_size=6;
  682.     break;
  683.   case 12:
  684.     bird_name="塞内";
  685.         fhua_days=26;
  686.         step_days[0]=6;
  687.         step_days[1]=16;
  688.         step_days[2]=3;
  689.         step_days[3]=1;
  690.         wendu_t[0]=376;
  691.         wendu_t[1]=375;
  692.         wendu_t[2]=372;
  693.         wendu_t[3]=370;
  694.         shidu_t[0]=450;
  695.         shidu_t[1]=450;
  696.         shidu_t[2]=450;
  697.         shidu_t[3]=650;
  698.         fandan_t[0]=4;
  699.         fandan_t[1]=1;
  700.         fandan_t[2]=2;
  701.         fandan_t[3]=4;
  702.         paifen_t[0]=4;
  703.     paifen_t[1]=3;
  704.         paifen_t[2]=2;
  705.         paifen_t[3]=1;
  706.         liang_t[0]=0;
  707.         liang_t[1]=0;
  708.         liang_t[2]=1;
  709.         liang_t[3]=1;
  710.         egg_size=6;
  711.     break;
  712.   case 13:
  713.     bird_name="亚马";
  714.         fhua_days=28;
  715.         step_days[0]=6;
  716.         step_days[1]=18;
  717.         step_days[2]=3;
  718.         step_days[3]=1;
  719.         wendu_t[0]=376;
  720.         wendu_t[1]=375;
  721.         wendu_t[2]=372;
  722.         wendu_t[3]=370;
  723.         shidu_t[0]=450;
  724.         shidu_t[1]=430;
  725.         shidu_t[2]=450;
  726.         shidu_t[3]=650;
  727.         fandan_t[0]=4;
  728.         fandan_t[1]=1;
  729.         fandan_t[2]=2;
  730.         fandan_t[3]=4;
  731.         paifen_t[0]=4;
  732.     paifen_t[1]=3;
  733.         paifen_t[2]=2;
  734.         paifen_t[3]=1;
  735.         liang_t[0]=0;
  736.         liang_t[1]=0;
  737.         liang_t[2]=1;
  738.         liang_t[3]=1;
  739.         egg_size=6;
  740.     break;
  741.   case 14:
  742.     bird_name="吸蜜";  
  743.         fhua_days=26;
  744.         step_days[0]=6;
  745.         step_days[1]=16;
  746.         step_days[2]=3;
  747.         step_days[3]=1;
  748.         wendu_t[0]=376;
  749.         wendu_t[1]=375;
  750.         wendu_t[2]=372;
  751.         wendu_t[3]=370;
  752.         shidu_t[0]=450;
  753.         shidu_t[1]=450;
  754.         shidu_t[2]=450;
  755.         shidu_t[3]=650;
  756.         fandan_t[0]=4;
  757.         fandan_t[1]=1;
  758.         fandan_t[2]=2;
  759.         fandan_t[3]=4;
  760.         paifen_t[0]=4;
  761.     paifen_t[1]=3;
  762.         paifen_t[2]=2;
  763.         paifen_t[3]=1;
  764.         liang_t[0]=0;
  765.         liang_t[1]=0;
  766.         liang_t[2]=1;
  767.         liang_t[3]=1;
  768.         egg_size=6;
  769.     break;
  770.   case 15:
  771.     bird_name="亚历";
  772.         fhua_days=25;
  773.         step_days[0]=6;
  774.         step_days[1]=15;
  775.         step_days[2]=3;
  776.         step_days[3]=1;
  777.         wendu_t[0]=376;
  778.         wendu_t[1]=374;
  779.         wendu_t[2]=372;
  780.         wendu_t[3]=370;
  781.         shidu_t[0]=450;
  782.         shidu_t[1]=450;
  783.         shidu_t[2]=450;
  784.         shidu_t[3]=650;
  785.         fandan_t[0]=4;
  786.         fandan_t[1]=1;
  787.         fandan_t[2]=2;
  788.         fandan_t[3]=4;
  789.         paifen_t[0]=4;
  790.     paifen_t[1]=3;
  791.         paifen_t[2]=2;
  792.         paifen_t[3]=1;
  793.         liang_t[0]=0;
  794.         liang_t[1]=0;
  795.         liang_t[2]=1;
  796.         liang_t[3]=1;
  797.         egg_size=6;   
  798.     break;
  799.   case 16:
  800.     bird_name="鹌鹑";
  801.         fhua_days=16;
  802.         step_days[0]=3;
  803.         step_days[1]=10;
  804.         step_days[2]=2;
  805.         step_days[3]=1;
  806.         wendu_t[0]=380;
  807.         wendu_t[1]=380;
  808.         wendu_t[2]=378;
  809.         wendu_t[3]=376;
  810.         shidu_t[0]=550;
  811.         shidu_t[1]=550;
  812.         shidu_t[2]=600;
  813.         shidu_t[3]=650;
  814.         fandan_t[0]=4;
  815.         fandan_t[1]=1;
  816.         fandan_t[2]=2;
  817.         fandan_t[3]=4;
  818.         paifen_t[0]=4;
  819.     paifen_t[1]=3;
  820.         paifen_t[2]=2;
  821.         paifen_t[3]=1;
  822.         liang_t[0]=0;
  823.         liang_t[1]=0;
  824.         liang_t[2]=1;
  825.         liang_t[3]=1;
  826.         egg_size=6;   
  827.     break;
  828. case 17:
  829.     bird_name="孔雀";
  830.         fhua_days=27;
  831.         step_days[0]=6;
  832.         step_days[1]=17;
  833.         step_days[2]=3;
  834.         step_days[3]=1;
  835.         wendu_t[0]=380;
  836.         wendu_t[1]=378;
  837.         wendu_t[2]=376;
  838.         wendu_t[3]=372;
  839.         shidu_t[0]=600;
  840.         shidu_t[1]=600;
  841.         shidu_t[2]=650;
  842.         shidu_t[3]=700;
  843.         fandan_t[0]=4;
  844.         fandan_t[1]=1;
  845.         fandan_t[2]=2;
  846.         fandan_t[3]=4;
  847.         paifen_t[0]=4;
  848.     paifen_t[1]=3;
  849.         paifen_t[2]=2;
  850.         paifen_t[3]=1;
  851.         liang_t[0]=0;
  852.         liang_t[1]=0;
  853.         liang_t[2]=1;
  854.         liang_t[3]=1;
  855.         egg_size=6;   
  856.     break;

  857.        
  858.    case 18:
  859.     bird_name="保温";  
  860.         fhua_days=1;
  861.         step_days[0]=1;
  862.         step_days[1]=0;
  863.         step_days[2]=0;
  864.         step_days[3]=0;
  865.         wendu_t[0]=365;
  866.         wendu_t[1]=372;
  867.         wendu_t[2]=370;
  868.         wendu_t[3]=368;
  869.         shidu_t[0]=500;
  870.         shidu_t[1]=520;
  871.         shidu_t[2]=600;
  872.         shidu_t[3]=650;
  873.         fandan_t[0]=0;
  874.         fandan_t[1]=0;
  875.         fandan_t[2]=0;
  876.         fandan_t[3]=0;
  877.         paifen_t[0]=2;
  878.     paifen_t[1]=1;
  879.         paifen_t[2]=1;
  880.         paifen_t[3]=1;
  881.         liang_t[0]=0;
  882.         liang_t[1]=0;
  883.         liang_t[2]=0;
  884.         liang_t[3]=0;
  885.         egg_size=6;
  886.     break;
  887.   case 19:
  888.     bird_name="保手";  
  889.         fhua_days=1;
  890.         step_days[0]=1;
  891.         step_days[1]=0;
  892.         step_days[2]=0;
  893.         step_days[3]=0;
  894.         wendu_t[0]=365;
  895.         wendu_t[1]=372;
  896.         wendu_t[2]=370;
  897.         wendu_t[3]=368;
  898.         shidu_t[0]=500;
  899.         shidu_t[1]=520;
  900.         shidu_t[2]=600;
  901.         shidu_t[3]=650;
  902.         fandan_t[0]=0;
  903.         fandan_t[1]=0;
  904.         fandan_t[2]=0;
  905.         fandan_t[3]=0;
  906.         paifen_t[0]=2;
  907.     paifen_t[1]=1;
  908.         paifen_t[2]=1;
  909.         paifen_t[3]=1;
  910.         liang_t[0]=0;
  911.         liang_t[1]=0;
  912.         liang_t[2]=0;
  913.         liang_t[3]=0;
  914.         egg_size=6;
  915.     break;

  916.   default:
  917.         bird_name="手动";
  918.         fhua_days=1;
  919.         step_days[0]=1;
  920.         step_days[1]=0;
  921.         step_days[2]=0;
  922.         step_days[3]=0;
  923.         wendu_t[0]=375;
  924.         wendu_t[1]=372;
  925.         wendu_t[2]=370;
  926.         wendu_t[3]=368;
  927.         shidu_t[0]=450;
  928.         shidu_t[1]=550;
  929.         shidu_t[2]=600;
  930.         shidu_t[3]=650;
  931.         fandan_t[0]=1;
  932.         fandan_t[1]=1;
  933.         fandan_t[2]=2;
  934.         fandan_t[3]=0;
  935.         paifen_t[0]=4;
  936.     paifen_t[1]=2;
  937.         paifen_t[2]=1;
  938.         paifen_t[3]=1;
  939.         liang_t[0]=0;
  940.         liang_t[1]=0;
  941.         liang_t[2]=1;
  942.         liang_t[3]=1;
  943.         egg_size=6;

  944.   break;
  945.   }
  946. }

  947. void init_val()
  948. {
  949.                   fan_detect_cnt=0;
  950.           u_wet=0;
  951.                   his_wet=0;
  952.           too_wet_flag=0;
  953.          wetfan_cnt=0;
  954.                  wetfan_cnt_t=0;
  955.                   fan_erro_flag=0;
  956.                  fan_erro_cnt=0;
  957.          avr_ph_f=400;

  958.          add_water_cnt=0;
  959.                  wet_high_temp=0;
  960.                  wet_many_flag=0;
  961.                  open_wet_cnt=0;
  962.                  wet_cnt_tj=0;
  963.                  wet_cnt_si=0;
  964.          low_t_cnt=0;
  965.                  high_t_cnt=0;
  966.                  low_wet_cnt=0;
  967.                  high_wet_cnt=0;
  968.                  max_s1_temp=0;
  969.                  max_s2_temp=0;
  970.                  min_s1_temp=500;
  971.                  min_s2_temp=500;
  972.                  max_s1_ph=0;
  973.                  max_s2_ph=0;
  974.                  min_s1_ph=990;
  975.                  min_s2_ph=990;

  976.                  power_erro_cnt=0;
  977.                  bump_erro_cnt=0;
  978.                  fan_erro_cnt=0;
  979.                  date_erro_cnt=0;
  980.                  wet_erro_cnt=0;
  981.                  wet_erro_cnt1=0;
  982.                  wet_short_flag=0;
  983.                  wet_t_cnt=0;
  984.                  crc_erro=0;
  985.                  read_erro=0;
  986.                  crc_erro_S=0;
  987.                  read_erro_S=0;
  988.                  sen_erro_flag=0;
  989.                  sen_erro_flag_S=0;
  990.                  sen_erro_all=0;

  991. }

  992. int main()
  993. {
  994. u32 cnt_t,tt,t3;
  995. u8 w_t,no_w_flag;

  996. //                value humi_val,temp_val;
  997. //       unsigned char error,checksum;
  998.   //      unsigned int wendu,shidu;
  999. //            char  key_num_check=0x04;
  1000.                  
  1001. //                u8 minute_test = 0x00;
  1002.            check_flag = 0;  
  1003.          found_flag = 0;  
  1004.          bit_count = 0;  
  1005.          puls_high_time = 0;  
  1006.          puls_low_time = 0;  

  1007.                  egg_turn_init();
  1008.                  egg_use_flag=0;
  1009.          init_val();
  1010.                   wet_state_flag        =0;
  1011.          wet_flag=0;
  1012.          oled_write_flag=0;
  1013.           disp_cnt=0;

  1014.          init_date_state=0;
  1015.                  date_erro_flag=0;

  1016.      //    water_level=0;
  1017.          fan_cnt=0;
  1018.                  fan_cnt_pre=1;
  1019.          no_power_flag_pre=0;
  1020.                  chip_temp=0;
  1021.                  pid_cnt=0;
  1022.                  PID_Init();
  1023.                  dianchi_flag=0;
  1024.                  egg_erro_flag=0;
  1025.          wet_erro_flag=0;
  1026.                  no_water_flag=0;
  1027.                  get_water_flag=0;
  1028.                  sen_erro_flag=0;
  1029.                  sen_erro_all=0;
  1030.                  sen_erro_flag_S=0;
  1031.          w_first=0;
  1032.                  w_cnt_t1=0;
  1033.          w_cnt_t2=0;
  1034.                  p_cnt_t1=0;
  1035.          p_cnt_t2=0;
  1036.                  lcd_close_flag=0;
  1037.                  disp_mode=0;
  1038.                 LCD_now_state = 0x00;  //液晶初始化显示状态位0
  1039.             RCC_Configuration();
  1040.                   GPIO_Configuration();
  1041.                                             device_init() ;
  1042.                    //DMA_Configuration();
  1043.         ADC_Configuration();
  1044.                 ADC2_Configuration();
  1045.         //        ADC3_Configuration();
  1046.                   EXTI_Configuration();
  1047.                   NVIC_Configuraton();
  1048.                 ADC_ITConfig(ADC2,ADC_IT_AWD,ENABLE);
  1049.                         IWDG_Init(7,2500);                                  //16s
  1050.                         IWDG_Feed();

  1051.                 delay_init(72);
  1052. //                KEY_INIT();
  1053.                 TIMER_INIT();                                          
  1054.                 //GPIO_SetBits(GPIOC,GPIO_Pin_11);                 //选择适配器
  1055.                 //GPIO_ResetBits(GPIOC,GPIO_Pin_10);            //电瓶充电
  1056.         //        Init_DS1302();           
  1057.         LCD_init();       
  1058.                 OLED_Init();                        //初始化OLED  
  1059.                 OLED_Clear()          ;
  1060.                 /*
  1061.                                  GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  1062.        
  1063.                         delay_nms(1000);
  1064.                                         GPIO_ResetBits(GPIOC,GPIO_Pin_0);  */
  1065.                 /*OLED_ChString(0,0,"欢迎中文版本发布");
  1066.                 OLED_ChString(0,2,"中文版本欢迎发布");
  1067.                 OLED_ShowString(0,4,"hello how are",16);
  1068.                 OLED_ShowNum(0,6,123,3,16) ;  */
  1069.                  /*oled_disp_china(0,0,"欢迎中文版本发布");
  1070.                  oled_disp_china(1,1,"中文版本欢迎发");
  1071.                  oled_disp_string(2,2,"hello how are");         */
  1072.                 // oled_disp_num(1,3,123,3);

  1073.         //            LCD_disp_char(2,1,digit[(ta%10)]);
  1074.                 /*OLED_ShowCHinese(72,0,4);//子
  1075.                 OLED_ShowCHinese(90,0,5);//科
  1076.                 OLED_ShowCHinese(108,0,6);//技                */
  1077.         //        while(1);


  1078.                 LCD_BK_ONOFF(1);        //测试
  1079.                 delay_nms(100);
  1080.         //        LCD_BK_ONOFF(0);        //测试
  1081.                 //         LCD_disp_str(0,1,"START");

  1082.                         //        while(1);
  1083.                 /*        GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  1084.        
  1085.                         delay_nms(100000);
  1086.                                         GPIO_ResetBits(GPIOC,GPIO_Pin_0);  */
  1087.             FLASH_Unlock();
  1088.                 Fan_mode = (*(vu8*) (u32)0x08030000);
  1089.         /*        Moto_Runtime = (*(vu8*) (u32)0x0803A800);
  1090.                 Fan1_Opentime = (*(vu8*) (u32)0x0803B000);
  1091.                 Warning_Switch = (*(vu8*) (u32)0x0803B800);
  1092.                 Pump_Runtime = (*(vu8*) (u32)0x0803C000);        */
  1093.                 Moto_Runtime = (*(vu8*) (u32)0x08030800);
  1094.                 Fan1_Opentime = (*(vu8*) (u32)0x08031000);
  1095.                 Warning_Switch = (*(vu8*) (u32)0x08031800);
  1096.                 Pump_Runtime = (*(vu8*) (u32)0x08032000);
  1097.                 Cold_Runtime = (*(vu8*) (u32)0x08032800);
  1098.             Cold_Temp = (*(vu8*) (u32)0x08033000);
  1099.             High_Temp = (*(vu8*) (u32)0x08033800);
  1100.                 Low_Temp = (*(vu8*) (u32)0x08034000);
  1101.                 Set_self_test = (*(vu8*) (u32)0x08034800);
  1102.                 pid_mode= (*(vu8*) (u32)0x08035000);
  1103.                 wet_time= (*(vu8*) (u32)0x08035800);
  1104.                 bird_mode=(*(vu8*) (u32)0x08036000);
  1105.                 th_step=(*(vu8*) (u32)0x08036800);
  1106.             wet_fan_speed=(*(vu8*) (u32)0x08037000);
  1107.                 Set_bird_mode= bird_mode;
  1108.                 Set_wet_time=wet_time;
  1109.                 Set_th_step=th_step;
  1110.                 Set_wet_fan=wet_fan_speed;
  1111.                 Set_pid_mode=pid_mode;
  1112.                 Set_Fan_mode = Fan_mode;
  1113.                 Set_Moto_Runtime = Moto_Runtime;
  1114.                 Set_Fan1_Opentime = Fan1_Opentime;
  1115.                 Set_Warning_Switch =Warning_Switch;
  1116.                 Set_Pump_Runtime = Pump_Runtime;
  1117.                 Set_Cold_Runtime=Cold_Runtime;
  1118.                 Set_Cold_Temp=Cold_Temp;
  1119.                 Set_High_Temp=High_Temp;
  1120.                 Set_Low_Temp =Low_Temp;
  1121.                 start_year = (*(vu8*) (u32)0x0803D000);
  1122.                 start_month = (*(vu8*) (u32)0x0803D002);
  1123.                 start_day = (*(vu8*) (u32)0x0803D004);
  1124.                 start_time_ymd          = (*(vu8*) (u32)0x0803D010);
  1125. //                GPIO_OUT_config();
  1126. //                delay_us(1);
  1127. //        LCD_disp_str(0,1,"TE");
  1128. //                LCD_disp_str(0,2,"RH");

  1129.                 //          LCD_disp_str(0,1,"p1");
  1130.                            PWM_Init();
  1131.                                    TIM2->CCR2 = 0;//0
  1132.                                    TIM2->CCR4 = 0;
  1133.                                    TIM8->CCR1 = 0;
  1134.                                    TIM8->CCR2 = 0;
  1135.                                    TIM8->CCR3 = 0;
  1136.                                    TIM8->CCR4 = 0;
  1137.                 //                 GPIO_SetBits(GPIOA,GPIO_Pin_5);
  1138.         // GPIO_ResetBits(GPIOA,GPIO_Pin_4);
  1139.                  //Moto_Ctrol_Right( );
  1140.                 // moto_goto_start();
  1141.         /*        GPIO_ResetBits(GPIOE,GPIO_Pin_3);
  1142.                 GPIO_ResetBits(GPIOC,GPIO_Pin_3); //关水泵
  1143.            GPIO_SetBits(GPIOE,GPIO_Pin_3);
  1144.                 do {}while(1); */
  1145.                 temp_cal();
  1146.           self_test_over=0;
  1147.        
  1148.                                 OLED_Clear();
  1149.                         oled_disp_china(3,0,"启动");
  1150.                                 delay_nms(2000);
  1151.        
  1152.       self_test();


  1153.           s_connectionreset();//sht10
  1154.            s_connectionreset_S();//sht10
  1155.           s_softreset();
  1156.           s_softreset_S();

  1157.           //Read_THPH_S(wendunum1_S,shidunum1_S);  // 显示温度和湿度
  1158.           //if(        Now_TH_S>max_s2_temp)  max_s2_temp= Now_TH_S;
  1159.           self_test_over=1;
  1160.                 egg_flag=1;
  1161.                 Run_YN=1;
  1162.                 /*        OLED_Clear();
  1163.                         oled_disp_china(3,0,"启动");
  1164.                                 delay_nms(2000);*/

  1165.                          //PWM_Init();
  1166. ///*****************************初始化温度显示区***********************************/
  1167. //        LCD_disp_str(2,1,"TTT.TC");
  1168. //
  1169. ///*****************************初始化湿度显示区***********************************/
  1170. /*        LCD_disp_str(2,2,"RRR.R%");

  1171.                 delay_nms(10);

  1172.                 LCD_clr();
  1173.                 LCD_write_command(0x0C);//显示开,关光标,闪烁  
  1174.                 Read_THPH(wendunum1,shidunum1);  // 显示温度和湿度
  1175.                 Display_0();
  1176.                 delay_nms(500);

  1177.                 Moto_Ctrol_Right();
  1178.                 delay_nms(1000);
  1179.                 Moto_Stop();
  1180.                 delay_nms(1000);  */
  1181.         //        Moto_Ctrol_Left();


  1182.                 /*TEST FOR ds1302*/
  1183.                
  1184.         //                LCD_clr();
  1185.         //                while(1)
  1186.         //        {
  1187. /*                        Date_Read();  //读取当前日期
  1188.                
  1189.                         Display_date(); //显示当前日期
  1190.                         delay_nms(2000);
  1191.                         */
  1192.         /*                do
  1193.                         {
  1194.                         }
  1195.                         while(1);  */
  1196.         //        }          
  1197. //                Date_Display();                    // 显示日期
  1198.                 LCD_now_state = 0x00;
  1199.                 LCD_next_state = 0x00;
  1200.                 wetfan_state=0x00;
  1201.                 hotfan_state=0x00;
  1202.                 LCD_mouse = 0;       

  1203. //                LCD_disp_str(0,2,"  ");          
  1204. //                LCD_disp_str(0,1,"->");
  1205. //                LCD_disp_str(2,1,table_0[0]);
  1206. //                LCD_disp_str(2,2,table_0[1]);
  1207.                 key_num_check_flg = 0x00;

  1208.                 /*****************************************************
  1209.                         初始化显示起始页面       
  1210.                 ******************************************************/
  1211. //           Read_THPH(wendunum1,shidunum1);  // 读取当前温度和湿度
  1212.            Run_days = 1;                 //初始启动默认没启动
  1213.            Run_YN = 1;                         //默认不启动
  1214.            LCD_now_state = 0x00;  //初始化液晶显示状态机状态为0
  1215.            LCD_next_state = 0x00;
  1216.           // Display_0();                         //显示默认页面


  1217.            PID_Check_flg = 0;
  1218.            Display_tp_flag = 0;
  1219.            GPIO_SetBits(GPIOE,GPIO_Pin_3);  //关加湿
  1220.        GPIO_SetBits(GPIOC,GPIO_Pin_3); //关水泵




  1221.                 //        LCD_disp_str(0,1,"p3");
  1222.                 read_new_para();
  1223.         //        if(Set_self_test==2)
  1224.         //        {
  1225.         //        ds18b20_start();
  1226. //                }
  1227.         cnt_wet=0;
  1228.                 cnt_wet_h=0;
  1229.                 s2_cnt=0;
  1230.                 hand_egg_turn=0;
  1231.                 hand_add_water=0;
  1232.         while(1)
  1233.         {
  1234.                           /*s1_cnt= cnt;
  1235.                           if(s1_cnt!=s2_cnt)
  1236.                           {
  1237.                                    Read_THPH_S(wendunum1_S,shidunum1_S);  // 显示温度和湿度
  1238.                              if(        Now_TH_S>max_s2_temp)  max_s2_temp= Now_TH_S;
  1239.                                 s2_cnt= cnt;
  1240.                           }         */
  1241.                            temp_cal();
  1242.                            if(lcd_close_flag==1)
  1243.                            {
  1244.                                     low_t_cnt=0;
  1245.                                                  high_t_cnt=0;
  1246.                                                  low_wet_cnt=0;
  1247.                                                  high_wet_cnt=0;
  1248.                                                  power_erro_cnt=0;
  1249.                                                  bump_erro_cnt=0;
  1250.                                                  fan_erro_cnt=0;
  1251.                                                  add_water_cnt=0;
  1252.                                                  open_wet_cnt=0;
  1253.                                                  max_s1_temp=0;
  1254.                                  max_s2_temp=0;
  1255.                                                  min_s1_temp=500;
  1256.                                  min_s2_temp=500;
  1257.                                                  max_s1_ph=0;
  1258.                                  max_s2_ph=0;
  1259.                                  min_s1_ph=990;
  1260.                                  min_s2_ph=990;
  1261.                                                  fan_erro_cnt=0;
  1262.                                                  wetfan_cnt=0;
  1263.                                                  date_erro_cnt=0;
  1264.                                                  wet_erro_cnt=0;
  1265.                                                  wet_erro_cnt1=0;
  1266.                                                  wet_short_flag=0;
  1267.                                                 // sen_erro_flag=0;
  1268.                                                 // sen_erro_flag_S=0;
  1269.                            }
  1270.                       // if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_7)==0)
  1271.                            //fan_cnt=TIM1->CNT;  //fan_cnt+1;


  1272.                       /*chip_temp =ADC_Filter();

  1273.               Temperature=(1.42-chip_temp*3.3/4096)*1000/4.35 + 25;

  1274.               chip_temp  = Temperature;        */


  1275.                   /*    if(Set_self_test==3)
  1276.                           {
  1277.                      //   power_switch()        ;
  1278.                            }  */
  1279.                              IWDG_Feed();
  1280.                          // shuiben_test();

  1281.                         ///        LCD_disp_str(0,1,"p4");
  1282.                     if(Remote_Rdy)
  1283.                    {
  1284.                         display();
  1285.                    }
  1286.            t3 = (u32)TIM_GetCounter(TIM3);
  1287.                    if(t3>20000 && found_flag==1)
  1288.                    {
  1289.                       GPIO_ResetBits(GPIOC,GPIO_Pin_0); //guan蜂鸣器          
  1290.                    }
  1291.                    if(lcd_close_flag==1)
  1292.                    {
  1293.                     GPIO_ResetBits(GPIOE,GPIO_Pin_4);   //关背光
  1294.                         //        OLED_Init();
  1295.                         //OLED_Display_Off();
  1296.                         //                        OLED_Init();
  1297.                    }
  1298.                    else
  1299.                    {
  1300.                    //OLED_Display_On();
  1301.                    }
  1302.                   


  1303.                   /* if(Set_self_test==2)
  1304.                    {
  1305.                           
  1306.            tt= ds18b20_read();
  1307.                    if(tt!=0)  ds18b20_temp =tt;
  1308.                    } */



  1309.                    if(Run_YN != 0)           //表示系统启动工作,开始加热加温,正常工作
  1310.                    {
  1311.                  // add_water();
  1312.                  //     cnt=2;
  1313.                     //  LCD_disp_char(0,0,digit[cnt%10]);
  1314.                         //        cnt=cnt+1;
  1315.                                                    //fan

  1316.                
  1317.                          /*GPIO_SetBits(GPIOA,GPIO_Pin_7);
  1318.              GPIO_ResetBits(GPIOA,GPIO_Pin_6);
  1319.              GPIO_SetBits(GPIOA,GPIO_Pin_3); */

  1320.                          //fan
  1321.                             //fan_set();
  1322.                      if(LCD_now_state == 0x00)
  1323.                       {
  1324.                                   egg_cold();
  1325.                                           read_new_para();

  1326.                             Set_Input_Day_Num_t=Set_Input_Day_Num;  
  1327.                           }
  1328.                        
  1329.                           IWDG_Feed();

  1330.                
  1331.                         // no_power_flag= GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5);
  1332.                          no_power_flag=power_detect();
  1333.                          if(no_power_flag==1)
  1334.                          {
  1335.                            pw_cnt_t1=cnt;
  1336.                            no_power_flag_pre=1;

  1337.                          }
  1338.                          pw_cnt_t2=cnt;

  1339.                          if(( pw_cnt_t2-pw_cnt_t1)>32)
  1340.                          {
  1341.                            no_power_flag_pre=0;
  1342.                          }
  1343.                          

  1344.                          if(no_power_flag==1 ||  no_power_flag_pre==1)
  1345.                          {
  1346.                            wet_erro_flag=0;
  1347.                            egg_erro_flag=0;
  1348.                            egg_turn_init();
  1349.                            sen_erro_flag=0;
  1350.                            sen_erro_flag_S=0;
  1351.                            sen_erro_all=0;
  1352.                            hand_egg_turn=1;
  1353.                          }
  1354.                         if(no_power_flag==0)
  1355.                         {
  1356.                   //   if(egg_erro_flag==0) egg_turn();
  1357.                         hand_turn();
  1358.                             IWDG_Feed();
  1359.                                 fan_ctrl();

  1360.                 /********************风扇和加湿控制****************************/
  1361.                 //       if(Now_PH>target_Shidu)         //当检测的湿度大于设置湿度+5时则关掉加湿
  1362.                 //           {
  1363.                 //                   GPIO_SetBits(GPIOE,GPIO_Pin_3);          //关加湿

  1364.                 //           }
  1365.                            //        LCD_disp_str(0,1,"p5");
  1366.                            /*if(Now_PH<target_Shidu-10)
  1367.                            {
  1368.                                  if(wet_erro_flag==0)
  1369.                           open_wet();

  1370.                             } */

  1371.                         }
  1372.                         //                LCD_disp_str(0,1,"p6");
  1373.                            IWDG_Feed();
  1374.                 //           Date_Display();
  1375.                         if(Display_tp_flag == 1)
  1376.                         {
  1377.                            if(LCD_now_state == 0x00)           //当前状态在0X00状态下
  1378.                            {
  1379.                                            Display_0();               //刷新显示页面
  1380.                            }
  1381.                            disp_cnt= disp_cnt+1;
  1382.                         }
  1383.                         Display_tp_flag = 0;
  1384.                 //          delay_nms(500);
  1385.                
  1386.                         //   PID_Check_flg = 0x00;
  1387.                   // }
  1388.                         cnt_t=cnt;
  1389.                                 w_t=Pump_Runtime/10;
  1390.                             if(cnt_t%16 == 0x00&&LCD_now_state == 0x00)
  1391.                       {
  1392.                                   if(w_t==1)
  1393.                                   {
  1394.                                     tt=2048;
  1395.                                   }
  1396.                                   else if(w_t==0)
  1397.                                   {
  1398.                                     tt=1024;
  1399.                                   }
  1400.                                   else if(w_t==2)
  1401.                                   {
  1402.                                     tt=512;
  1403.                                   }
  1404.                                   else if(w_t==4)
  1405.                                   {
  1406.                                     tt=8192;
  1407.                                   }
  1408.                                    else if(w_t==5)
  1409.                                   {
  1410.                                     tt=64;
  1411.                                   }
  1412.                                    else
  1413.                                   {
  1414.                                     tt=4096;
  1415.                                   }

  1416.                              if((Now_PH_D<(target_Shidu        -20))&&(cnt_t%512==0)&&(Set_self_test !=8)&&(wet_erro_flag==0))
  1417.                                  {
  1418.                                    wet_erro_flag= add_water(2);
  1419.                                   
  1420.                                  }

  1421.                                 else
  1422.                                 {

  1423.                                            if((wet_erro_flag==0&& cnt_t%tt==0) && (Set_self_test !=8))
  1424.                                            {
  1425.                                             wet_erro_flag= add_water(0);
  1426.                                                    }
  1427.                                  }


  1428.                                   /*if(cnt_t%512==0)
  1429.                                   {
  1430.                                   fan_detect();
  1431.                                   }        */
  1432.                               warning_report();



  1433.                           }

  1434.                           if(hand_add_water==1)
  1435.                           {
  1436.                             wet_erro_flag=0 ;
  1437.                             wet_erro_flag= add_water(0);
  1438.                                 hand_add_water=0;
  1439.                           }
  1440.                    }
  1441.                    else
  1442.                    {
  1443.                       hand_egg_turn=1;
  1444.               init_val();
  1445.                           egg_turn_on=0;
  1446.                           egg_erro_flag=0;
  1447.                              GPIO_SetBits(GPIOC,GPIO_Pin_3); //关水泵
  1448.                   GPIO_SetBits(GPIOE,GPIO_Pin_3); //关加湿
  1449.                            TIM8->CCR1 = 0;                 //关排风
  1450.                            TIM8->CCR2=0;                 //关热风
  1451.                                    TIM8->CCR3=0;                  //关辅热风扇
  1452.                                 TIM8->CCR4=0;                  //关加湿热风扇
  1453.                  // GPIO_ResetBits(GPIOC,GPIO_Pin_1); //关风扇
  1454.                           Close_jiashi_flg = 0x01;                        //没有启动是不会抽水的
  1455.                          // Moto_Stop();
  1456.                              TIM2->CCR3 = 0;
  1457.                                  TIM3->CCR1 = 0;
  1458.                                  TIM3->CCR2 = 0;
  1459.                                  PID_Init();
  1460.                                          GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  1461.                                 if(Display_tp_flag == 1)
  1462.                                 {
  1463. //                                        Read_THPH(wendunum1,shidunum1);  // 显示温度和湿度
  1464.                                     if(LCD_now_state == 0x00)           //当前状态在0X00状态下
  1465.                                     {        //read_new_para();
  1466.                                                    Display_0();               //刷新显示页面
  1467.                                     }
  1468.                                         Display_tp_flag = 0;
  1469.                                         disp_cnt= disp_cnt+1;

  1470.                                 }
  1471.                    }

  1472.                           IWDG_Feed();

  1473.                  }
  1474. }
  1475.         void device_init(void)
  1476. {

  1477.                 GPIO_SetBits(GPIOC,GPIO_Pin_3); //关水泵

  1478.                                 GPIO_SetBits(GPIOE,GPIO_Pin_3); //关湿度

  1479.                         //        GPIO_SetBits(GPIOC,GPIO_Pin_6); //关风扇1
  1480.                                    TIM8->CCR1 = 0;


  1481.                         //        GPIO_SetBits(GPIOC,GPIO_Pin_7); //关风扇2
  1482.                            TIM8->CCR2 = 0;
  1483.                                    TIM8->CCR3=0;                  //关辅热风扇
  1484.                                 TIM8->CCR4=0;                  //关加湿热风扇
  1485.                         GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  1486.      GPIO_SetBits(GPIOA,GPIO_Pin_2); //关风扇2
  1487.         //        delay_nms(1000);                                                  //
  1488.         //        GPIO_ResetBits(GPIOA,GPIO_Pin_2);



  1489.                                 GPIO_SetBits(GPIOB,GPIO_Pin_12); //关高亮LED




  1490.                                    Moto_Stop();

  1491. }
  1492. void IWDG_Init(u8 prer,u16 rlr)
  1493. {
  1494. IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
  1495. IWDG_SetPrescaler(prer);
  1496. IWDG_SetReload(rlr);
  1497. IWDG_ReloadCounter();
  1498. IWDG_Enable();
  1499. }

  1500. void IWDG_Feed(void)
  1501. {
  1502. IWDG_ReloadCounter();
  1503. }
  1504. void time_check()
  1505. {
  1506.                         if( init_date_state==0)
  1507.                         {

  1508.                                   cnt_d=cnt;
  1509.                                   second_d=second;
  1510.                                   minute_d=minute;
  1511.                                   hour_d=hour;
  1512.                         }
  1513.                                   
  1514.                                   if( init_date_state==1)
  1515.                                   {

  1516.                                         if(cnt>cnt_d+8)
  1517.                                         {
  1518.                                          
  1519.                                                 if(        (hour_d==hour&& minute_d==  minute &&second_d==second ) || (minute>        (minute_d+4) ))
  1520.                                                 {
  1521.                                           
  1522.                                                    date_erro_flag=1;
  1523.                                                 }
  1524.                                                 else
  1525.                                                 {
  1526.                                                   date_erro_flag=0;
  1527.                                                 }
  1528.                                           
  1529.                                                  cnt_d=cnt;
  1530.                                                 second_d=second;
  1531.                                         minute_d=minute;
  1532.                                         hour_d=hour;
  1533.                                                 if(date_erro_flag==1)
  1534.                                                 {date_erro_cnt++;}

  1535.                                         }

  1536.                                   }

  1537.                                   init_date_state=1;


  1538. }

  1539. void day_cal(void)
  1540. {
  1541.   char day_time0[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  1542.   char day_time1[12]={31,29,31,30,31,30,31,31,30,31,30,31};
  1543.   int start_day_cnt,now_day_cnt,i,run_day_t;


  1544.               Date_Read();
  1545.                 time_check();

  1546.                 start_day_cnt=0;
  1547.         if(start_year%4==0)
  1548.         {
  1549.           for( i=1;i<start_month;i++)
  1550.           {
  1551.              start_day_cnt=start_day_cnt+day_time1[i-1];
  1552.           }
  1553.           start_day_cnt=start_day_cnt+start_day        ;
  1554.         }
  1555.         else
  1556.         {
  1557.          for( i=1;i<start_month;i++)
  1558.           {
  1559.              start_day_cnt=start_day_cnt+day_time0[i-1];
  1560.           }
  1561.           start_day_cnt=start_day_cnt+start_day        ;
  1562.         }
  1563.                 now_day_cnt=0;
  1564.         if(year%4==0)
  1565.         {
  1566.           for( i=1;i<month;i++)
  1567.           {
  1568.              now_day_cnt=now_day_cnt+day_time1[i-1];
  1569.           }
  1570.           now_day_cnt=now_day_cnt+day        ;
  1571.         }
  1572.         else
  1573.         {
  1574.           for( i=1;i<month;i++)
  1575.           {
  1576.              now_day_cnt=now_day_cnt+day_time0[i-1];
  1577.           }
  1578.           now_day_cnt=now_day_cnt+day        ;
  1579.         }
  1580.         if(year>start_year)
  1581.         {
  1582.            if(start_year%4==0)
  1583.            {
  1584.            now_day_cnt=          now_day_cnt+366;
  1585.            }
  1586.            else
  1587.            {
  1588.                 now_day_cnt=          now_day_cnt+365;
  1589.            }
  1590.         }


  1591. //           if(hour==23 &&        minute ==59 && set_flag==0)
  1592. //           {

  1593. //               set_flag=1;
  1594.               /* if(year> start_year)
  1595.                {
  1596.                 month = month+12;
  1597.                }
  1598.                if(month>start_month)
  1599.                {
  1600.                 day=day+30;
  1601.                }        */

  1602.                //Run_days=now_day_cnt-start_day_cnt+1;
  1603.                    run_day_t=now_day_cnt-start_day_cnt+start_time_ymd;
  1604.                    if(run_day_t<1)
  1605.                    {
  1606.                    Run_days=1;
  1607.                    }
  1608.                    else if(        run_day_t>99)
  1609.                    {
  1610.                    Run_days=99;
  1611.                    }
  1612.                    else
  1613.                    {
  1614.                    Run_days=run_day_t;
  1615.                    }
  1616.                  
  1617. }
  1618. void read_new_para(void)
  1619. {
  1620. int t2,t;               

  1621.                          if(Moto_Runtime>0&&Moto_Runtime<100)
  1622.                          {
  1623.                          t=Moto_Runtime;
  1624.                          }
  1625.                          else
  1626.                          {
  1627.                          t=8;
  1628.                          }       
  1629.                                                   Readflash((u32)0x08039000,1,4,Flash_Read_Days_TH_PH_Turn_All_Set);
  1630.                                                 Flash_Read_Days_TH_PH_Turn_All_Set[4] = Run_days;
  1631.                                 //                ErasePageflash((u32)0x0801f000 ,0);
  1632.                                 //                Writeflash((u32)0x0801f000,Flash_Read_Days_TH_PH_Turn_All_Set,1,5);
  1633.                                         //        Set_Input_Day_Num=Flash_Read_Days_TH_PH_Turn_All_Set[0]        ;
  1634.                                                 Set_Input_Day_Num = Flash_Read_Days_TH_PH_Turn_All_Set[0];//天数
  1635.                                                 if(Set_Input_Day_Num<=0|| Set_Input_Day_Num>99)
  1636.                                                 {
  1637.                                                 Set_Input_Day_Num=1;
  1638.                                                 }
  1639.                                                                         day_cal();


  1640.                                                                         if(Run_days>Set_Input_Day_Num)          Run_days=        Set_Input_Day_Num;
  1641.                                                 Readflash((u32)0x0803E000,1,Set_Input_Day_Num+1,Read_Temp_Flash_Date);
  1642.                                                 Readflash((u32)0x0803E800,1,Set_Input_Day_Num+1,Read_Shidu_Flash_Date);
  1643.                                                 Readflash((u32)0x0803F000,1,Set_Input_Day_Num+1,Read_Fanzhuan_Flash_Date);
  1644.                                                 Readflash((u32)0x0803F800,1,Set_Input_Day_Num+1,Set_fan_runtime);
  1645.                                                 Readflash((u32)0x0803D800,1,Set_Input_Day_Num+1,Set_egg_codetime);
  1646.                                                         if(Set_Cold_Temp>=30&&Set_Cold_Temp<=40)
  1647.                                                         {
  1648.                                                                    t2=Set_Cold_Temp*10;
  1649.                                                         }
  1650.                                                         else
  1651.                                                         {  
  1652.                                                                    t2=350;
  1653.                                                         }
  1654.                                                 if(cold_flag==1)
  1655.                                                 {
  1656.                                                 target_temprature=t2   ;
  1657.                                                 }
  1658.                                                 else
  1659.                                                 {
  1660.                                                 target_temprature =        Read_Temp_Flash_Date[Run_days];
  1661.                                                 }
  1662.                                                 target_Shidu          =        Read_Shidu_Flash_Date[Run_days];
  1663.                                                 target_moto       =        Read_Fanzhuan_Flash_Date[Run_days];
  1664.                                                 target_fan                  = Set_fan_runtime[Run_days];
  1665.                                                 target_cold                  = Set_egg_codetime[Run_days];

  1666.                                                 if((target_moto ==0) || (Set_bird_mode==19||Set_bird_mode==18) ||(no_power_flag==1))
  1667.                                                 {
  1668.                                                   egg_turn_on=0;
  1669.                                                   egg_turn_time=180000;
  1670.                                                 }
  1671.                                                 else
  1672.                                                 {
  1673.                                                    egg_turn_on=1;
  1674.                                                    if(        target_moto <9)
  1675.                                                    {
  1676.                                                      //egg_turn_time=target_moto*180;//1800;
  1677.                                                          egg_turn_time=target_moto*40;//30;//1800;       
  1678.                                                    }
  1679.                                                    else
  1680.                                                    {                                                  
  1681.                                                      egg_turn_time=4;//1800;       
  1682.                                                    }
  1683.                                                 }
  1684.                                                


  1685.         }

  1686.   



  1687. void shuiben_test()
  1688. {
  1689.      do
  1690.          {
  1691.          GPIO_ResetBits(GPIOC,GPIO_Pin_3);
  1692.          delay_nms(1000);
  1693.          IWDG_Feed();
  1694.          GPIO_SetBits(GPIOC,GPIO_Pin_3);
  1695.          delay_nms(10000);
  1696.          }
  1697.          while(1);


  1698. }

  1699. void self_test(void)
  1700. {
  1701.   unsigned char t1,t2;
  1702.   int i,j;
  1703.   u8 erro_flag;
  1704.           i=0;
  1705.           j=0;
  1706. /*          Moto_Ctrol_Right();
  1707.     do
  1708.          {
  1709.            if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==0)
  1710.            {
  1711.            i++         ;
  1712.            }
  1713.            j++;
  1714.                    LCD_disp_char(13,1,digit[(i%1000/100)]);
  1715.         LCD_disp_char(14,1,digit[(i%100/10)]);
  1716.             LCD_disp_char(15,1,digit[(i%10)]);
  1717.                 LCD_disp_char(13,2,digit[(j%1000/100)]);
  1718.         LCD_disp_char(14,2,digit[(j%100/10)]);
  1719.             LCD_disp_char(15,2,digit[(j%10)]);
  1720.                 delay_nms(500);               
  1721.          }
  1722.          while(1) ;                  */
  1723.         LCD_clr();
  1724.     LCD_disp_str(0,1,"   Hello       ");
  1725.         LCD_disp_str(0,2,"H20_DS 20150420");

  1726.         OLED_Clear();
  1727.         oled_disp_china(0,0,"欢迎光临");
  1728.          //        delay_nms(2000);
  1729.         oled_disp_china(0,1,"版本号");
  1730.          //         delay_nms(2000);
  1731.         oled_disp_string(0,2,"9G_v03 20180224");
  1732.                 delay_nms(2000);   
  1733.         //        while(1);
  1734.           
  1735.         if(Set_self_test!=0)
  1736.         {
  1737.             LCD_clr();
  1738.                LCD_disp_str(0,1,"Power is testing     ");
  1739.                 OLED_Clear();
  1740.                 oled_disp_china(1,0,"电源电压自检");


  1741.                 erro_flag=power_detect();
  1742.                 if(erro_flag==1)
  1743.                 {
  1744.                 LCD_disp_str(0,2,"Power is erro       ");
  1745.                 oled_disp_china(0,2,"电源电压自检异常");
  1746.                 }
  1747.                 else
  1748.                 {
  1749.                  LCD_disp_str(0,1,"Power is OK        ");
  1750.                  LCD_disp_str(0,2,"level:       ");
  1751.                
  1752.                  LCD_disp_char(11,2,digit[(power_lever%1000/100)]);
  1753.          LCD_disp_char(12,2,digit[(power_lever%100/10)]);
  1754.                  LCD_disp_str(13,2,".");
  1755.              LCD_disp_char(14,2,digit[(power_lever%10)]);
  1756.                  LCD_disp_str(15,2,"V");
  1757.                  oled_disp_china(0,2,"电源电压自检正常");
  1758.                  oled_disp_china(0,3,"电源电压");
  1759.                  oled_disp_num(8,3,power_lever/10,2);
  1760.                  oled_disp_string(10,3,".");
  1761.                  oled_disp_num(11,3,power_lever%10,1);
  1762.                  oled_disp_string(12,3,"V");

  1763.                 }
  1764.                         delay_nms(2000);

  1765.           IWDG_Feed();
  1766.         LCD_clr();
  1767.        
  1768.         LCD_disp_str(0,1,"pump is testing      ");

  1769.         OLED_Clear();
  1770.                 oled_disp_china(1,0,"水泵加湿自检");

  1771. //        LCD_disp_str(0,2,"wait 20 seconds ");
  1772.              erro_flag=0;          
  1773.            //        GPIO_ResetBits(GPIOE,GPIO_Pin_3);


  1774.                 delay_nms(2000);
  1775.                 erro_flag=add_water(1);       
  1776.         //        GPIO_SetBits(GPIOE,GPIO_Pin_3); //关加湿
  1777.                 if(erro_flag==1)
  1778.                 {
  1779.                 LCD_disp_str(0,2,"pump is bad!     ");

  1780.             oled_disp_china(0,2,"水泵加湿自检异常");
  1781.                 wet_erro_flag=1;
  1782.                 }
  1783.                 else
  1784.                 {
  1785.                 LCD_disp_str(0,2,"pump is ok!      ");
  1786.                 oled_disp_china(0,2,"水泵加湿自检正常");
  1787.                 }
  1788.                 delay_nms(3000);
  1789.                 IWDG_Feed();
  1790.                 /*       
  1791.         LCD_clr();
  1792.         LCD_disp_str(0,1,"wet is testing       ");
  1793. //        LCD_disp_str(0,2,"wait 20 seconds ");
  1794.              erro_flag=0;          
  1795.                    GPIO_ResetBits(GPIOE,GPIO_Pin_3);


  1796.                 delay_nms(2000);
  1797.                 erro_flag=water_check();
  1798.                 GPIO_SetBits(GPIOE,GPIO_Pin_3); //关加湿
  1799.                 if(erro_flag==1)
  1800.                 {
  1801.                 LCD_disp_str(0,2,"Wet is bad!      ");
  1802.                 wet_erro_flag=1;
  1803.                 }
  1804.                 else
  1805.                 {
  1806.                 LCD_disp_str(0,2,"Wet is ok!       ");
  1807.                 }
  1808.                 delay_nms(3000);          */


  1809.              LCD_clr();
  1810.         LCD_disp_str(0,1,"HOT fan is testing ");
  1811.                 LCD_disp_str(0,2,"wait 3 seconds     ");

  1812.                    OLED_Clear();
  1813.                 oled_disp_china(1,0,"加热风扇自检");
  1814.                           //        GPIO_ResetBits(GPIOC,GPIO_Pin_7);
  1815.                 /*        TIM8->CCR2 = 15000;
  1816.                 delay_nms(3000);

  1817.                     TIM8->CCR2 = 0        ;*/

  1818.                 erro_flag=fan_test();
  1819.                 if(erro_flag==1)
  1820.                 {
  1821.                   LCD_disp_str(0,2,"HOT Fan is bad!    ");
  1822.                   oled_disp_china(0,2,"加热风扇自检异常");

  1823.                 }
  1824.                 else
  1825.                 {
  1826.                   LCD_disp_str(0,2,"HOT Fan is OK!     ");
  1827.                   oled_disp_china(0,2,"加热风扇自检正常");

  1828.                 }
  1829.            delay_nms(3000);
  1830.            IWDG_Feed();


  1831.            /*                LCD_clr();
  1832.                   LCD_disp_str(0,1,"AIR fan is testing     ");
  1833.                 LCD_disp_str(0,2,"wait 3 seconds         ");  */
  1834.                 OLED_Clear();
  1835.                 oled_disp_china(1,0,"辅风扇自检");
  1836.                 oled_disp_china(0,2,"运转三秒");
  1837.                 oled_disp_china(0,3,"听是否有辅风声");
  1838.                            //GPIO_ResetBits(GPIOC,GPIO_Pin_6);
  1839.                 TIM8->CCR3 = 20000;
  1840.                 delay_nms(3000);
  1841.                 TIM8->CCR3 = 0;               
  1842.        
  1843.                 IWDG_Feed();
  1844.                 OLED_Clear();
  1845.                 oled_disp_china(1,0,"加湿风扇自检");
  1846.                 oled_disp_china(0,2,"运转三秒");
  1847.                 oled_disp_china(0,3,"听是否有湿风声");
  1848.                            //GPIO_ResetBits(GPIOC,GPIO_Pin_6);
  1849.                 TIM8->CCR4 = 20000;
  1850.                 delay_nms(3000);
  1851.                 TIM8->CCR4 = 0;               
  1852.        
  1853.                 IWDG_Feed();
  1854.                         //        GPIO_SetBits(GPIOC,GPIO_Pin_7); //关风扇2


  1855.      //  GPIO_SetBits(GPIOA,GPIO_Pin_2); //关风扇2
  1856.         //        delay_nms(1000);                                                  //
  1857.         //        GPIO_ResetBits(GPIOA,GPIO_Pin_2);
  1858.                 LCD_clr();
  1859.                   LCD_disp_str(0,1,"AIR fan is testing     ");
  1860.                 LCD_disp_str(0,2,"wait 3 seconds         ");
  1861.                 OLED_Clear();
  1862.                 oled_disp_china(1,0,"排风风扇自检");
  1863.                 oled_disp_china(0,2,"运转三秒");
  1864.                 oled_disp_china(0,3,"听是否有排风声");
  1865.                            //GPIO_ResetBits(GPIOC,GPIO_Pin_6);
  1866.                 TIM8->CCR1 = 20000;
  1867.                 delay_nms(3000);
  1868.                 TIM8->CCR1 = 0;               
  1869.        
  1870.                 IWDG_Feed();
  1871.                         //        GPIO_SetBits(GPIOC,GPIO_Pin_6); //关风扇1               

  1872.           /* LCD_disp_str(0,1," led is testing ");
  1873.                    LCD_disp_str(0,2,"wait 3 seconds ");
  1874.                                   GPIO_ResetBits(GPIOB,GPIO_Pin_12);
  1875.                 delay_nms(3000);

  1876.                                 GPIO_SetBits(GPIOB,GPIO_Pin_12); //关高亮LED   */
  1877.                 LCD_clr();
  1878.                 LCD_disp_str(0,1,"beep is testing    ");
  1879.                 LCD_disp_str(0,2,"wait 3 seconds     ");

  1880.                 OLED_Clear();
  1881.                 oled_disp_china(1,0,"蜂鸣器自检");
  1882.                 oled_disp_china(0,2,"运转三秒");
  1883.                 oled_disp_china(0,3,"听是否鸣叫");
  1884.                 GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  1885.                 delay_nms(3000);
  1886.                 GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  1887.                  IWDG_Feed();
  1888.            LCD_clr();
  1889.            LCD_disp_str(0,1,"egg turn is testing");
  1890.                           OLED_Clear();
  1891.                 oled_disp_china(1,0,"翻蛋蛋盘自检");

  1892.           // LCD_disp_str(0,2,"goto start         ");
  1893.            erro_flag=0;
  1894.            erro_flag= moto_goto_start();
  1895.            if(         erro_flag==0)
  1896.            {
  1897.                 // LCD_disp_str(0,2,"goto end       ");
  1898.                  erro_flag= moto_goto_end();
  1899.                 }
  1900.                 if(erro_flag==0)
  1901.                 {
  1902.         //        LCD_disp_str(0,2,"goto start 2   ");
  1903.             erro_flag=moto_goto_start();
  1904.                 }
  1905.            if(erro_flag==0)
  1906.            {
  1907.            LCD_disp_str(0,1,"egg turn is OK!    ");
  1908.                    oled_disp_china(0,2,"翻蛋蛋盘自检正常");
  1909.            }
  1910.            else
  1911.            {
  1912.            LCD_disp_str(0,1,"egg turn is bad!   ");
  1913.            oled_disp_china(0,2,"翻蛋蛋盘自检异常");
  1914.             egg_erro_flag=1;
  1915.            }
  1916.            delay_nms(3000);

  1917.         }

  1918. }
  1919. u8 moto_goto_start(void)
  1920. {
  1921.     u32 cnt_t1,cnt_t2 ,i,i2 ;
  1922.         u8 erro_flag;

  1923.         if(Set_bird_mode==19 ||Set_bird_mode==18)
  1924.         {
  1925.         erro_flag=0;
  1926.         }
  1927.         else
  1928.         {
  1929.                           LCD_disp_str(0,2,"egg go to start ");
  1930.                           oled_disp_china(0,1,"蛋盘滑板移到起点");
  1931.                           
  1932.                           cnt_t1=cnt;
  1933.                Moto_Ctrol_Right();
  1934.                    Moto_Ctrol_Right_S();
  1935.                    //delay_nms(5000);
  1936.                    erro_flag=0;
  1937.                    do{
  1938.                          i=         GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14);
  1939.                                  if(i==0)
  1940.                                  {
  1941.                                  Moto_Stop();
  1942.                                  }
  1943.                                  if(Set_self_test==3)
  1944.                                  {
  1945.                                  i2=         GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11);
  1946.                                  }
  1947.                                  else
  1948.                                  {
  1949.                                  i2=0;
  1950.                                  }
  1951.                              if(i2==0)
  1952.                                  {
  1953.                                  Moto_Stop_S();
  1954.                                  }
  1955.                                 cnt_t2=cnt;
  1956.                             if((cnt_t2-cnt_t1)>48)
  1957.                             {
  1958.                              erro_flag=1;
  1959.                              break;
  1960.                            }
  1961.                        
  1962.                              IWDG_Feed();
  1963.                                  /*LCD_disp_char(13,1,digit[(i%1000/100)]);
  1964.                  LCD_disp_char(14,1,digit[(i%100/10)]);
  1965.                      LCD_disp_char(15,1,digit[(i%10)]);        */   
  1966.                                 delay_nms(100);

  1967.                    }
  1968.                          while(i==1 || i2==1)        ;

  1969.                         Moto_Stop();
  1970.                         Moto_Stop_S();

  1971.           }

  1972.                         return(erro_flag);


  1973. }

  1974. u8 moto_goto_end(void)
  1975. {
  1976.   int t,i;
  1977.   u32 cnt_t1,cnt_t2;  
  1978.   u8 erro_flag;
  1979.           if(Set_bird_mode==19||Set_bird_mode==18)
  1980.         {
  1981.         erro_flag=0;
  1982.         }
  1983.         else
  1984.         {             LCD_disp_str(0,2,"egg go to end   ");
  1985.                          oled_disp_china(0,1,"蛋盘滑板移到终点");
  1986.                          if(Moto_Runtime>0&&Moto_Runtime<100)
  1987.                          {
  1988.                          t=Moto_Runtime;
  1989.                          }
  1990.                          else
  1991.                          {
  1992.                          t=8;
  1993.                          }
  1994.                              Moto_Ctrol_Left();
  1995.                         Moto_Ctrol_Left_S();
  1996.                          cnt_t1=cnt;

  1997.                          do{
  1998.                           
  1999.                             cnt_t2=cnt;
  2000.                                 delay_nms(100);
  2001.                             IWDG_Feed();

  2002.                                 }
  2003.                         while( cnt_t2-cnt_t1<t)        ;
  2004.                 /*         for(i=0;i<t;i++)
  2005.                    {
  2006.                     delay_nms(1000);
  2007.                         IWDG_Feed();
  2008.                    }        */
  2009.                 //        delay_nms(t);
  2010.                         Moto_Stop();
  2011.                         Moto_Stop_S();
  2012.                         if(Set_self_test==3)
  2013.                         {
  2014.                         if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==0 ||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0)
  2015.                         erro_flag=1;// return(1);
  2016.                         else
  2017.                         erro_flag=0;
  2018.                         }
  2019.                         else
  2020.                         {
  2021.                     if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==0)
  2022.                         erro_flag=1;// return(1);
  2023.                         else
  2024.                         erro_flag=0;
  2025.                         }
  2026.         }


  2027.                          return(erro_flag);


  2028. }          


  2029. /*u8 moto_goto_start(void)
  2030. {
  2031.     u32 cnt_t1,cnt_t2  ;
  2032.         u8 erro_flag;
  2033.           int t,i;   
  2034.                           cnt_t1=cnt;
  2035.                Moto_Ctrol_Right();
  2036.                    erro_flag=0;

  2037.                          if(Moto_Runtime>0&&Moto_Runtime<20)
  2038.                          {
  2039.                          t=Moto_Runtime;
  2040.                          }
  2041.                          else
  2042.                          {
  2043.                          t=8;
  2044.                          }
  2045.             Moto_Ctrol_Right();
  2046.                          for(i=0;i<t;i++)
  2047.                    {
  2048.                     delay_nms(1000);
  2049.                         IWDG_Feed();
  2050.                    }
  2051.                         Moto_Stop();
  2052.                         return(erro_flag);


  2053. }

  2054. u8 moto_goto_end(void)
  2055. {
  2056.   int t,i;   
  2057.                          if(Moto_Runtime>0&&Moto_Runtime<20)
  2058.                          {
  2059.                          t=Moto_Runtime;
  2060.                          }
  2061.                          else
  2062.                          {
  2063.                          t=8;
  2064.                          }
  2065.                              Moto_Ctrol_Left();
  2066.                          for(i=0;i<t;i++)
  2067.                    {
  2068.                     delay_nms(1000);
  2069.                         IWDG_Feed();
  2070.                    }
  2071.                        
  2072.                         Moto_Stop();
  2073.                 //        if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==0)
  2074.                 //         return(1);
  2075.                 //        else
  2076.                          return(0);
  2077. }           */

  2078. u8 power_detect()
  2079. {
  2080.   u16 t1,t2;
  2081.   float t3;
  2082.           // adcx=ADC_Get_aveg(ADC_Channel_1,10);
  2083. //temp=(float)adcx*(3.3/4096);
  2084.          // power_lever=(ADC_GetConversionValue(ADC2)*3.3)*110/4096+10;
  2085.          t1=ADC_Get_aveg(ADC_Channel_17,10);

  2086.          t2=ADC_Get_aveg(ADC_Channel_14,10);
  2087.          t3=  t2*11*12/t1;
  2088.          power_lever=(int)t3;
  2089.           if(power_lever>380|| power_lever<100)
  2090.           {
  2091.             dianchi_flag=0;
  2092.             return (1);
  2093.           }
  2094.           else
  2095.           {
  2096.                 if(power_lever<170)
  2097.                 {
  2098.                   dianchi_flag=1;
  2099.         /*          if(power_lever>=210)
  2100.                   {
  2101.                   dianchi_val=100;
  2102.                   }
  2103.                   else if(power_lever>=203 && power_lever<210 )
  2104.                   {
  2105.                   dianchi_val=90;
  2106.                   }
  2107.                   else if(power_lever>=199 && power_lever<203 )
  2108.                   {
  2109.                   dianchi_val=80;
  2110.                   }
  2111.                   else if(power_lever>=196 && power_lever<199 )
  2112.                   {
  2113.                   dianchi_val=70;
  2114.                   }
  2115.                   else if(power_lever>=193 && power_lever<196 )
  2116.                   {
  2117.                   dianchi_val=60;
  2118.                   }
  2119.                   else if(power_lever>=191 && power_lever<193 )
  2120.                   {
  2121.                   dianchi_val=50;
  2122.                   }
  2123.                   else if(power_lever>=189 && power_lever<191 )*/
  2124.           if(power_lever>=179 && power_lever<170)
  2125.                   {
  2126.                   dianchi_val=40;
  2127.                   }
  2128.                   else if(power_lever>=168 && power_lever<169 )
  2129.                   {
  2130.                   dianchi_val=30;
  2131.                   }
  2132.                   else if(power_lever>=167 && power_lever<168 )
  2133.                   {
  2134.                   dianchi_val=20;
  2135.                   }
  2136.                   else if(power_lever>=164 && power_lever<167 )
  2137.                   {
  2138.                   dianchi_val=10;
  2139.                   }
  2140.                   else if(power_lever>=152 && power_lever<164 )
  2141.                   {
  2142.                   dianchi_val=5;
  2143.                   }
  2144.                   else
  2145.                   {
  2146.                   dianchi_val=0;
  2147.                   }
  2148.                 }
  2149.                 else
  2150.                 {
  2151.                   dianchi_flag=0;
  2152.                 }
  2153.             return(0);
  2154.           }
  2155. }

  2156. /*u8 water_detect()
  2157. {
  2158.           water_lever=(ADC_GetConversionValue(ADC3)*3.3)*10/4096;
  2159.           if(water_lever<10)
  2160.           {
  2161.             return (0);
  2162.           }
  2163.           else
  2164.           {
  2165.             return(1);
  2166.           }
  2167. }          */




  2168. u8 fan_test()
  2169. {
  2170. u32 t1,t2;

  2171.          // t1=  TIM_GetCounter(TIM1);
  2172.          TIM_SetCounter(TIM1, 0);
  2173.         TIM8->CCR2 = 20000;
  2174.                 delay_nms(2000);  
  2175.         TIM8->CCR2 = 0        ;
  2176.           t2= (u32) TIM_GetCounter(TIM1);
  2177.           //if(t2==t1&&(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_7)==1))
  2178.            if(t2<20)
  2179.           {
  2180.             return(1);
  2181.           }
  2182.           else
  2183.           {
  2184.             return(0);
  2185.           }
  2186.          TIM_SetCounter(TIM1, 0);  
  2187. }



  2188. /*u8 egg_turn()
  2189. {
  2190.   u8 erro_flag;
  2191.     erro_flag=0;

  2192.           if(Set_bird_mode==19||Set_bird_mode==18)
  2193.         {
  2194.         erro_flag=0;
  2195.         }
  2196.         else
  2197.         {
  2198.                   if(((target_moto!=0)&&(hour % target_moto==0) && (minute==0) && (turn_flag==0))||(hand_egg_turn==1))
  2199.                           {
  2200.                              turn_flag =1;
  2201.                              if(egg_flag==0)
  2202.                             {
  2203.                                      erro_flag=moto_goto_start();
  2204.                                          egg_flag=1;
  2205.                                     egg_erro_flag=         erro_flag;
  2206.                             }
  2207.                             else                          
  2208.                             {
  2209.                                      erro_flag=  moto_goto_end();
  2210.                                           egg_flag=0;
  2211.                                       egg_erro_flag=         erro_flag;
  2212.                              }
  2213.                                 hand_egg_turn=0;
  2214.                           }
  2215.                   if(minute!=0) turn_flag=0;
  2216.         }

  2217.   return(erro_flag);

  2218. } */

  2219. void hand_turn()
  2220. {
  2221.   u8 erro_flag;
  2222.     erro_flag=0;

  2223.           if(Set_bird_mode==19||Set_bird_mode==18)
  2224.         {
  2225.         egg_erro_flag=0;
  2226.         }
  2227.         else
  2228.         {
  2229.                   if(hand_egg_turn==1&& egg_erro_flag==0)
  2230.                           {
  2231.                                         egg_use_flag=1;
  2232.                                      erro_flag=moto_goto_start();

  2233.                                     egg_erro_flag=         erro_flag;

  2234.                                      erro_flag=  moto_goto_end();

  2235.                                       egg_erro_flag=         erro_flag;

  2236.                                         erro_flag=moto_goto_start();

  2237.                                     egg_erro_flag=         erro_flag;


  2238.                                         egg_turn_init();
  2239.                                         egg_use_flag=0;
  2240.                              }
  2241.                 hand_egg_turn=0;


  2242.         }



  2243. }
  2244. void fan_ctrl(void)
  2245. {
  2246. int ph_t;
  2247.   int fan_mode_air,air_fan_speed;

  2248. fan_mode_air=Fan_mode%100/10;
  2249.   if(fan_mode_air>=0&&fan_mode_air<=8)
  2250. {
  2251. air_fan_speed=20000-2000*fan_mode_air;
  2252. }       
  2253. else //(Fan_mode==9)
  2254. {
  2255. air_fan_speed=4000;
  2256. }

  2257. if(Now_PH_D <target_Shidu+20)
  2258. {
  2259.   wet_t_cnt=cnt;
  2260. }


  2261. switch(wetfan_state)
  2262. {case 0x00:
  2263.   // if (Now_PH_D>(target_Shidu +wet_time*10)||(avr_ph>target_Shidu+20))
  2264.   if (Now_PH_D>(target_Shidu +wet_time*10)||(cnt>wet_t_cnt+120))
  2265.         wetfan_state=0x01;
  2266.    else
  2267.     wetfan_state=0x00;
  2268.    break;
  2269. case 0x01:
  2270.    if (Now_PH_D<=target_Shidu +10 )
  2271.         wetfan_state=0x00;
  2272.    else
  2273.     wetfan_state=0x01;
  2274.    break;
  2275. default:
  2276.    wetfan_state=0x00;
  2277.    break;
  2278. }

  2279. switch(hotfan_state)
  2280. {case 0x00:
  2281.    if (Now_TH_D>(target_temprature+5))
  2282.         hotfan_state=0x01;
  2283.    else
  2284.     hotfan_state=0x00;
  2285.    break;
  2286. case 0x01:
  2287.    if (Now_TH_D<=target_temprature )
  2288.         {hotfan_state=0x02;
  2289.         hot_cnt=cnt;
  2290.         }
  2291.    else
  2292.     hotfan_state=0x01;
  2293.    break;
  2294. case 0x02:
  2295.    if (Now_TH_D>(target_temprature+20))
  2296.    {
  2297.    hotfan_state=0x01;
  2298.    }
  2299.    else if (cnt>(hot_cnt+360) )
  2300.        
  2301.         {
  2302.         hotfan_state=0x00;
  2303.         }
  2304.    else
  2305.     hotfan_state=0x02;
  2306. break;
  2307. default:
  2308.    hotfan_state=0x00;
  2309.    break;
  2310. }

  2311. /*if(avr_ph>target_Shidu+20)
  2312. {
  2313.    ph_t=0;
  2314. }
  2315. else
  2316. {
  2317.    ph_t=wet_time*10;
  2318. } */
  2319. if(hotfan_state==0x01)
  2320. {
  2321.    wet_high_temp=1;
  2322. }
  2323. else
  2324. {
  2325.    wet_high_temp=0;
  2326. }       

  2327. if(cold_flag==0)
  2328. {
  2329. //        if((Now_TH>(target_temprature+5)) || (Now_PH_D>(target_Shidu +  ph_t)))
  2330.    if((hotfan_state==0x01) || (wetfan_state==0x01))
  2331.                 {
  2332.                   TIM8->CCR1 = air_fan_speed;//20000;
  2333.                   fan_open_flag=1;
  2334.                 }
  2335.         else if((target_fan!=0)&&(hour % target_fan==0))
  2336.         {          if(minute>=1&& minute<=Set_Fan1_Opentime)
  2337.           {
  2338.                    TIM8->CCR1 =air_fan_speed;// 20000;
  2339.                    fan_open_flag=1;
  2340.                   }
  2341.                 else
  2342.                 {
  2343.                 //delay_nms(3000);
  2344.                 TIM8->CCR1 = 0;
  2345.                 fan_open_flag=0;
  2346.                 }
  2347.         }
  2348.         else
  2349.         {
  2350.                   TIM8->CCR1 = 0;
  2351.                   fan_open_flag=0;
  2352.         }
  2353. }
  2354. else
  2355. {
  2356.    TIM8->CCR1 = air_fan_speed;//20000;
  2357.    fan_open_flag=1;
  2358. }
  2359. }

  2360. void egg_cold(void)
  2361. {
  2362. int t,t2;


  2363. if((target_cold!=0))
  2364. {            t=24/target_cold;
  2365.         
  2366.                 if(hour%t==0)
  2367.                 {
  2368.            if(minute>=1&& minute<=Set_Cold_Runtime)
  2369.            {

  2370.                        // target_temprature =t2 ;
  2371.                                 //TIM8->CCR1 = 20000;
  2372.                                 cold_flag=1;
  2373.                         }
  2374.                         else
  2375.                         {
  2376.                                 //TIM8->CCR1 = 0;
  2377.                                 cold_flag=0;
  2378.                         }
  2379.                 }
  2380.                 else
  2381.             {
  2382.                                 //TIM8->CCR1 = 0;
  2383.                                 cold_flag=0;
  2384.                 }

  2385. }
  2386. else
  2387. {
  2388.         //TIM8->CCR1 = 0;
  2389.         cold_flag=0;
  2390. }
  2391. }
  2392. u8 add_water(u8 init)
  2393. {
  2394.   u16 i;
  2395.   u8 erro_flag,water_flag,key_t;
  2396.   u8 t;
  2397.   int        delay_t        ;

  2398.    if(Set_self_test==9)
  2399.    {
  2400.      erro_flag=0;
  2401.        
  2402.    }
  2403.    else
  2404.    {
  2405.         break_flag=0;
  2406.                 erro_flag=0;

  2407.            if(init==2)
  2408.           {
  2409.                 wet_flag=1;
  2410.                 GPIO_ResetBits(GPIOE,GPIO_Pin_3);                //开加湿
  2411.                 oled_disp_china(0,2,"加湿自检");
  2412.                            delay_nms(1000);
  2413.                      IWDG_Feed();
  2414.                      water_flag=water_check();

  2415.                         GPIO_SetBits(GPIOE,GPIO_Pin_3);   //关加湿器
  2416.                 wet_flag=0;
  2417.                 if(water_flag==0)
  2418.                 {
  2419.                           return( erro_flag);
  2420.                 }


  2421.           }

  2422.                 wet_flag=1;
  2423.                 GPIO_ResetBits(GPIOE,GPIO_Pin_3);                //开加湿



  2424.                 LCD_disp_str(0,2,"add water step1  ");
  2425.                 oled_disp_china(0,2,"水泵加水第一步骤");
  2426.                 GPIO_ResetBits(GPIOC,GPIO_Pin_3);

  2427. //                do
  2428.           if(init==1)
  2429.                   {
  2430.                      delay_t=55;
  2431.                   }
  2432.                   else
  2433.                   {
  2434.                      delay_t=15;
  2435.                   }
  2436.               for(i=0;i<delay_t;i++)
  2437.              {
  2438.         //          if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)==1) break;
  2439.                      delay_nms(1000);
  2440.                      IWDG_Feed();
  2441.                          water_flag=water_check();
  2442.                         // key_t=Remote_Process();
  2443.                         // if(key_t==0xC2)  break_flag=1;
  2444.                // if(        GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==0)
  2445.                      if(water_flag==0 ||(Now_PH_D>900 && init==0))
  2446.                  {
  2447.                    erro_flag=0;
  2448.                     break;
  2449.                  }
  2450.                  erro_flag=1;
  2451.                 }
  2452.     //    while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==1)          ;
  2453.             GPIO_SetBits(GPIOE,GPIO_Pin_3);   //关加湿器
  2454.             wet_flag=0;
  2455.             LCD_disp_str(0,2,"add water step2  ");
  2456.                 oled_disp_china(0,2,"水泵加水第二步骤");

  2457.                 /*if(Pump_Runtime>0&&Pump_Runtime<60)
  2458.                 {
  2459.                 t=Pump_Runtime;
  2460.                 }
  2461.                 else
  2462.                 {
  2463.                 t=12;
  2464.                 }        */
  2465.                 t=Pump_Runtime%10;
  2466.                 //if(init==1)        t=t*2;
  2467.                 IWDG_Feed();
  2468.                 if(         erro_flag==0)
  2469.                 {
  2470.                    for(i=0;i<t;i++)
  2471.                    {
  2472.                     if(Now_PH_D>900 && init==0)
  2473.                         {
  2474.                          break;
  2475.                         }
  2476.                     delay_nms(1000);
  2477.                         IWDG_Feed();
  2478.                        
  2479.                    }
  2480.                 }
  2481.                 IWDG_Feed();
  2482.                 GPIO_SetBits(GPIOC,GPIO_Pin_3); //关水泵
  2483.        
  2484.           }
  2485.            add_water_cnt++;
  2486.                 return( erro_flag);
  2487.        


  2488. }




  2489. /*u8 open_wet(void)
  2490. {
  2491.     u8 erro_flag;
  2492.         int i,t;
  2493.               IWDG_Feed();
  2494.                 erro_flag=0;
  2495.                 w_cnt_t2=cnt;

  2496.    if(Set_self_test==9)
  2497.    {
  2498.       wet_erro_flag=0;
  2499.           if(w_cnt_t2-w_cnt_t1>1800)
  2500.           {
  2501.             w_cnt_t1=cnt;
  2502.                 erro_flag=add_water();

  2503.           }

  2504.    }
  2505.    else
  2506.    {
  2507.           no_water_flag=        water_check()   ;
  2508.                                  if(wet_erro_flag ==0)
  2509.                                  {


  2510.                                          if(no_water_flag==1)
  2511.                                             {
  2512.                                                      
  2513.                                       erro_flag=add_water();
  2514.                                                           wet_erro_flag= erro_flag;
  2515.                                                           add_water_cnt++;

  2516.                                 }                        
  2517.                
  2518.                                 }         


  2519.         }
  2520.            return( erro_flag);
  2521. }  
  2522. */
  2523. void warning_report(void)
  2524. {
  2525. unsigned char wet_warn_s,egg_warn_s,sen_warn_s,hight_warn_s,power_warn_s,lowt_warn_s,fan_warn_s,low_wet_s;
  2526. int t;
  2527. int delta_tt;
  2528. u8 fan_flag,power_flag;
  2529. wet_warn_s=Warning_Switch&0x01;
  2530. egg_warn_s=(Warning_Switch&0x02)>>1;
  2531. sen_warn_s=(Warning_Switch&0x04)>>2;
  2532. hight_warn_s=(Warning_Switch&0x08)>>3;
  2533. lowt_warn_s=(Warning_Switch&0x10)>>4;
  2534. power_warn_s=(Warning_Switch&0x20)>>5;
  2535. fan_warn_s=(Warning_Switch&0x40)>>6;
  2536. low_wet_s= (Warning_Switch&0x80)>>7;

  2537.   if(wet_erro_flag==1&&wet_warn_s==1)
  2538.   {                        LCD_clr();
  2539.                 GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2540.                  LCD_disp_str(0,1,"Erro No:  000   ");
  2541.             LCD_disp_str(0,2,"pump  is bad!");

  2542.                 OLED_Clear();
  2543.                 oled_disp_china(0,0,"错误编号");
  2544.                 oled_disp_string(8,0,":000");
  2545.                 oled_disp_china(0,1,"水泵加湿异常");
  2546.                 delay_nms(1000);
  2547.                 GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2548.                          bump_erro_cnt++;

  2549.   }
  2550.   IWDG_Feed();
  2551.     if(wet_short_flag==1&&wet_warn_s==1)
  2552.   {                        LCD_clr();
  2553.                 GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2554.                  /*LCD_disp_str(0,1,"Erro No:  000   ");
  2555.             LCD_disp_str(0,2,"pump  is bad!"); */

  2556.                 OLED_Clear();
  2557.                 oled_disp_china(0,0,"错误编号");
  2558.                 oled_disp_string(8,0,":008");
  2559.                 oled_disp_china(0,1,"加湿异常");
  2560.                 delay_nms(1000);
  2561.                 GPIO_ResetBits(GPIOC,GPIO_Pin_0);

  2562.   }
  2563.   IWDG_Feed();
  2564.   if(egg_erro_flag==1&&egg_warn_s==1)
  2565.   {                        LCD_clr();
  2566.          
  2567.         GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2568.                  LCD_disp_str(0,1,"Erro No:  001    ");
  2569.                 LCD_disp_str(0,2,"egg turn is bad!");

  2570.                 OLED_Clear();
  2571.                 oled_disp_china(0,0,"错误编号");
  2572.                 oled_disp_string(8,0,":001");
  2573.                 oled_disp_china(0,1,"翻蛋蛋盘异常");
  2574.                 delay_nms(1000);
  2575.                 GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2576.   }
  2577.   IWDG_Feed();
  2578.   if(sen_erro_flag>100&&sen_warn_s==1)
  2579.   {                //if(        sen_erro_flag>100)
  2580.                
  2581.         {
  2582.                  GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2583.         //         Run_YN=0;
  2584.                 }
  2585.                         LCD_clr();
  2586.                  LCD_disp_str(0,1,"Erro No:  002    ");
  2587.                 LCD_disp_str(0,2,"sensor is bad!         ");
  2588.                                  OLED_Clear();
  2589.                 oled_disp_china(0,0,"错误编号");
  2590.                 oled_disp_string(8,0,":002");
  2591.                 oled_disp_china(0,1,"主传感器探头异常");
  2592.                 oled_disp_num(0,2,sen_erro_flag,6);
  2593.             /*LCD_disp_char(15,2,digit[(sen_erro_flag%10)]);
  2594.             LCD_disp_char(14,2,digit[(sen_erro_flag%100/10)]);
  2595.                 LCD_disp_char(13,2,digit[(sen_erro_flag%1000/100)]);
  2596.                 LCD_disp_char(12,2,digit[(sen_erro_flag%10000/1000)]);*/
  2597.                 delay_nms(1000);
  2598.                 GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2599.   }
  2600.    IWDG_Feed();
  2601.    

  2602.      if(sen_erro_flag_S>100&&sen_warn_s==1)
  2603.   {                //if(        sen_erro_flag>100)
  2604.                
  2605.         {
  2606.                  GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2607.         //         Run_YN=0;
  2608.                 }
  2609.                         LCD_clr();
  2610.                  LCD_disp_str(0,1,"Erro No:  002    ");
  2611.                 LCD_disp_str(0,2,"sensor is bad!         ");
  2612.                                  OLED_Clear();
  2613.                 oled_disp_china(0,0,"错误编号");
  2614.                 oled_disp_string(8,0,":002");
  2615.                 oled_disp_china(0,1,"辅传感器探头异常");
  2616.                 oled_disp_num(0,2,sen_erro_flag_S,6);
  2617.             /*LCD_disp_char(15,2,digit[(sen_erro_flag%10)]);
  2618.             LCD_disp_char(14,2,digit[(sen_erro_flag%100/10)]);
  2619.                 LCD_disp_char(13,2,digit[(sen_erro_flag%1000/100)]);
  2620.                 LCD_disp_char(12,2,digit[(sen_erro_flag%10000/1000)]);*/
  2621.                 delay_nms(1000);
  2622.                 GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2623.   }
  2624.    IWDG_Feed();
  2625.    if(date_erro_flag==1&&sen_warn_s==1)
  2626.    {

  2627.                  GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器


  2628.                         LCD_clr();
  2629.                  LCD_disp_str(0,1,"Erro No:  003    ");
  2630.                 LCD_disp_str(0,2,"sensor is bad!         ");
  2631.                
  2632.                 OLED_Clear();
  2633.                 oled_disp_china(0,0,"错误编号");
  2634.                 oled_disp_string(8,0,":008");
  2635.                 oled_disp_china(0,1,"时间错误");
  2636.                 oled_disp_china(0,2,"设置时间");
  2637.                 //oled_disp_num(0,2,sen_erro_flag_S,6);

  2638.                 delay_nms(1000);
  2639.                 GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2640.    }
  2641.          IWDG_Feed();  

  2642.    if(Set_High_Temp>=10&& Set_High_Temp<=50)
  2643.    {
  2644.      t= Set_High_Temp*10;
  2645.    }
  2646.    else
  2647.    {
  2648.      t=400;
  2649.    }
  2650.    
  2651.       IWDG_Feed();
  2652.   if(Now_TH_D>t&&hight_warn_s==1)
  2653.   {
  2654.        GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2655.            if( Now_TH_D>400)
  2656.            {         LCD_clr();
  2657.             // LCD_disp_str(0,1,"the temperature is      ");
  2658.                  LCD_disp_str(0,1,"Warning No:  103    ");
  2659.                  LCD_disp_str(0,2,"it is too hot!!!    ");
  2660.                                  OLED_Clear();
  2661.                 oled_disp_china(0,0,"报警编号");
  2662.                 oled_disp_string(8,0,":103");
  2663.                 oled_disp_china(0,1,"温度太高");
  2664.            }
  2665.            /*if( wendunum1<350)
  2666.            {
  2667.              LCD_disp_str(0,1,"the temperature is      ");
  2668.                  LCD_disp_str(0,2,"too low    !!!          ");
  2669.            }  */
  2670.            delay_nms(200);
  2671.            GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2672.            delay_nms(1000);                        
  2673.                  //high_t_cnt++;
  2674.        
  2675.                  


  2676.   }
  2677.      IWDG_Feed();
  2678.     if(Set_Low_Temp>=5&& Set_Low_Temp<=40)
  2679.    {
  2680.      t= Set_Low_Temp*10;
  2681.    }
  2682.    else
  2683.    {
  2684.      t=340;
  2685.    }
  2686.   if(Now_TH_D<t && lowt_warn_s==1)
  2687.   {
  2688.        GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2689.            if( Now_TH_D<t)
  2690.            {          LCD_clr();
  2691.               LCD_disp_str(0,1,"Warning No:  104    ");
  2692.                    LCD_disp_str(0,2,"it is too cold!");
  2693.                                 OLED_Clear();
  2694.                                   oled_disp_china(0,0,"报警编号");
  2695.                 oled_disp_string(8,0,":104");
  2696.                 oled_disp_china(0,1,"温度太低");

  2697.            }
  2698.            /*if( wendunum1<350)
  2699.            {
  2700.              LCD_disp_str(0,1,"the temperature is      ");
  2701.                  LCD_disp_str(0,2,"too low    !!!          ");
  2702.            }  */
  2703.            delay_nms(200);
  2704.            GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2705.                       delay_nms(1000);
  2706.           
  2707.   }
  2708.      IWDG_Feed();
  2709.          delta_tt=abs(Now_TH-Now_TH_S);

  2710.          if(Set_bird_mode  ==19||Set_bird_mode==18)
  2711.          {
  2712.            if(delta_tt>30 && lowt_warn_s==1)
  2713.                   {
  2714.        GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2715.                                 OLED_Clear();
  2716.                                   oled_disp_china(0,0,"报警编号");
  2717.                 oled_disp_string(8,0,":120");
  2718.                 oled_disp_china(0,1,"温差太大");


  2719.            delay_nms(200);
  2720.            GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2721.                       delay_nms(1000);
  2722.           
  2723.           }
  2724.         }
  2725.         else
  2726.     {
  2727.            if(delta_tt>10 && lowt_warn_s==1)
  2728.                   {
  2729.        GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2730.                                 OLED_Clear();
  2731.                                   oled_disp_china(0,0,"报警编号");
  2732.                 oled_disp_string(8,0,":120");
  2733.                 oled_disp_china(0,1,"温差太大");


  2734.            delay_nms(200);
  2735.            GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2736.                       delay_nms(1000);
  2737.           
  2738.           }
  2739.         }

  2740.         IWDG_Feed();
  2741.         power_flag= power_detect();
  2742. //if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==1&&power_warn_s==1)
  2743.   if(power_flag==1&&power_warn_s==1)
  2744.   {          
  2745.        GPIO_ResetBits(GPIOE,GPIO_Pin_4);   //关背光
  2746.            GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2747.           
  2748.              LCD_disp_str(0,1,"Erro No:  005    ");
  2749.                
  2750.           
  2751.            LCD_disp_str(0,2,"Power is off!  ");
  2752.                 OLED_Clear();
  2753.                    oled_disp_china(0,0,"错误编号");
  2754.                 oled_disp_string(8,0,":005");
  2755.                 oled_disp_china(0,1,"电源掉电");

  2756.              delay_nms(1000);
  2757.            GPIO_ResetBits(GPIOC,GPIO_Pin_0);



  2758.                             power_erro_cnt++;

  2759.   }
  2760.   else if(dianchi_flag==1&&power_warn_s==1)
  2761.   {
  2762.               GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器

  2763.                 OLED_Clear();
  2764.                    oled_disp_china(0,0,"报警编号");
  2765.                 oled_disp_string(8,0,":110");
  2766.                 oled_disp_china(0,1,"电池");

  2767.              delay_nms(200);
  2768.            GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2769.            delay_nms(1000);
  2770.   }
  2771.   else
  2772.   {          
  2773.      GPIO_SetBits(GPIOE,GPIO_Pin_4);
  2774.   }
  2775. // fan_flag=fan_detect();
  2776.     IWDG_Feed();
  2777.   //if((fan_cnt==fan_cnt_pre &&(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_7)==1) ) &&  fan_warn_s==1)
  2778.    //if((fan_cnt==fan_cnt_pre ) &&  fan_warn_s==1)
  2779.    if((fan_erro_flag==1 ) &&  fan_warn_s==1)
  2780.   {
  2781.                GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器

  2782.              LCD_disp_str(0,1,"Erro No:  006    ");
  2783.                  LCD_disp_str(0,2,"HOT fan is bad! ");
  2784.                     OLED_Clear();
  2785.                    oled_disp_china(0,0,"错误编号");
  2786.                 oled_disp_string(8,0,":006");
  2787.                 oled_disp_china(0,1,"加热风扇异常");

  2788.            delay_nms(1000);
  2789.            GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2790.                   
  2791.                  fan_erro_cnt++;

  2792.   }
  2793.      IWDG_Feed();
  2794.   if( low_wet_s==1 )
  2795.   {
  2796.     if( (Now_PH_D<target_Shidu        -50)  &&( fan_open_flag==0))
  2797.         {          GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2798.                   LCD_disp_str(0,1,"Warning No:  107    ");
  2799.                    LCD_disp_str(0,2,"wet is too low!     ");

  2800.                                   OLED_Clear();
  2801.                    oled_disp_china(0,0,"报警编号");
  2802.                 oled_disp_string(8,0,":107");
  2803.                 oled_disp_china(0,1,"湿度太低");
  2804.                   
  2805.            delay_nms(200);
  2806.            GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2807.                                  delay_nms(1000);
  2808.                     low_wet_cnt++;
  2809.         }
  2810.         else if( Now_PH_D>target_Shidu+70)
  2811.         {          GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2812.                   LCD_disp_str(0,1,"Warning No:  108    ");
  2813.                    LCD_disp_str(0,2,"wet is too high!     ");
  2814.                                              OLED_Clear();
  2815.                                 oled_disp_china(0,0,"报警编号");
  2816.                 oled_disp_string(8,0,":108");
  2817.                 oled_disp_china(0,1,"湿度太高");
  2818.               delay_nms(200);
  2819.                GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2820.                                          delay_nms(1000);
  2821.                    high_wet_cnt++;
  2822.         }
  2823.          IWDG_Feed();
  2824.         if((wet_many_flag==1) && (fan_open_flag==0))
  2825.         {
  2826.              GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2827.             OLED_Clear();
  2828.                 oled_disp_china(0,0,"报警编号");
  2829.                 oled_disp_string(8,0,":109");
  2830.                 oled_disp_china(0,1,"加湿工作时间太长");
  2831.             delay_nms(200);
  2832.             GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2833.                 delay_nms(1000);
  2834.         }
  2835.         IWDG_Feed();

  2836.                 if(too_wet_flag==1)
  2837.         {
  2838.              GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
  2839.             OLED_Clear();
  2840.                 oled_disp_china(0,0,"报警编号");
  2841.                 oled_disp_string(8,0,":112");
  2842.                 oled_disp_china(0,1,"排风时间太长");
  2843.             delay_nms(200);
  2844.             GPIO_ResetBits(GPIOC,GPIO_Pin_0);
  2845.                 delay_nms(1000);
  2846.         }
  2847.         IWDG_Feed();
  2848.   }
  2849.    
  2850. }
  2851. void RCC_Configuration(void)//时钟配置
  2852. {  
  2853.         ErrorStatus HSEStartUpStatus;        
  2854.         RCC_DeInit();         //将外设 RCC寄存器重设为缺省值      
  2855.         RCC_HSEConfig(RCC_HSE_ON); //设置外部高速晶振(HSE)      
  2856.         HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待 HSE 起振     
  2857.         if(HSEStartUpStatus == SUCCESS)   
  2858.                 {        
  2859.                         FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  //预取指缓存使能        
  2860.                         //设置代码延时值   
  2861.                          //FLASH_Latency_2  2 延时周期      
  2862.                          FLASH_SetLatency(FLASH_Latency_2);         
  2863.                          //设置 AHB 时钟(HCLK)      
  2864.                          //RCC_SYSCLK_Div1  AHB 时钟 =  系统时钟      
  2865.                          RCC_HCLKConfig(RCC_SYSCLK_Div1);      
  2866.                           //设置高速 AHB 时钟(PCLK2)      
  2867.                          //RCC_HCLK_Div2  APB1 时钟  = HCLK / 2     
  2868.                          RCC_PCLK2Config(RCC_HCLK_Div2);        
  2869.                          //设置低速 AHB 时钟(PCLK1)      
  2870.                          RCC_PCLK1Config(RCC_HCLK_Div2);                  
  2871.                          //设置ADC时钟频率      
  2872.                          RCC_ADCCLKConfig(RCC_PCLK2_Div6);     
  2873.                          // PLLCLK = 8MHz * 9 = 72 MHz      
  2874.                          //设置 PLL 时钟源及倍频系数      
  2875.                          RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  2876.        //使能或者失能 PLL      
  2877.        RCC_PLLCmd(ENABLE);      
  2878.        //等待指定的 RCC 标志位设置成功 等待PLL初始化成功     
  2879.        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);      
  2880.        //设置系统时钟(SYSCLK) 设置PLL为系统时钟源     
  2881.        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);      
  2882.        //等待PLL成功用作于系统时钟的时钟源     
  2883.        //  0x00:HSI 作为系统时钟      
  2884.        //  0x04:HSE作为系统时钟      
  2885.        //  0x08:PLL作为系统时钟        
  2886.        while(RCC_GetSYSCLKSource() != 0x08)     
  2887.        {            
  2888.                }   
  2889.      }
  2890.          /* 1602*/  
  2891.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE );  
  2892.      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
  2893.          /* SHT10*/
  2894.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  2895.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  2896.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
  2897.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
  2898.          RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
  2899.          RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  2900.          RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
  2901.      RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  2902.      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, DISABLE);         //使能TIM5时钟
  2903.          RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, DISABLE);
  2904.          RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, DISABLE);
  2905.          RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SDIO, DISABLE);
  2906.           RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, DISABLE);
  2907.      //相应的GPIO口即可
  2908.                 
  2909.                     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  2910.        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);
  2911.             RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2 | RCC_APB2Periph_GPIOC, ENABLE);
  2912.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3 | RCC_APB2Periph_GPIOC, ENABLE);
  2913.   }   
  2914. void GPIO_Configuration(void) //GPIO口配置,实际用的是GPIO口的哪些引脚,打开即可
  2915.      {   
  2916.              GPIO_InitTypeDef GPIO_InitStructure;   
  2917.              //LCD1602(DO~D7)对应STM32的GPIO口(PD8~PD15)   
  2918.              GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
  2919.                                                | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);   
  2920.              GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
  2921.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  2922.              GPIO_Init(GPIOD, &GPIO_InitStructure);  
  2923.                        
  2924.              //LCD1602的(RS、RS、E,Backlight)对应STM32的GPIO口(PE0、PE1、PE2、P44)   
  2925.              GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_4);   
  2926.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  2927.              GPIO_Init(GPIOE, &GPIO_InitStructure);

  2928. //             //SHT10 SCLK GPIOB_PIN_10   
  2929.              GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_10);
  2930.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  2931.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  2932.              GPIO_Init(GPIOB, &GPIO_InitStructure);
  2933.                  //SHT10 DATA GPIOE_PIN_14   
  2934.              GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_14);
  2935.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  2936.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;   
  2937.              GPIO_Init(GPIOE, &GPIO_InitStructure);

  2938.                             //SHT10 SCLK GPIOB_PIN_10   S
  2939.              GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_12);
  2940.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  2941.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;   
  2942.              GPIO_Init(GPIOD, &GPIO_InitStructure);
  2943.                  //SHT10 DATA GPIOE_PIN_14   
  2944.              GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13);
  2945.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  2946.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;   
  2947.              GPIO_Init(GPIOD, &GPIO_InitStructure);         

  2948.                 //DS1302  GPIO_Pin_10 SCLK GPIO_Pin_12 RST
  2949.               GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_10|GPIO_Pin_12);
  2950.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  2951.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  2952.              GPIO_Init(GPIOE, &GPIO_InitStructure);
  2953.                 //DS1302_DATA
  2954.               GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_11);
  2955.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  2956.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;   
  2957.              GPIO_Init(GPIOE, &GPIO_InitStructure);
  2958.                
  2959.                 //0,1,2,3,key  GPIOE_5,6,7          输入

  2960.                 GPIO_InitStructure.GPIO_Pin =(GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);//|GPIO_Pin_6|GPIO_Pin_7);
  2961.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  2962.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//GPIO_Mode_IPD ;//GPIO_Mode_IN_FLOATING;//   
  2963.              GPIO_Init(GPIOE, &GPIO_InitStructure);  

  2964. //加热 PA2         输出
  2965.                 GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_2);
  2966.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  2967.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  2968.              GPIO_Init(GPIOA, &GPIO_InitStructure);         

  2969. //MOTO         翻蛋PA4,5   预留PA6,7
  2970.   //            GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
  2971.   //        GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
  2972.   GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5);
  2973.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  2974.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  2975.              GPIO_Init(GPIOA, &GPIO_InitStructure);
  2976.                          
  2977.    GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_14);
  2978.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  2979.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  2980.              GPIO_Init(GPIOD, &GPIO_InitStructure);            
  2981. //加湿控制  PE3
  2982.               GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  2983.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  2984.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  2985.              GPIO_Init(GPIOE, &GPIO_InitStructure);

  2986. // 加湿检测          PB13
  2987.       //        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  2988.                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  2989.         //        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;     
  2990.      //        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Mode_IN_FLOATING;         //上拉输入
  2991.             GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;  
  2992.              GPIO_Init(GPIOB, &GPIO_InitStructure);

  2993. //红外输入管脚A0
  2994.                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;          //红外引脚上拉输入
  2995.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  2996.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  2997.         GPIO_Init(GPIOA, &GPIO_InitStructure);

  2998. // 电机限位检测   PB14,15         输入
  2999.       //        GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_14|GPIO_Pin_15);
  3000.                 GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_14|GPIO_Pin_11);
  3001.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;     
  3002.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Mode_IN_FLOATING;         //上拉输入   
  3003.       //  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  3004.                  GPIO_Init(GPIOB, &GPIO_InitStructure);

  3005. //水泵控制  PC3          输出
  3006.               GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
  3007.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  3008.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  3009.              GPIO_Init(GPIOC, &GPIO_InitStructure);
  3010.                   
  3011. //适配器与蓄电池切换 PC4 电源与锂电池切换 PC5          输入
  3012.                 //GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_4|GPIO_Pin_5);
  3013.                 GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_5);
  3014.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  3015.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Mode_IN_FLOATING;         //上拉输入   
  3016.              GPIO_Init(GPIOC, &GPIO_InitStructure);

  3017.                 //输入电源电压检测
  3018.             GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_4);
  3019.             
  3020.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//GPIO_Mode_IN_FLOATING;         //上拉输入   
  3021.              GPIO_Init(GPIOC, &GPIO_InitStructure);
  3022.                

  3023. //蜂鸣器 PC0  风扇1 PC6 风扇2 PC7          输出
  3024.               GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0);
  3025.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  3026.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  3027.              GPIO_Init(GPIOC, &GPIO_InitStructure);           

  3028.              /*GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_7);

  3029.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  3030.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  3031.              GPIO_Init(GPIOC, &GPIO_InitStructure);                    */
  3032. //高亮LED控制  PB12  输出
  3033.                 GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_12);
  3034.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  3035.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  3036.              GPIO_Init(GPIOB, &GPIO_InitStructure);
  3037.                 //电池电源切换控制
  3038.                 GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_11);
  3039.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  3040.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  3041.              GPIO_Init(GPIOC, &GPIO_InitStructure);
  3042.                 GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_10);
  3043.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  3044.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
  3045.              GPIO_Init(GPIOC, &GPIO_InitStructure);


  3046.             GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE);//重映射管脚
  3047.                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  3048.                 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  3049.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//GPIO_Mode_IN_FLOATING;         //上拉输入   
  3050.              GPIO_Init(GPIOE, &GPIO_InitStructure);  

  3051.                 //水位开关          输入
  3052.                 GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_1);
  3053.         //        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;     
  3054.              //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Mode_IN_FLOATING;         //上拉输入   
  3055.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  3056.                  GPIO_Init(GPIOC, &GPIO_InitStructure);

  3057.                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);         //使能PC,D,G端口时钟







  3058. //        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;         //PD3,PD6推挽输出  
  3059. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  3060.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  3061.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//速度50MHz
  3062. //        GPIO_Init(GPIOD, &GPIO_InitStructure);          //初始化GPIOD3,6
  3063. GPIO_Init(GPIOB, &GPIO_InitStructure);
  3064. //        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;         //PD3,PD6推挽输出
  3065.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;  
  3066.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;                  //推挽输出
  3067.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//速度50MHz
  3068. //        GPIO_Init(GPIOD, &GPIO_InitStructure);
  3069.         GPIO_Init(GPIOB, &GPIO_InitStructure);          //初始化GPIOD3,6
  3070. //        GPIO_SetBits(GPIOD,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_3|GPIO_Pin_8);        //PD3,PD6 输出高
  3071.         GPIO_SetBits(GPIOB,        GPIO_Pin_6);
  3072.         GPIO_SetBits(GPIOB,        GPIO_Pin_7);  
  3073. //        GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);//重映射管脚
  3074. //        I2C_Mode_config() ;
  3075.          GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13|GPIO_Pin_15|GPIO_Pin_8|GPIO_Pin_9);
  3076.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  3077.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//速度50MHz
  3078. //        GPIO_Init(GPIOD, &GPIO_InitStructure);          //初始化GPIOD3,6
  3079. GPIO_Init(GPIOB, &GPIO_InitStructure);
  3080.         GPIO_SetBits(GPIOB,        GPIO_Pin_8);
  3081.         GPIO_SetBits(GPIOB,        GPIO_Pin_9);
  3082.     GPIO_SetBits(GPIOB,        GPIO_Pin_13);
  3083.         GPIO_SetBits(GPIOB,        GPIO_Pin_15);
  3084.         GPIO_SetBits(GPIOB,        GPIO_Pin_10);
  3085.         //pa7 ff;pa3 Pf;pc2 sf;pb1 zf;pa6 sb
  3086.          /*        GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_7);
  3087.              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
  3088.                  GPIO_Init(GPIOA, &GPIO_InitStructure);        */
  3089.         }
  3090. /*void I2C_Mode_config(void) {
  3091.    I2C_InitTypeDef  I2C_InitStructure;  
  3092.      RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);        
  3093.      
  3094.   I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
  3095.      
  3096.   I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;   
  3097.   I2C_InitStructure.I2C_OwnAddress1 =0x0A;      
  3098.   I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;        
  3099.   I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
  3100.   I2C_InitStructure.I2C_ClockSpeed = 400000;     
  3101.   I2C_Cmd(I2C1, ENABLE);  
  3102.   I2C_Init(I2C1, &I2C_InitStructure);


  3103.   
  3104.    }  */
  3105. void NVIC_Configuraton(void)//flash里调试,还是在RAM里调试
  3106. {   
  3107.         NVIC_InitTypeDef  NVIC_InitStructure;
  3108.         #ifdef  VECT_TAB_RAM    // Set the Vector Table base location at 0x20000000   
  3109.         NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x4000);   
  3110.         #else
  3111. //Set the Vector Table base location at 0x08000000   
  3112.   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000);   
  3113.   #endif

  3114.           NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel; //EXTI9_5_IRQChannel; //外部中断线0
  3115.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;
  3116.         NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;
  3117.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  3118.         NVIC_Init(&NVIC_InitStructure);       

  3119. //          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //设置中断优先级分组
  3120.   NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQChannel;

  3121.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
  3122.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
  3123.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  3124.   NVIC_Init(&NVIC_InitStructure);
  3125. }

  3126. /*****************************************************************
  3127.   状态0的显示内容:
  3128.   PH: XX.X        DAYS: XX
  3129.   TH: XX.X        RUN : X
  3130.   Display_0()

  3131. ******************************************************************/

  3132. void Display_0()
  3133. {
  3134.   u16 temp;
  3135.   u16 ff_val;
  3136.    blank=(blank+1)%2;
  3137.   if(lcd_close_flag==0 && (disp_cnt<36000 ||Set_self_test==1))
  3138.   {
  3139.         //oledcheck();
  3140.         OLED_Display_On();
  3141.          if(disp_mode == 0)
  3142.         {
  3143.          power_detect();
  3144.        
  3145.         //        LCD_clr();       
  3146.         LCD_disp_char(0,1,Display_digit[Run_days/10]);
  3147.         LCD_disp_char(1,1,Display_digit[Run_days%10]);


  3148.         LCD_disp_str(2,1," ");                         


  3149.          LCD_disp_char(3,1,digit[(hour/10)]);
  3150.      LCD_disp_char(4,1,digit[(hour%10)]);
  3151.          LCD_disp_str(5,1,":");
  3152.          LCD_disp_char(6,1,digit[(minute/10)]);
  3153.      LCD_disp_char(7,1,digit[(minute%10)]);
  3154.          LCD_disp_str(8,1," ");

  3155.          //        OLED_Clear();
  3156.                 oled_disp_china(0,0,"第");
  3157.                 oled_disp_num(2,0,Run_days,2);
  3158.                 oled_disp_china(2,0,"天");
  3159.                 oled_disp_string(6,0," ");
  3160.                 oled_disp_num(7,0,hour,2);
  3161.                 if(blank==0)
  3162.                 {                       
  3163.                 oled_disp_string(9,0,":");
  3164.                 }
  3165.                 else
  3166.                 {
  3167.                 oled_disp_string(9,0," ");
  3168.                 }
  3169.                 oled_disp_num(10,0,minute,2);

  3170.                                    /*       if(Set_bird_mode==9)
  3171.                                                  {oled_disp_china(6,0,"保温");}
  3172.                                                  else if(Set_bird_mode==1)
  3173.                                                  { oled_disp_china(6,0,"牡丹");  }
  3174.                                                  else if(Set_bird_mode==2)
  3175.                                                  { oled_disp_china(6,0,"玄凤");}
  3176.                                                  else if(Set_bird_mode==3)
  3177.                                                  { oled_disp_china(6,0,"虎皮"); }
  3178.                                                  else if(Set_bird_mode==4)
  3179.                                                  { oled_disp_china(6,0,"和尚");}
  3180.                                                  else if(Set_bird_mode==5)
  3181.                                                  {  oled_disp_china(6,0,"太阳"); }
  3182.                                                  else if(Set_bird_mode==6)
  3183.                                                  {  oled_disp_china(6,0,"灰机"); }
  3184.                                                  else if(Set_bird_mode==7)       
  3185.                                                  {  oled_disp_china(6,0,"折中"); }
  3186.                                                   else if(Set_bird_mode==0)
  3187.                                                  { oled_disp_china(6,0,"手动"); }
  3188.                                                  else
  3189.                                                  {
  3190.                                                     oled_disp_china(6,0,"小鸡");
  3191.                                                  }          */
  3192.                                                  get_bird_name(bird_mode);
  3193.                                                  oled_disp_china(6,0,bird_name);

  3194.                 oled_disp_china(0,2,"主探头");

  3195.                 if(Now_TH==500)
  3196.                 {
  3197.                 oled_disp_china(3,2," 异常  ");
  3198.                 }
  3199.                 else
  3200.                 {
  3201.                 oled_disp_num(6,2,Now_TH/10,2);
  3202.                 oled_disp_string(8,2,".");
  3203.                 oled_disp_num(9,2,Now_TH%10,1);
  3204.                 oled_disp_china(5,2,"度");
  3205.                 oled_disp_string(12,2," ");
  3206.                 oled_disp_num(13,2,Now_PH/10,2);
  3207.                 oled_disp_string(15,2,"%");
  3208.                 }

  3209.                 oled_disp_china(0,3,"辅探头");
  3210.                
  3211.                 if(Now_TH_S==500)
  3212.                 {
  3213.                 oled_disp_china(3,3," 异常  ");
  3214.                 }
  3215.                 else
  3216.                 {
  3217.                 oled_disp_num(6,3,Now_TH_S/10,2);
  3218.                 oled_disp_string(8,3,".");
  3219.                 oled_disp_num(9,3,Now_TH_S%10,1);
  3220.                 oled_disp_china(5,3,"度");
  3221.                 oled_disp_string(12,3," ");
  3222.                 oled_disp_num(13,3,Now_PH_S/10,2);
  3223.                 oled_disp_string(15,3,"%");
  3224.                 }

  3225.             if(Set_self_test==3)
  3226.                 {
  3227.                 oled_disp_china(0,4,"主辅蛋盘");
  3228.                 }
  3229.                 else
  3230.                 {
  3231.                   oled_disp_china(0,4,"     ");
  3232.                 }
  3233.   if(Set_bird_mode==19 ||Set_bird_mode==18)
  3234.   {
  3235.             if(dianchi_flag==0)
  3236.                 {
  3237.             oled_disp_china(0,1,"加热功率");
  3238.                 oled_disp_num(8,1,power_val,3);
  3239.                 oled_disp_string(11,1,"%");
  3240.                 }
  3241.                 else
  3242.                 {
  3243.                 oled_disp_china(0,1,"电池电量");
  3244.                 oled_disp_num(8,1,dianchi_val,3);
  3245.                 oled_disp_string(11,1,"%");
  3246.                 }

  3247.     }
  3248.         else
  3249.         {
  3250.         oled_disp_china(0,1,"翻蛋");
  3251.                 oled_disp_num(4,1,target_moto,1);
  3252.                 oled_disp_string(5,1," ");
  3253.                 if(egg_direct==1)
  3254.                 {
  3255.                 oled_disp_string(6,1,"<-");
  3256.                 //oled_disp_china(2,1,"起点");
  3257.                 }
  3258.                 else
  3259.                 {
  3260.                 oled_disp_string(6,1,"->");
  3261.         //        oled_disp_china(2,1,"终点");
  3262.                 }
  3263.                 if(        cnt_turn<0)
  3264.                 {
  3265.                 oled_disp_string(8,1,"-");
  3266.                 oled_disp_num(9,1,abs(cnt_turn),2);
  3267.                 }
  3268.                 else
  3269.                 {
  3270.                 oled_disp_string(8,1," ");
  3271.                 oled_disp_num(9,1,abs(cnt_turn),2);
  3272.                 }
  3273.                 oled_disp_string(11,1," ");
  3274.    }

  3275.         if(Run_YN == 1)
  3276.         {
  3277.                 //LCD_disp_str(9,1,"RUN ");
  3278.              LCD_disp_char(9,1,digit[(power_val%1000/100)]);
  3279.         LCD_disp_char(10,1,digit[(power_val%100/10)]);
  3280.             LCD_disp_char(11,1,digit[(power_val%10)]);
  3281.                 LCD_disp_str(12,1," ");       
  3282.                 if(cold_flag==1)
  3283.                 {
  3284.                  oled_disp_china(6,1,"凉蛋");
  3285.                 }
  3286.                 else
  3287.                 {
  3288.                 oled_disp_china(6,1,"运行");
  3289.                 }

  3290.         }
  3291.         else
  3292.         {
  3293.                 LCD_disp_str(9,1,"STOP");
  3294.                 oled_disp_china(6,1,"停止");       
  3295.         }
  3296.     LCD_disp_char(13,1,digit[(Now_PH%1000)/100]);         //显示湿度十位
  3297.     LCD_disp_char(14,1,digit[(Now_PH%100)/10]);           //显示湿度个位
  3298. //        LCD_disp_str(9,2,".");
  3299. //        LCD_disp_char(10,2,digit[(Now_PH%10)]);               //显示湿度小数点后第一位
  3300.         LCD_disp_str(15,1,"%");

  3301.     LCD_disp_str(0,2,"P:");
  3302.     LCD_disp_char(2,2,digit[(Now_TH%1000)/100]);        //显示温度十位
  3303.     LCD_disp_char(3,2,digit[(Now_TH%100)/10]);          //显示温度个位
  3304.         LCD_disp_str(4,2,".");
  3305.         LCD_disp_char(5,2,digit[(Now_TH%10)]);              //显示温度小数点后第一位

  3306.         if(cold_flag==1)
  3307.         {
  3308.         LCD_disp_str(6,2,"!");
  3309.         }
  3310.         else
  3311.         {
  3312.      LCD_disp_str(6,2,"C");
  3313.         }
  3314.     LCD_disp_str(7,2," ");
  3315. //        LCD_disp_str(7,2,"R:");
  3316. //        LCD_disp_char(10,2,digit[Now_PH/1000]);               //显示湿度百位
  3317.            LCD_disp_str(8,2," S:");
  3318.        

  3319.        


  3320.        
  3321.     dot=ds18b20_temp&0xff;
  3322.        
  3323.        
  3324.     LCD_disp_char(11,2,digit[((ds18b20_temp>>8)%100/10)]);
  3325.     LCD_disp_char(12,2,digit[((ds18b20_temp>>8)%10)]);
  3326.         LCD_disp_str(13,2,".");
  3327.         LCD_disp_char(14,2,digit[(dot%10)]);
  3328.         LCD_disp_str(15,2,"C");          
  3329. /*        LCD_disp_char(11,2,digit[(Now_TH_S%1000)/100]);        //显示温度十位
  3330.     LCD_disp_char(12,2,digit[(Now_TH_S%100)/10]);          //显示温度个位
  3331.         LCD_disp_str(13,2,".");
  3332.         LCD_disp_char(14,2,digit[(Now_TH_S%10)]);              //显示温度小数点后第一位
  3333.         LCD_disp_str(15,2,"C");           */
  3334.         /*ff_val= ffan_detect();
  3335.         oled_disp_num(0,5,ff_val,4);   */

  3336.         }
  3337.                 else if (disp_mode==1)
  3338.         {
  3339.          
  3340.                 LCD_clr();

  3341.              LCD_disp_str(0,1,"Set: ");
  3342.                  OLED_Clear();
  3343.                  oled_disp_china(1,0,"当天参数设置");
  3344.                 oled_disp_china(0,1,"温湿度");
  3345.                 oled_disp_num(6,1,target_temprature/10,2);
  3346.                 oled_disp_string(8,1,".");
  3347.                 oled_disp_num(9,1,target_temprature%10,1);
  3348.                 oled_disp_china(5,1,"度");

  3349.                 oled_disp_num(13,1,target_Shidu/10,2);
  3350.                 oled_disp_string(15,1,"%");
  3351.                 oled_disp_china(0,2,"翻蛋");
  3352.                 oled_disp_string(4,2,"/");
  3353.                 oled_disp_num(5,2,target_moto,1);
  3354.                 oled_disp_china(3,2,"时");

  3355.                 oled_disp_china(4,2,"排风");
  3356.                 oled_disp_string(12,2,"/");
  3357.                 oled_disp_num(13,2,target_fan,1);
  3358.                 oled_disp_china(7,2,"时");
  3359.                 oled_disp_china(0,3,"凉蛋");
  3360.                 oled_disp_num(5,3,target_cold,1);
  3361.                 oled_disp_china(3,3,"次每天");

  3362.                  LCD_disp_str(5,1,"M");



  3363.                 if(target_moto==0)
  3364.                 {
  3365.                         LCD_disp_str(6,1,"N");
  3366.                 }
  3367.                 else
  3368.                 {
  3369.                         LCD_disp_char(6,1,digit[(target_moto%10)]);  
  3370.                 }
  3371.                 LCD_disp_str(7,1," F");
  3372.                    if(target_fan==0)
  3373.                 {
  3374.                         LCD_disp_str(9,1,"N");
  3375.                 }
  3376.                 else
  3377.                 {
  3378.                   LCD_disp_char(9,1,digit[(target_fan%10)]);  
  3379.                 }
  3380.                 LCD_disp_str(10,1," C");
  3381.                    if(target_cold==0)
  3382.                 {
  3383.                      LCD_disp_str(12,1,"N");
  3384.                 }
  3385.                 else
  3386.                 {
  3387.                           LCD_disp_char(12,1,digit[(target_cold%10)]);  

  3388.                 }
  3389.                  LCD_disp_char(0,2,digit[(target_temprature%1000/100)]);
  3390.          LCD_disp_char(1,2,digit[(target_temprature%100/10)]);
  3391.                  LCD_disp_str(2,2,".");
  3392.              LCD_disp_char(3,2,digit[(target_temprature%10)]);
  3393.                   LCD_disp_str(4,2,"C ");
  3394.                  LCD_disp_char(6,2,digit[(target_Shidu%1000/100)]);
  3395.          LCD_disp_char(7,2,digit[(target_Shidu%100/10)]);
  3396.                  LCD_disp_str(8,2,".");
  3397.              LCD_disp_char(9,2,digit[(target_Shidu%10)]);
  3398.                  LCD_disp_str(10,2,"%");




  3399.         }

  3400.         else if(disp_mode == 2)
  3401.         {
  3402.          power_detect();

  3403.         //        LCD_clr();       
  3404.         LCD_disp_char(0,1,Display_digit[Run_days/10]);
  3405.         LCD_disp_char(1,1,Display_digit[Run_days%10]);


  3406.         LCD_disp_str(2,1," ");                         


  3407.          LCD_disp_char(3,1,digit[(hour/10)]);
  3408.      LCD_disp_char(4,1,digit[(hour%10)]);
  3409.          LCD_disp_str(5,1,":");
  3410.          LCD_disp_char(6,1,digit[(minute/10)]);
  3411.      LCD_disp_char(7,1,digit[(minute%10)]);
  3412.          LCD_disp_str(8,1," ");

  3413.          //        OLED_Clear();
  3414.                 oled_disp_china(0,0,"第");
  3415.                 oled_disp_num(2,0,Run_days,2);
  3416.                 oled_disp_china(2,0,"天");
  3417.                 oled_disp_string(6,0," ");
  3418.                 oled_disp_num(7,0,hour,2);
  3419.                 if(blank==0)
  3420.                 {                       
  3421.                 oled_disp_string(9,0,":");
  3422.                 }
  3423.                 else
  3424.                 {
  3425.                 oled_disp_string(9,0," ");
  3426.                 }
  3427.                 oled_disp_num(10,0,minute,2);

  3428.                                    /*       if(Set_bird_mode==9)
  3429.                                                  {oled_disp_china(6,0,"保温");}
  3430.                                                  else if(Set_bird_mode==1)
  3431.                                                  { oled_disp_china(6,0,"牡丹");  }
  3432.                                                  else if(Set_bird_mode==2)
  3433.                                                  { oled_disp_china(6,0,"玄凤");}
  3434.                                                  else if(Set_bird_mode==3)
  3435.                                                  { oled_disp_china(6,0,"虎皮"); }
  3436.                                                  else if(Set_bird_mode==4)
  3437.                                                  { oled_disp_china(6,0,"和尚");}
  3438.                                                  else if(Set_bird_mode==5)
  3439.                                                  {  oled_disp_china(6,0,"太阳"); }
  3440.                                                  else if(Set_bird_mode==6)
  3441.                                                  {  oled_disp_china(6,0,"灰机"); }
  3442.                                                  else if(Set_bird_mode==7)       
  3443.                                                  {  oled_disp_china(6,0,"折中"); }
  3444.                                                   else if(Set_bird_mode==0)
  3445.                                                  { oled_disp_china(6,0,"手动"); }
  3446.                                                  else
  3447.                                                  {
  3448.                                                     oled_disp_china(6,0,"小鸡");
  3449.                                                  }          */
  3450.                                                  get_bird_name(bird_mode);
  3451.                                                  oled_disp_china(6,0,bird_name);
  3452.                 oled_disp_china(0,2,"主探头");

  3453.                 if(Now_TH==500)
  3454.                 {
  3455.                 oled_disp_china(3,2," 异常  ");
  3456.                 }
  3457.                 else
  3458.                 {
  3459.                 oled_disp_num(6,2,Now_TH/10,2);
  3460.                 oled_disp_string(8,2,".");
  3461.                 oled_disp_num(9,2,Now_TH%10,1);
  3462.                 oled_disp_china(5,2,"度");
  3463.                 oled_disp_string(12,2," ");
  3464.                 oled_disp_num(13,2,Now_PH/10,2);
  3465.                 oled_disp_string(15,2,"%");
  3466.                 }

  3467.                 oled_disp_china(0,3,"辅探头");
  3468.                
  3469.                 if(Now_TH_S==500)
  3470.                 {
  3471.                 oled_disp_china(3,3," 异常  ");
  3472.                 }
  3473.                 else
  3474.                 {
  3475.                 oled_disp_num(6,3,Now_TH_S/10,2);
  3476.                 oled_disp_string(8,3,".");
  3477.                 oled_disp_num(9,3,Now_TH_S%10,1);
  3478.                 oled_disp_china(5,3,"度");
  3479.                 oled_disp_string(12,3," ");
  3480.                 oled_disp_num(13,3,Now_PH_S/10,2);
  3481.                 oled_disp_string(15,3,"%");
  3482.                 }

  3483.             if(dianchi_flag==0)
  3484.                 {
  3485.             oled_disp_china(0,1,"加热功率");
  3486.                 oled_disp_num(8,1,power_val,3);
  3487.                 oled_disp_string(11,1,"%");
  3488.                 }
  3489.                 else
  3490.                 {
  3491.                 oled_disp_china(0,1,"电池电量");
  3492.                 oled_disp_num(8,1,dianchi_val,3);
  3493.                 oled_disp_string(11,1,"%");
  3494.                 }


  3495.         if(Run_YN == 1)
  3496.         {
  3497.                 //LCD_disp_str(9,1,"RUN ");
  3498.              LCD_disp_char(9,1,digit[(power_val%1000/100)]);
  3499.         LCD_disp_char(10,1,digit[(power_val%100/10)]);
  3500.             LCD_disp_char(11,1,digit[(power_val%10)]);
  3501.                 LCD_disp_str(12,1," ");       
  3502.                 if(cold_flag==1)
  3503.                 {
  3504.                  oled_disp_china(6,1,"凉蛋");
  3505.                 }
  3506.                 else
  3507.                 {
  3508.                 oled_disp_china(6,1,"运行");
  3509.                 }

  3510.         }
  3511.         else
  3512.         {
  3513.                 LCD_disp_str(9,1,"STOP");
  3514.                 oled_disp_china(6,1,"停止");       
  3515.         }

  3516.        


  3517.         }

  3518.             else if (disp_mode==3)
  3519.         {
  3520.                  OLED_Clear();
  3521.         if(        open_wet_cnt>999999) open_wet_cnt=999999;       
  3522.     oled_disp_china(0,0,"加湿次数");
  3523.         oled_disp_num(8,0,open_wet_cnt,8);
  3524.         if(        wetfan_cnt>999999) wetfan_cnt=999999;
  3525.     oled_disp_china(0,1,"排风次数");
  3526.         oled_disp_num(8,1,wetfan_cnt,8);


  3527.                 oled_disp_china(0,2,"平均湿度");
  3528.                 oled_disp_num(10,2,Now_PH_D/10,2);
  3529.                 oled_disp_string(12,2,".");
  3530.                 oled_disp_num(13,2,Now_PH_D%10,1);
  3531.        
  3532.             oled_disp_china(0,3,"加湿风速");
  3533.              oled_disp_num(8,3,u_wet,8);
  3534.         }
  3535.        
  3536.         else if (disp_mode==4)
  3537.         {
  3538.                 LCD_clr();
  3539.            LCD_disp_str(0,1,"low  wet:");
  3540.         if(        low_wet_cnt>999999) low_wet_cnt=999999;
  3541.         LCD_disp_char(9,1,digit[(low_wet_cnt%1000000/100000)]);
  3542.         LCD_disp_char(10,1,digit[(low_wet_cnt%100000/10000)]);
  3543.         LCD_disp_char(11,1,digit[(low_wet_cnt%10000/1000)]);
  3544.         LCD_disp_char(12,1,digit[(low_wet_cnt%1000/100)]);
  3545.     LCD_disp_char(13,1,digit[(low_wet_cnt%100/10)]);
  3546.         LCD_disp_char(14,1,digit[(low_wet_cnt%10)]);
  3547.         LCD_disp_str(15,1," ");       
  3548.     LCD_disp_str(0,2,"high wet:");
  3549.         if(        high_wet_cnt>999999) high_wet_cnt=999999;
  3550.         LCD_disp_char(9,2,digit[(high_wet_cnt%1000000/100000)]);
  3551.         LCD_disp_char(10,2,digit[(high_wet_cnt%100000/10000)]);
  3552.         LCD_disp_char(11,2,digit[(high_wet_cnt%10000/1000)]);
  3553.         LCD_disp_char(12,2,digit[(high_wet_cnt%1000/100)]);
  3554.     LCD_disp_char(13,2,digit[(high_wet_cnt%100/10)]);
  3555.         LCD_disp_char(14,2,digit[(high_wet_cnt%10)]);
  3556.         LCD_disp_str(15,2," ");       
  3557.                  OLED_Clear();
  3558.     oled_disp_china(0,0,"低湿次数");
  3559.         oled_disp_num(8,0,low_wet_cnt,6);
  3560.         oled_disp_china(0,1,"高湿次数");
  3561.         oled_disp_num(8,1,high_wet_cnt,6);
  3562.         oled_disp_china(0,2,"平均湿度");
  3563.         oled_disp_num(8,2,avr_ph/10,2);
  3564.         oled_disp_string(10,2,".");
  3565.         oled_disp_num(11,2,avr_ph%10,1);
  3566.         oled_disp_string(12,2,"%");

  3567.         }
  3568.                 else if (disp_mode==5)
  3569.         {
  3570.        LCD_clr();
  3571.            LCD_disp_str(0,1,"low  tem:");
  3572.         if(        low_t_cnt>999999) low_t_cnt=999999;
  3573.         LCD_disp_char(9,1,digit[(low_t_cnt%1000000/100000)]);
  3574.         LCD_disp_char(10,1,digit[(low_t_cnt%100000/10000)]);
  3575.         LCD_disp_char(11,1,digit[(low_t_cnt%10000/1000)]);
  3576.         LCD_disp_char(12,1,digit[(low_t_cnt%1000/100)]);
  3577.     LCD_disp_char(13,1,digit[(low_t_cnt%100/10)]);
  3578.         LCD_disp_char(14,1,digit[(low_t_cnt%10)]);
  3579.         LCD_disp_str(15,1," ");       
  3580.     LCD_disp_str(0,2,"high tem:");
  3581.         if(        high_t_cnt>999999) high_t_cnt=999999;
  3582.         LCD_disp_char(9,2,digit[(high_t_cnt%1000000/100000)]);
  3583.         LCD_disp_char(10,2,digit[(high_t_cnt%100000/10000)]);
  3584.         LCD_disp_char(11,2,digit[(high_t_cnt%10000/1000)]);
  3585.         LCD_disp_char(12,2,digit[(high_t_cnt%1000/100)]);
  3586.     LCD_disp_char(13,2,digit[(high_t_cnt%100/10)]);
  3587.         LCD_disp_char(14,2,digit[(high_t_cnt%10)]);
  3588.         LCD_disp_str(15,2," ");       
  3589.                          OLED_Clear();
  3590.     oled_disp_china(0,0,"低温次数");
  3591.         oled_disp_num(8,0,low_t_cnt,6);
  3592.         oled_disp_china(0,1,"高温次数");
  3593.         oled_disp_num(8,1,high_t_cnt,6);

  3594.         oled_disp_china(0,2,"平均功率");
  3595.         oled_disp_num(8,2,ave_hot,5);
  3596.         oled_disp_china(0,3,"最大功率");
  3597.         oled_disp_num(8,3,max_hot,5);
  3598.         }
  3599.                 else if (disp_mode==6)
  3600.         {
  3601.        LCD_clr();
  3602.            LCD_disp_str(0,1,"max tem1: ");                
  3603.         LCD_disp_char(10,1,digit[(max_s1_temp%1000/100)]);
  3604.         LCD_disp_char(11,1,digit[(max_s1_temp%100/10)]);
  3605.           LCD_disp_str(12,1,".");
  3606.         LCD_disp_char(13,1,digit[(max_s1_temp%10)]);  
  3607.         LCD_disp_str(14,1,"    ");       
  3608.    
  3609.     LCD_disp_str(0,2,"max tem2: ");                
  3610.         LCD_disp_char(10,2,digit[((max_s2_temp>>8)%100/10)]);
  3611.         LCD_disp_char(11,2,digit[((max_s2_temp>>8)%10)]);
  3612.           LCD_disp_str(12,2,".");
  3613.         LCD_disp_char(13,2,digit[((max_s2_temp&0xff)%10)]);  
  3614.         LCD_disp_str(14,2,"    ");
  3615.                  OLED_Clear();

  3616.                 oled_disp_china(0,0,"主最高温度");
  3617.                 oled_disp_num(10,0,max_s1_temp/10,2);
  3618.                 oled_disp_string(12,0,".");
  3619.                 oled_disp_num(13,0,max_s1_temp%10,1);
  3620.                 oled_disp_china(7,0,"度");

  3621.             oled_disp_china(0,1,"辅最高温度");
  3622.                 oled_disp_num(10,1,max_s2_temp/10,2);
  3623.                 oled_disp_string(12,1,".");
  3624.                 oled_disp_num(13,1,max_s2_temp%10,1);
  3625.                 oled_disp_china(7,1,"度");

  3626.                 oled_disp_china(0,2,"主最低温度");
  3627.                 oled_disp_num(10,2,min_s1_temp/10,2);
  3628.                 oled_disp_string(12,2,".");
  3629.                 oled_disp_num(13,2,min_s1_temp%10,1);
  3630.                 oled_disp_china(7,2,"度");

  3631.             oled_disp_china(0,3,"辅最低温度");
  3632.                 oled_disp_num(10,3,min_s2_temp/10,2);
  3633.                 oled_disp_string(12,3,".");
  3634.                 oled_disp_num(13,3,min_s2_temp%10,1);
  3635.                 oled_disp_china(7,3,"度");

  3636.         }
  3637.                         else if (disp_mode==7)
  3638.         {

  3639.                  OLED_Clear();

  3640.                 oled_disp_china(0,0,"主最高湿度");
  3641.                 oled_disp_num(10,0,max_s1_ph/10,2);
  3642.                 oled_disp_string(12,0,".");
  3643.                 oled_disp_num(13,0,max_s1_ph%10,1);
  3644.                 //oled_disp_china(7,0,"度");

  3645.             oled_disp_china(0,1,"辅最高湿度");
  3646.                 oled_disp_num(10,1,max_s2_ph/10,2);
  3647.                 oled_disp_string(12,1,".");
  3648.                 oled_disp_num(13,1,max_s2_ph%10,1);
  3649.                 //oled_disp_china(7,1,"度");

  3650.                 oled_disp_china(0,2,"主最低湿度");
  3651.                 oled_disp_num(10,2,min_s1_ph/10,2);
  3652.                 oled_disp_string(12,2,".");
  3653.                 oled_disp_num(13,2,min_s1_ph%10,1);
  3654.                 //oled_disp_china(7,2,"度");

  3655.             oled_disp_china(0,3,"辅最低湿度");
  3656.                 oled_disp_num(10,3,min_s2_ph/10,2);
  3657.                 oled_disp_string(12,3,".");
  3658.                 oled_disp_num(13,3,min_s2_ph%10,1);
  3659.                 //oled_disp_china(7,3,"度");

  3660.         }  
  3661.         else if (disp_mode==8)
  3662.         {
  3663.               power_detect();
  3664.                 LCD_clr();

  3665.           
  3666.                   
  3667.                  if(power_erro_cnt>999) power_erro_cnt=999;


  3668.                  OLED_Clear();
  3669.     oled_disp_china(0,0,"电源掉电次数");
  3670.         oled_disp_num(12,0,power_erro_cnt,4);
  3671.            oled_disp_china(0,1,"电源电压");
  3672.         oled_disp_num(8,1,power_lever/10,2);
  3673.         oled_disp_string(10,1,".");
  3674.         oled_disp_num(11,1,power_lever%10,1);
  3675.         oled_disp_string(12,1,"V");       
  3676.         oled_disp_china(0,2,"风扇报警次数");
  3677.         oled_disp_num(12,2,fan_erro_cnt,4);
  3678.         oled_disp_china(0,3,"风扇速度");
  3679.         oled_disp_num(12,3,fan_cnt,4);         

  3680.         }
  3681.         else if (disp_mode==9)
  3682.         {
  3683.                         LCD_clr();

  3684.              LCD_disp_str(0,1,"chip temp: ");
  3685.         LCD_disp_char(12,1,digit[(chip_temp%100/10)]);
  3686.     LCD_disp_char(13,1,digit[(chip_temp%10)]);
  3687.         LCD_disp_str(14,1,"CT");
  3688.         OLED_Clear();
  3689.     oled_disp_china(0,0,"控制板温度");
  3690.         oled_disp_num(12,0,chip_temp,2);
  3691.     oled_disp_china(7,0,"度");
  3692.         water_check();
  3693.         oled_disp_num(0,1,wet_power_level,4);
  3694.          temp=ADC_Get_aveg(ADC_Channel_17,10)*3.3*1000/4096;
  3695.           oled_disp_num(8,1,temp,4);


  3696.         //wet_new=ReadADCAverageValue();
  3697.         oled_disp_string(0,2,"wet e");
  3698.         oled_disp_num(8,2,wet_erro_cnt,8);
  3699. ……………………

  3700. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
wuxian.rar (687.34 KB, 下载次数: 43)


回复

使用道具 举报

ID:1 发表于 2018-9-15 15:49 | 显示全部楼层
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

ID:422110 发表于 2018-11-8 22:19 | 显示全部楼层
楼主,有元件清单和成品照片吗
回复

使用道具 举报

ID:44626 发表于 2019-5-29 18:54 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表