标题:
stm32控制GSM模块进行红外报警程序源码(可以报警拨打手机)
[打印本页]
作者:
zhangjiaji
时间:
2018-9-15 06:16
标题:
stm32控制GSM模块进行红外报警程序源码(可以报警拨打手机)
全套原代码,可以报警拨打手机。
单片机源程序如下:
//#include "lcd1602_drive.h"
//#include "main.h"
//#include "ldssht10.h"
#include "menu.h"
#include "sht10.h"
#include "delay.h"
#include "lcd1602.h"
#include "PWM.h"
#include "TIMER.h"
#include "PID.h"
#include "EXIT.h"
#include "DS1302.H"
#include "moto.h"
#include"Flash.h"
#include "Irda.h"
#include "DS18B20.h"
#include "oled.h"
#include "bmp.h"
#include "stm32f10x_lib.h"
//#include "adc.h"
typedef volatile unsigned char vu8;
typedef volatile unsigned short vu16;
unsigned char DS1302_flg=0x00;
//#include "key.h"
u16 Now_TH=0; //当前读取到的温度值,扩大10倍数
u16 Now_PH=0; //当前读取到的湿度值,扩大10倍数
u16 Now_TH_D=0;
u16 Now_PH_D=0;
u16 Now_TH_S=0; //当前读取到的温度值,扩大10倍数
u16 Now_PH_S=0; //当前读取到的湿度值,扩大10倍数
u16 avr_ph;
float avr_ph_f;
unsigned char Run_days=1; //孵蛋进行天数
unsigned char Run_YN=0; //系统是否运行中,Y:运行中,N:停止中
u32 cnt=0;
u32 cnt_wet=0;
u32 cnt_wet_h=0;
//u16 heat_pwm=0;
//u16 set_temprature=0x0186;//39.0 度
u16 Set_Temp_date_num[100] ={0};
u16 Set_Shidu_date_num[100] ={0};
u16 Set_MOto_fanzhuang[100] ={0
// 0x004e,0x004e,0x004e,0x004e,0x004e,0x004e,0x004e,0x004e,0x4e,0x4e
// ,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e
// ,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e
};
u16 Set_fan_runtime[100] = {0};
u16 Set_egg_codetime[100] = {0};
u16 set_temprature = 0X0172;//0x0177;//0x0177;//37.5 度
u16 set_Shidu = 0x00fa;
u16 target_temprature; //需要达到的目标温度
u16 target_Shidu;//需要达到的目标的湿度
u8 target_moto; //当日是否需要翻蛋设置参数
u8 target_fan; //当日排风扇是否工作设置参数
u8 Moto_turn_flag;
u8 moto_start_flag;//电机启动转动标示
u8 dianji_conut = 0; //电机转动时间控制参数
u16 Shubeng_Time_Control_Count = 0;//水泵时间计时
u16 Shuibeng_Control_flag = 0; //水泵工作标志位默认不工作
u8 Close_jiashi_flg = 0x01; //关加湿器标志位
u8 fengshan_stop_flg = 0x00; //关关风扇标志位
//unsigned char set_mototurn = 0; //设置翻蛋参数
u8 set_mototurn = 0;
u8 set_fan_time = 0; //设置排风扇运行参数
//uchar s2,s3,s4;
unsigned char key_num_check_flg = 0x00;
uchar* table_1[]={"Show Para","Set Para","Hatch Days:","Set TH:","Set PH:","Turn Egg Y/N:"}; //需要显示的字符串
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"};//***主菜单显
unsigned char Display_digit[10]={"0123456789"}; //定义字符数组显示数字
unsigned char* display_YN[]={"Start Y/N?","Stop Y/N?","Reset Y/N?"}; //显示是不是开始或者停止运行运行参数
u16 PID_Check_flg=0x00; // 1s检测一次温度标志位
u8 Display_tp_flag = 0x00;//设备不在孵蛋状态是,读取温度参数值,并显示的标示
u16 Set_Temp_Flash_Date[1]; //写入flash的初始温度
u16 Set_Shidu_Flash_Date[1]; //写入flash的初始湿度
u16 Set_Days_Flash_Date[1]; //写入flash的初始天数
u16 Set_PID_P_Flash_Date[1]; //写入flash的初始P
u16 Set_PID_D_Flash_Date[1]; //写入flash的初始D
u16 Set_Fanzhuan_Flash_Date[1]; //写入flash的初始反转
u16 Read_Temp_Flash_Date[100];
u16 Read_Shidu_Flash_Date[100];
u16 Read_Fanzhuan_Flash_Date[100];
u16 Read_Temp_Flash_Date_All[1];
u16 Read_Shidu_Flash_Date_All[1];
u16 Read_Fanzhuan_Flash_Date_All[1];
u16 Read_Days_Flash_Date[1];
u16 Read_PID_P_Flash_Date[1];
u16 Read_PID_D_Flash_Date[1];
u16 Flash_Read_Days_TH_PH_Turn_All_Set[5]={0};
u16 Flash_Write_Days_TH_PH_Turn_All_Set[5] = {0,0,0,0,1}; //所有天数,温度,湿度,和翻转设置
u8 Moto_Set_Time_flg = 0x00;
//u8 Moto_Set_flg = 0x00;
u8 Moto_Left_flg = 0x01;
u8 Moto_Right_flg = 0x00;
u8 Moto_Stop_flg = 0x00;
u8 wet_state_flag=0;
u16 Moto_Minte_conut = 0x00;
u8 break_flag=0;
unsigned char Set_Input_Day_Num = 30; // 初始化天数是30天 最大只能99
unsigned char Set_Input_Day_Num_t;
unsigned short PID_P = 2000;//10
unsigned short PID_D = 5;//5
u8 Set_MOto_fangzhuan_num = 0x59; //89 Y
unsigned char set_year = 14;
unsigned char set_month = 5;
unsigned char set_day = 29;
unsigned char set_hour =23;
unsigned char set_minute = 22;
unsigned char set_second =30;
unsigned char second,minute,hour,day,month,year;
unsigned char minute_d,hour_d,second_d,init_date_state,date_erro_flag;
u32 cnt_d;
unsigned char Now_minute,Now_year,Now_month,Now_day,Now_hour; //记录系统启动日期
//unsigned char Stop_year,Stop_month,Stop_day; // 记录系统停止的日期
unsigned char Stop_year,Stop_month,Stop_day,set_time; // 记录系统停止的日期
unsigned char wetfan_state,hotfan_state;
unsigned char LCD_now_state; // 液晶显示当前状态 SKY HU
unsigned char LCD_next_state; // 液晶显示下一个状态 SKY HU
unsigned char LCD_mouse; // ->指示位置 SKY HU
unsigned char KEY_onoff; //是否开始运行 >|
unsigned char KEY_reset; //是否复位设定参数按键CH-
unsigned char KEY_up; //往下翻页按键识别 -
unsigned char KEY_down; //往下翻页按键识别 +
unsigned char KEY_confirm; //确认按键识别 EQ
unsigned char KEY_cancel; //取消按键识别 >>|
unsigned char KEY_back; //返回按键识别 CH+
unsigned char KEY_data; //数字按键识别标示 0~9
unsigned char KEY_value; //数字按键数值 0~9
unsigned char* KEY_char; //数字按键数值 字符型 “0~9”
unsigned char KEY_time; //设置时间按钮 100+
unsigned char KEY_pre;
unsigned char KEY_next;
unsigned char KEY_mode;
unsigned char Cancel_flag; //收到消除标志符号,标示要消除输入错误的值
unsigned char Set_day_value; //记录需要修改的是哪一天的参数
unsigned char UpDown_flag; //翻页标示
//unsigned char ONOFF_flag; //当前启动关闭状态标示 0:关闭; 1:开启
unsigned char digit[10]={"0123456789"}; //定义字符数组显示数字
unsigned char bird_mode,Fan_mode, Moto_Runtime, Fan1_Opentime, Warning_Switch,Pump_Runtime; //5个参数变量
unsigned char Set_bird_mode,Set_Fan_mode, Set_Moto_Runtime, Set_Fan1_Opentime, Set_Warning_Switch,Set_Pump_Runtime; //5个参数变量
unsigned char Cold_Runtime, Cold_Temp,High_Temp,Low_Temp,pid_mode,wet_time,th_step,wet_fan_speed;
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;
u32 hot_cnt;
float wendunum1[]={0.00};
float shidunum1[]={0.00};
float wendunum1_S[]={0.00};
float shidunum1_S[]={0.00};
u8 egg_flag;
u8 self_test_over=0;
unsigned char hand_egg_turn,lcd_close_flag,disp_mode,hand_add_water;
/*红外参数变量设定*/
unsigned char* bird_name;
u8 fhua_days;
u8 step_days[4];
u16 wendu_t[4],shidu_t[4];
u8 fandan_t[4],paifen_t[4],liang_t[4];
u8 egg_size;
u32 fan_erro_cnt;
#define REMOTE_ID 0
#define RDATA PAin(0) //红外数据输入脚
u8 fac_us=0;//us延时倍乘数
u16 fac_ms=0;//ms延时倍乘数
u32 Remote_Odr=0; //命令暂存处
u8 Remote_Cnt=0; //按键次数,此次按下键的次数
u8 Remote_Rdy=0; //红外接收到数据
u8 key;
u8 set_flag=0;
u16 start_year=14;//2014;
u16 start_month=5;//5;
u16 start_day =17;//17;
u16 target_cold;
int start_time_ymd;
int power_val;
u32 fan_detect_cnt;
void delay_init(u8 SYSCLK);
void delay_irda_us(u32 nus);
void delay_us(u32 nus);
void delay_ms(u16 nms);
u8 Remote_Process(void); //红外接收到数据处理
u8 Pulse_Width_Check(void);//检查脉宽
void RCC_Configuration(void); //时钟配置
void GPIO_Configuration(void);//GPIO口配置
void NVIC_Configuraton(void);//flash调试
void RCC_Configuration(void);//时钟配置
void EXTI_Configuration(void);
void Display_0(void); //液晶状态0下面的显示
void Read_THPH(float *wendu,float *shidu);
void read_new_para(void);
u8 moto_goto_start(void);
u8 moto_goto_end(void);
void self_test(void);
void device_init(void);
u8 egg_turn(void);
u8 add_water(u8 init);
//u8 open_wet(void);
u8 egg_erro_flag=0;
u8 wet_erro_flag=0;
u8 sen_erro_flag=0;
u8 sen_erro_flag_S=0;
int sen_erro_all=0;
u8 w_first=0;
u32 w_cnt_t1=0;
u32 w_cnt_t2=0;
u8 turn_flag=0;
u8 no_power_flag,dianchi_flag;
u8 cold_flag;
u32 p_cnt_t1=0;
u32 p_cnt_t2=0;
u32 s1_cnt,s2_cnt;
u32 wet_t_cnt ;
u8 fan_erro_flag;
unsigned char no_water_flag,no_water_flag_pre,get_water_flag;
u32 get_water_cnt;
int temp_cnt;
int fan_cnt,fan_cnt_pre,add_water_cnt,open_wet_cnt,wet_cnt_tj,wet_cnt_si;
u8 wet_many_flag,wet_high_temp;
int max_s1_temp,max_s2_temp;
int min_s1_temp,min_s2_temp;
int max_s1_ph,max_s2_ph;
int min_s1_ph,min_s2_ph;
unsigned short ds18b20_temp,dot,tt;
u32 low_t_cnt,high_t_cnt,low_wet_cnt,high_wet_cnt,power_erro_cnt,bump_erro_cnt,fan_erro_cnt;
void warning_report(void) ;
void IWDG_Init(u8 prer,u16 rlr);
void IWDG_Feed(void);
void fan_ctrl(void);
void egg_cold(void);
void shuiben_test(void);
//void power_switch(void) ;
#define ADC1_DR_Address ((u32)0x4001244C)
#define ADC2_DR_Address ((u32)0x4001284C)
vu16 ADCConvertedValue;
u16 AD_value[2];
//vu16 Temperature;
void DMA_Configuration(void);
void ADC_Configuration(void);
void ADC2_Configuration(void);
void ADC3_Configuration(void);
int chip_temp;
int pw_cnt_t1 ,pw_cnt_t2, no_power_flag_pre;
int water_lever,power_lever;
int pid_cnt;
u16 wet_flag;
u8 dianchi_flag ,dianchi_val;
u8 fan_open_flag;
u8 open_wet(void);
u8 fan_test(void) ;
//void fan_detect() ;
u8 power_detect(void);
u8 blank;
u32 disp_cnt;
u8 oled_write_flag;
u8 sen_use_flag;
int ave_hot,max_hot;
u32 wetfan_cnt,wetfan_cnt_t,date_erro_cnt;
unsigned char too_wet_flag;
u16 wet_power_level;
u16 wet_new;
int u_wet,his_wet;
u32 wet_erro_cnt,wet_erro_cnt1;
u8 wet_short_flag ;
u32 cnt,cnt_egg_time,egg_direct;
int cnt_turn;
int egg_turn_time ;
u8 egg_turn_on;
u8 egg_use_flag;
u32 crc_erro;
u32 read_erro;
u32 crc_erro_S;
u32 read_erro_S;
u8 check_flag = 0;
u8 found_flag = 0;
u8 bit_count = 0;
u32 puls_high_time = 0;
u32 puls_low_time = 0;
u16 ADC_Get_aveg(u8 ch,u8 n);
u16 Get_val(u8 ch);
void hand_turn();
u8 ueid;
u16 ReadADCAverageValue()
{
u8 i;
u32 sum = 0;
/*for(i=0; i<8; i++)
{
sum+=ADCConvertedValue[i];
}
//sum= ADCConvertedValue; */
return (ADCConvertedValue);
}
/* u16 ffan_detect()
{
u16 t1,t2,t4;
float t3;
// adcx=ADC_Get_aveg(ADC_Channel_1,10);
//temp=(float)adcx*(3.3/4096);
// power_lever=(ADC_GetConversionValue(ADC2)*3.3)*110/4096+10;
t1=ADC_Get_aveg(ADC_Channel_17,10);
t2=ADC_Get_aveg(ADC_Channel_7,10);
t3= t2*1200/t1;
t4=(u16)t3;
return(t4);
} */
void temp_cal()
{
vu16 Temperature;
int t;
//t =ADCConvertedValue;
t=ADC_Get_aveg(ADC_Channel_16,10);
Temperature=(1.42-t*3.3/4096)*1000/4.35 + 25;
chip_temp = chip_temp/2+Temperature/2;
if(chip_temp>99) chip_temp=99;
}
// u8 water_detect();
/* u16 ADC_Filter(void)
{
u16 result=0;
u8 i;
for(i=16;i>0;i--)
{
delay_nms(1);
result += ADCConvertedValue;
}
return result/16;
}
*/
/*u8 bird_name[];
void get_bird_name(void); */
void I2C_Mode_config(void);
void get_bird_name(u8 mode)
{
switch(mode)
{
case 0:
bird_name="手动";
fhua_days=1;
step_days[0]=1;
step_days[1]=0;
step_days[2]=0;
step_days[3]=0;
wendu_t[0]=375;
wendu_t[1]=372;
wendu_t[2]=370;
wendu_t[3]=368;
shidu_t[0]=450;
shidu_t[1]=550;
shidu_t[2]=600;
shidu_t[3]=650;
fandan_t[0]=1;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=2;
paifen_t[1]=6;
paifen_t[2]=4;
paifen_t[3]=4;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 1:
bird_name="牡丹";
fhua_days=21;
step_days[0]=5;
step_days[1]=12;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=376;
wendu_t[1]=375;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=600;
shidu_t[1]=550;
shidu_t[2]=600;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 2:
bird_name="玄凤";
fhua_days=21;
step_days[0]=5;
step_days[1]=12;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=376;
wendu_t[1]=375;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=450;
shidu_t[1]=450;
shidu_t[2]=450;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=2;
fandan_t[2]=1;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 3:
bird_name="虎皮";
fhua_days=21;
step_days[0]=5;
step_days[1]=12;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=376;
wendu_t[1]=375;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=600;
shidu_t[1]=550;
shidu_t[2]=600;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 4:
bird_name="和尚";
fhua_days=24;
step_days[0]=5;
step_days[1]=15;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=376;
wendu_t[1]=375;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=450;
shidu_t[1]=450;
shidu_t[2]=450;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 5:
bird_name="太阳";
fhua_days=24;
step_days[0]=5;
step_days[1]=15;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=376;
wendu_t[1]=375;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=550;
shidu_t[1]=550;
shidu_t[2]=550;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 6:
bird_name="灰机";
fhua_days=28;
step_days[0]=6;
step_days[1]=18;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=376;
wendu_t[1]=375;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=450;
shidu_t[1]=430;
shidu_t[2]=450;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 7:
bird_name="折中";
fhua_days=28;
step_days[0]=6;
step_days[1]=18;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=376;
wendu_t[1]=375;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=450;
shidu_t[1]=450;
shidu_t[2]=450;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 8:
bird_name="小鸡";
fhua_days=21;
step_days[0]=5;
step_days[1]=14;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=380;
wendu_t[1]=380;
wendu_t[2]=378;
wendu_t[3]=376;
shidu_t[0]=600;
shidu_t[1]=550;
shidu_t[2]=600;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 9:
bird_name="太平";
fhua_days=19;
step_days[0]=5;
step_days[1]=10;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=376;
wendu_t[1]=375;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=600;
shidu_t[1]=550;
shidu_t[2]=600;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 10:
bird_name="金刚";
fhua_days=26;
step_days[0]=6;
step_days[1]=16;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=376;
wendu_t[1]=375;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=450;
shidu_t[1]=420;
shidu_t[2]=450;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 11:
bird_name="葵花";
fhua_days=28;
step_days[0]=6;
step_days[1]=18;
step_days[2]=3;
step_days[3]=21;
wendu_t[0]=376;
wendu_t[1]=375;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=450;
shidu_t[1]=420;
shidu_t[2]=450;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 12:
bird_name="塞内";
fhua_days=26;
step_days[0]=6;
step_days[1]=16;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=376;
wendu_t[1]=375;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=450;
shidu_t[1]=450;
shidu_t[2]=450;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 13:
bird_name="亚马";
fhua_days=28;
step_days[0]=6;
step_days[1]=18;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=376;
wendu_t[1]=375;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=450;
shidu_t[1]=430;
shidu_t[2]=450;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 14:
bird_name="吸蜜";
fhua_days=26;
step_days[0]=6;
step_days[1]=16;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=376;
wendu_t[1]=375;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=450;
shidu_t[1]=450;
shidu_t[2]=450;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 15:
bird_name="亚历";
fhua_days=25;
step_days[0]=6;
step_days[1]=15;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=376;
wendu_t[1]=374;
wendu_t[2]=372;
wendu_t[3]=370;
shidu_t[0]=450;
shidu_t[1]=450;
shidu_t[2]=450;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 16:
bird_name="鹌鹑";
fhua_days=16;
step_days[0]=3;
step_days[1]=10;
step_days[2]=2;
step_days[3]=1;
wendu_t[0]=380;
wendu_t[1]=380;
wendu_t[2]=378;
wendu_t[3]=376;
shidu_t[0]=550;
shidu_t[1]=550;
shidu_t[2]=600;
shidu_t[3]=650;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 17:
bird_name="孔雀";
fhua_days=27;
step_days[0]=6;
step_days[1]=17;
step_days[2]=3;
step_days[3]=1;
wendu_t[0]=380;
wendu_t[1]=378;
wendu_t[2]=376;
wendu_t[3]=372;
shidu_t[0]=600;
shidu_t[1]=600;
shidu_t[2]=650;
shidu_t[3]=700;
fandan_t[0]=4;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=4;
paifen_t[0]=4;
paifen_t[1]=3;
paifen_t[2]=2;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
case 18:
bird_name="保温";
fhua_days=1;
step_days[0]=1;
step_days[1]=0;
step_days[2]=0;
step_days[3]=0;
wendu_t[0]=365;
wendu_t[1]=372;
wendu_t[2]=370;
wendu_t[3]=368;
shidu_t[0]=500;
shidu_t[1]=520;
shidu_t[2]=600;
shidu_t[3]=650;
fandan_t[0]=0;
fandan_t[1]=0;
fandan_t[2]=0;
fandan_t[3]=0;
paifen_t[0]=2;
paifen_t[1]=1;
paifen_t[2]=1;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=0;
liang_t[3]=0;
egg_size=6;
break;
case 19:
bird_name="保手";
fhua_days=1;
step_days[0]=1;
step_days[1]=0;
step_days[2]=0;
step_days[3]=0;
wendu_t[0]=365;
wendu_t[1]=372;
wendu_t[2]=370;
wendu_t[3]=368;
shidu_t[0]=500;
shidu_t[1]=520;
shidu_t[2]=600;
shidu_t[3]=650;
fandan_t[0]=0;
fandan_t[1]=0;
fandan_t[2]=0;
fandan_t[3]=0;
paifen_t[0]=2;
paifen_t[1]=1;
paifen_t[2]=1;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=0;
liang_t[3]=0;
egg_size=6;
break;
default:
bird_name="手动";
fhua_days=1;
step_days[0]=1;
step_days[1]=0;
step_days[2]=0;
step_days[3]=0;
wendu_t[0]=375;
wendu_t[1]=372;
wendu_t[2]=370;
wendu_t[3]=368;
shidu_t[0]=450;
shidu_t[1]=550;
shidu_t[2]=600;
shidu_t[3]=650;
fandan_t[0]=1;
fandan_t[1]=1;
fandan_t[2]=2;
fandan_t[3]=0;
paifen_t[0]=4;
paifen_t[1]=2;
paifen_t[2]=1;
paifen_t[3]=1;
liang_t[0]=0;
liang_t[1]=0;
liang_t[2]=1;
liang_t[3]=1;
egg_size=6;
break;
}
}
void init_val()
{
fan_detect_cnt=0;
u_wet=0;
his_wet=0;
too_wet_flag=0;
wetfan_cnt=0;
wetfan_cnt_t=0;
fan_erro_flag=0;
fan_erro_cnt=0;
avr_ph_f=400;
add_water_cnt=0;
wet_high_temp=0;
wet_many_flag=0;
open_wet_cnt=0;
wet_cnt_tj=0;
wet_cnt_si=0;
low_t_cnt=0;
high_t_cnt=0;
low_wet_cnt=0;
high_wet_cnt=0;
max_s1_temp=0;
max_s2_temp=0;
min_s1_temp=500;
min_s2_temp=500;
max_s1_ph=0;
max_s2_ph=0;
min_s1_ph=990;
min_s2_ph=990;
power_erro_cnt=0;
bump_erro_cnt=0;
fan_erro_cnt=0;
date_erro_cnt=0;
wet_erro_cnt=0;
wet_erro_cnt1=0;
wet_short_flag=0;
wet_t_cnt=0;
crc_erro=0;
read_erro=0;
crc_erro_S=0;
read_erro_S=0;
sen_erro_flag=0;
sen_erro_flag_S=0;
sen_erro_all=0;
}
int main()
{
u32 cnt_t,tt,t3;
u8 w_t,no_w_flag;
// value humi_val,temp_val;
// unsigned char error,checksum;
// unsigned int wendu,shidu;
// char key_num_check=0x04;
// u8 minute_test = 0x00;
check_flag = 0;
found_flag = 0;
bit_count = 0;
puls_high_time = 0;
puls_low_time = 0;
egg_turn_init();
egg_use_flag=0;
init_val();
wet_state_flag =0;
wet_flag=0;
oled_write_flag=0;
disp_cnt=0;
init_date_state=0;
date_erro_flag=0;
// water_level=0;
fan_cnt=0;
fan_cnt_pre=1;
no_power_flag_pre=0;
chip_temp=0;
pid_cnt=0;
PID_Init();
dianchi_flag=0;
egg_erro_flag=0;
wet_erro_flag=0;
no_water_flag=0;
get_water_flag=0;
sen_erro_flag=0;
sen_erro_all=0;
sen_erro_flag_S=0;
w_first=0;
w_cnt_t1=0;
w_cnt_t2=0;
p_cnt_t1=0;
p_cnt_t2=0;
lcd_close_flag=0;
disp_mode=0;
LCD_now_state = 0x00; //液晶初始化显示状态位0
RCC_Configuration();
GPIO_Configuration();
device_init() ;
//DMA_Configuration();
ADC_Configuration();
ADC2_Configuration();
// ADC3_Configuration();
EXTI_Configuration();
NVIC_Configuraton();
ADC_ITConfig(ADC2,ADC_IT_AWD,ENABLE);
IWDG_Init(7,2500); //16s
IWDG_Feed();
delay_init(72);
// KEY_INIT();
TIMER_INIT();
//GPIO_SetBits(GPIOC,GPIO_Pin_11); //选择适配器
//GPIO_ResetBits(GPIOC,GPIO_Pin_10); //电瓶充电
// Init_DS1302();
LCD_init();
OLED_Init(); //初始化OLED
OLED_Clear() ;
/*
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
delay_nms(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0); */
/*OLED_ChString(0,0,"欢迎中文版本发布");
OLED_ChString(0,2,"中文版本欢迎发布");
OLED_ShowString(0,4,"hello how are",16);
OLED_ShowNum(0,6,123,3,16) ; */
/*oled_disp_china(0,0,"欢迎中文版本发布");
oled_disp_china(1,1,"中文版本欢迎发");
oled_disp_string(2,2,"hello how are"); */
// oled_disp_num(1,3,123,3);
// LCD_disp_char(2,1,digit[(ta%10)]);
/*OLED_ShowCHinese(72,0,4);//子
OLED_ShowCHinese(90,0,5);//科
OLED_ShowCHinese(108,0,6);//技 */
// while(1);
LCD_BK_ONOFF(1); //测试
delay_nms(100);
// LCD_BK_ONOFF(0); //测试
// LCD_disp_str(0,1,"START");
// while(1);
/* GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
delay_nms(100000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0); */
FLASH_Unlock();
Fan_mode = (*(vu8*) (u32)0x08030000);
/* Moto_Runtime = (*(vu8*) (u32)0x0803A800);
Fan1_Opentime = (*(vu8*) (u32)0x0803B000);
Warning_Switch = (*(vu8*) (u32)0x0803B800);
Pump_Runtime = (*(vu8*) (u32)0x0803C000); */
Moto_Runtime = (*(vu8*) (u32)0x08030800);
Fan1_Opentime = (*(vu8*) (u32)0x08031000);
Warning_Switch = (*(vu8*) (u32)0x08031800);
Pump_Runtime = (*(vu8*) (u32)0x08032000);
Cold_Runtime = (*(vu8*) (u32)0x08032800);
Cold_Temp = (*(vu8*) (u32)0x08033000);
High_Temp = (*(vu8*) (u32)0x08033800);
Low_Temp = (*(vu8*) (u32)0x08034000);
Set_self_test = (*(vu8*) (u32)0x08034800);
pid_mode= (*(vu8*) (u32)0x08035000);
wet_time= (*(vu8*) (u32)0x08035800);
bird_mode=(*(vu8*) (u32)0x08036000);
th_step=(*(vu8*) (u32)0x08036800);
wet_fan_speed=(*(vu8*) (u32)0x08037000);
Set_bird_mode= bird_mode;
Set_wet_time=wet_time;
Set_th_step=th_step;
Set_wet_fan=wet_fan_speed;
Set_pid_mode=pid_mode;
Set_Fan_mode = Fan_mode;
Set_Moto_Runtime = Moto_Runtime;
Set_Fan1_Opentime = Fan1_Opentime;
Set_Warning_Switch =Warning_Switch;
Set_Pump_Runtime = Pump_Runtime;
Set_Cold_Runtime=Cold_Runtime;
Set_Cold_Temp=Cold_Temp;
Set_High_Temp=High_Temp;
Set_Low_Temp =Low_Temp;
start_year = (*(vu8*) (u32)0x0803D000);
start_month = (*(vu8*) (u32)0x0803D002);
start_day = (*(vu8*) (u32)0x0803D004);
start_time_ymd = (*(vu8*) (u32)0x0803D010);
// GPIO_OUT_config();
// delay_us(1);
// LCD_disp_str(0,1,"TE");
// LCD_disp_str(0,2,"RH");
// LCD_disp_str(0,1,"p1");
PWM_Init();
TIM2->CCR2 = 0;//0
TIM2->CCR4 = 0;
TIM8->CCR1 = 0;
TIM8->CCR2 = 0;
TIM8->CCR3 = 0;
TIM8->CCR4 = 0;
// GPIO_SetBits(GPIOA,GPIO_Pin_5);
// GPIO_ResetBits(GPIOA,GPIO_Pin_4);
//Moto_Ctrol_Right( );
// moto_goto_start();
/* GPIO_ResetBits(GPIOE,GPIO_Pin_3);
GPIO_ResetBits(GPIOC,GPIO_Pin_3); //关水泵
GPIO_SetBits(GPIOE,GPIO_Pin_3);
do {}while(1); */
temp_cal();
self_test_over=0;
OLED_Clear();
oled_disp_china(3,0,"启动");
delay_nms(2000);
self_test();
s_connectionreset();//sht10
s_connectionreset_S();//sht10
s_softreset();
s_softreset_S();
//Read_THPH_S(wendunum1_S,shidunum1_S); // 显示温度和湿度
//if( Now_TH_S>max_s2_temp) max_s2_temp= Now_TH_S;
self_test_over=1;
egg_flag=1;
Run_YN=1;
/* OLED_Clear();
oled_disp_china(3,0,"启动");
delay_nms(2000);*/
//PWM_Init();
///*****************************初始化温度显示区***********************************/
// LCD_disp_str(2,1,"TTT.TC");
//
///*****************************初始化湿度显示区***********************************/
/* LCD_disp_str(2,2,"RRR.R%");
delay_nms(10);
LCD_clr();
LCD_write_command(0x0C);//显示开,关光标,闪烁
Read_THPH(wendunum1,shidunum1); // 显示温度和湿度
Display_0();
delay_nms(500);
Moto_Ctrol_Right();
delay_nms(1000);
Moto_Stop();
delay_nms(1000); */
// Moto_Ctrol_Left();
/*TEST FOR ds1302*/
// LCD_clr();
// while(1)
// {
/* Date_Read(); //读取当前日期
Display_date(); //显示当前日期
delay_nms(2000);
*/
/* do
{
}
while(1); */
// }
// Date_Display(); // 显示日期
LCD_now_state = 0x00;
LCD_next_state = 0x00;
wetfan_state=0x00;
hotfan_state=0x00;
LCD_mouse = 0;
// LCD_disp_str(0,2," ");
// LCD_disp_str(0,1,"->");
// LCD_disp_str(2,1,table_0[0]);
// LCD_disp_str(2,2,table_0[1]);
key_num_check_flg = 0x00;
/*****************************************************
初始化显示起始页面
******************************************************/
// Read_THPH(wendunum1,shidunum1); // 读取当前温度和湿度
Run_days = 1; //初始启动默认没启动
Run_YN = 1; //默认不启动
LCD_now_state = 0x00; //初始化液晶显示状态机状态为0
LCD_next_state = 0x00;
// Display_0(); //显示默认页面
PID_Check_flg = 0;
Display_tp_flag = 0;
GPIO_SetBits(GPIOE,GPIO_Pin_3); //关加湿
GPIO_SetBits(GPIOC,GPIO_Pin_3); //关水泵
// LCD_disp_str(0,1,"p3");
read_new_para();
// if(Set_self_test==2)
// {
// ds18b20_start();
// }
cnt_wet=0;
cnt_wet_h=0;
s2_cnt=0;
hand_egg_turn=0;
hand_add_water=0;
while(1)
{
/*s1_cnt= cnt;
if(s1_cnt!=s2_cnt)
{
Read_THPH_S(wendunum1_S,shidunum1_S); // 显示温度和湿度
if( Now_TH_S>max_s2_temp) max_s2_temp= Now_TH_S;
s2_cnt= cnt;
} */
temp_cal();
if(lcd_close_flag==1)
{
low_t_cnt=0;
high_t_cnt=0;
low_wet_cnt=0;
high_wet_cnt=0;
power_erro_cnt=0;
bump_erro_cnt=0;
fan_erro_cnt=0;
add_water_cnt=0;
open_wet_cnt=0;
max_s1_temp=0;
max_s2_temp=0;
min_s1_temp=500;
min_s2_temp=500;
max_s1_ph=0;
max_s2_ph=0;
min_s1_ph=990;
min_s2_ph=990;
fan_erro_cnt=0;
wetfan_cnt=0;
date_erro_cnt=0;
wet_erro_cnt=0;
wet_erro_cnt1=0;
wet_short_flag=0;
// sen_erro_flag=0;
// sen_erro_flag_S=0;
}
// if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_7)==0)
//fan_cnt=TIM1->CNT; //fan_cnt+1;
/*chip_temp =ADC_Filter();
Temperature=(1.42-chip_temp*3.3/4096)*1000/4.35 + 25;
chip_temp = Temperature; */
/* if(Set_self_test==3)
{
// power_switch() ;
} */
IWDG_Feed();
// shuiben_test();
/// LCD_disp_str(0,1,"p4");
if(Remote_Rdy)
{
display();
}
t3 = (u32)TIM_GetCounter(TIM3);
if(t3>20000 && found_flag==1)
{
GPIO_ResetBits(GPIOC,GPIO_Pin_0); //guan蜂鸣器
}
if(lcd_close_flag==1)
{
GPIO_ResetBits(GPIOE,GPIO_Pin_4); //关背光
// OLED_Init();
//OLED_Display_Off();
// OLED_Init();
}
else
{
//OLED_Display_On();
}
/* if(Set_self_test==2)
{
tt= ds18b20_read();
if(tt!=0) ds18b20_temp =tt;
} */
if(Run_YN != 0) //表示系统启动工作,开始加热加温,正常工作
{
// add_water();
// cnt=2;
// LCD_disp_char(0,0,digit[cnt%10]);
// cnt=cnt+1;
//fan
/*GPIO_SetBits(GPIOA,GPIO_Pin_7);
GPIO_ResetBits(GPIOA,GPIO_Pin_6);
GPIO_SetBits(GPIOA,GPIO_Pin_3); */
//fan
//fan_set();
if(LCD_now_state == 0x00)
{
egg_cold();
read_new_para();
Set_Input_Day_Num_t=Set_Input_Day_Num;
}
IWDG_Feed();
// no_power_flag= GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5);
no_power_flag=power_detect();
if(no_power_flag==1)
{
pw_cnt_t1=cnt;
no_power_flag_pre=1;
}
pw_cnt_t2=cnt;
if(( pw_cnt_t2-pw_cnt_t1)>32)
{
no_power_flag_pre=0;
}
if(no_power_flag==1 || no_power_flag_pre==1)
{
wet_erro_flag=0;
egg_erro_flag=0;
egg_turn_init();
sen_erro_flag=0;
sen_erro_flag_S=0;
sen_erro_all=0;
hand_egg_turn=1;
}
if(no_power_flag==0)
{
// if(egg_erro_flag==0) egg_turn();
hand_turn();
IWDG_Feed();
fan_ctrl();
/********************风扇和加湿控制****************************/
// if(Now_PH>target_Shidu) //当检测的湿度大于设置湿度+5时则关掉加湿
// {
// GPIO_SetBits(GPIOE,GPIO_Pin_3); //关加湿
// }
// LCD_disp_str(0,1,"p5");
/*if(Now_PH<target_Shidu-10)
{
if(wet_erro_flag==0)
open_wet();
} */
}
// LCD_disp_str(0,1,"p6");
IWDG_Feed();
// Date_Display();
if(Display_tp_flag == 1)
{
if(LCD_now_state == 0x00) //当前状态在0X00状态下
{
Display_0(); //刷新显示页面
}
disp_cnt= disp_cnt+1;
}
Display_tp_flag = 0;
// delay_nms(500);
// PID_Check_flg = 0x00;
// }
cnt_t=cnt;
w_t=Pump_Runtime/10;
if(cnt_t%16 == 0x00&&LCD_now_state == 0x00)
{
if(w_t==1)
{
tt=2048;
}
else if(w_t==0)
{
tt=1024;
}
else if(w_t==2)
{
tt=512;
}
else if(w_t==4)
{
tt=8192;
}
else if(w_t==5)
{
tt=64;
}
else
{
tt=4096;
}
if((Now_PH_D<(target_Shidu -20))&&(cnt_t%512==0)&&(Set_self_test !=8)&&(wet_erro_flag==0))
{
wet_erro_flag= add_water(2);
}
else
{
if((wet_erro_flag==0&& cnt_t%tt==0) && (Set_self_test !=8))
{
wet_erro_flag= add_water(0);
}
}
/*if(cnt_t%512==0)
{
fan_detect();
} */
warning_report();
}
if(hand_add_water==1)
{
wet_erro_flag=0 ;
wet_erro_flag= add_water(0);
hand_add_water=0;
}
}
else
{
hand_egg_turn=1;
init_val();
egg_turn_on=0;
egg_erro_flag=0;
GPIO_SetBits(GPIOC,GPIO_Pin_3); //关水泵
GPIO_SetBits(GPIOE,GPIO_Pin_3); //关加湿
TIM8->CCR1 = 0; //关排风
TIM8->CCR2=0; //关热风
TIM8->CCR3=0; //关辅热风扇
TIM8->CCR4=0; //关加湿热风扇
// GPIO_ResetBits(GPIOC,GPIO_Pin_1); //关风扇
Close_jiashi_flg = 0x01; //没有启动是不会抽水的
// Moto_Stop();
TIM2->CCR3 = 0;
TIM3->CCR1 = 0;
TIM3->CCR2 = 0;
PID_Init();
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
if(Display_tp_flag == 1)
{
// Read_THPH(wendunum1,shidunum1); // 显示温度和湿度
if(LCD_now_state == 0x00) //当前状态在0X00状态下
{ //read_new_para();
Display_0(); //刷新显示页面
}
Display_tp_flag = 0;
disp_cnt= disp_cnt+1;
}
}
IWDG_Feed();
}
}
void device_init(void)
{
GPIO_SetBits(GPIOC,GPIO_Pin_3); //关水泵
GPIO_SetBits(GPIOE,GPIO_Pin_3); //关湿度
// GPIO_SetBits(GPIOC,GPIO_Pin_6); //关风扇1
TIM8->CCR1 = 0;
// GPIO_SetBits(GPIOC,GPIO_Pin_7); //关风扇2
TIM8->CCR2 = 0;
TIM8->CCR3=0; //关辅热风扇
TIM8->CCR4=0; //关加湿热风扇
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
GPIO_SetBits(GPIOA,GPIO_Pin_2); //关风扇2
// delay_nms(1000); //
// GPIO_ResetBits(GPIOA,GPIO_Pin_2);
GPIO_SetBits(GPIOB,GPIO_Pin_12); //关高亮LED
Moto_Stop();
}
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
IWDG_SetPrescaler(prer);
IWDG_SetReload(rlr);
IWDG_ReloadCounter();
IWDG_Enable();
}
void IWDG_Feed(void)
{
IWDG_ReloadCounter();
}
void time_check()
{
if( init_date_state==0)
{
cnt_d=cnt;
second_d=second;
minute_d=minute;
hour_d=hour;
}
if( init_date_state==1)
{
if(cnt>cnt_d+8)
{
if( (hour_d==hour&& minute_d== minute &&second_d==second ) || (minute> (minute_d+4) ))
{
date_erro_flag=1;
}
else
{
date_erro_flag=0;
}
cnt_d=cnt;
second_d=second;
minute_d=minute;
hour_d=hour;
if(date_erro_flag==1)
{date_erro_cnt++;}
}
}
init_date_state=1;
}
void day_cal(void)
{
char day_time0[12]={31,28,31,30,31,30,31,31,30,31,30,31};
char day_time1[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int start_day_cnt,now_day_cnt,i,run_day_t;
Date_Read();
time_check();
start_day_cnt=0;
if(start_year%4==0)
{
for( i=1;i<start_month;i++)
{
start_day_cnt=start_day_cnt+day_time1[i-1];
}
start_day_cnt=start_day_cnt+start_day ;
}
else
{
for( i=1;i<start_month;i++)
{
start_day_cnt=start_day_cnt+day_time0[i-1];
}
start_day_cnt=start_day_cnt+start_day ;
}
now_day_cnt=0;
if(year%4==0)
{
for( i=1;i<month;i++)
{
now_day_cnt=now_day_cnt+day_time1[i-1];
}
now_day_cnt=now_day_cnt+day ;
}
else
{
for( i=1;i<month;i++)
{
now_day_cnt=now_day_cnt+day_time0[i-1];
}
now_day_cnt=now_day_cnt+day ;
}
if(year>start_year)
{
if(start_year%4==0)
{
now_day_cnt= now_day_cnt+366;
}
else
{
now_day_cnt= now_day_cnt+365;
}
}
// if(hour==23 && minute ==59 && set_flag==0)
// {
// set_flag=1;
/* if(year> start_year)
{
month = month+12;
}
if(month>start_month)
{
day=day+30;
} */
//Run_days=now_day_cnt-start_day_cnt+1;
run_day_t=now_day_cnt-start_day_cnt+start_time_ymd;
if(run_day_t<1)
{
Run_days=1;
}
else if( run_day_t>99)
{
Run_days=99;
}
else
{
Run_days=run_day_t;
}
}
void read_new_para(void)
{
int t2,t;
if(Moto_Runtime>0&&Moto_Runtime<100)
{
t=Moto_Runtime;
}
else
{
t=8;
}
Readflash((u32)0x08039000,1,4,Flash_Read_Days_TH_PH_Turn_All_Set);
Flash_Read_Days_TH_PH_Turn_All_Set[4] = Run_days;
// ErasePageflash((u32)0x0801f000 ,0);
// Writeflash((u32)0x0801f000,Flash_Read_Days_TH_PH_Turn_All_Set,1,5);
// Set_Input_Day_Num=Flash_Read_Days_TH_PH_Turn_All_Set[0] ;
Set_Input_Day_Num = Flash_Read_Days_TH_PH_Turn_All_Set[0];//天数
if(Set_Input_Day_Num<=0|| Set_Input_Day_Num>99)
{
Set_Input_Day_Num=1;
}
day_cal();
if(Run_days>Set_Input_Day_Num) Run_days= Set_Input_Day_Num;
Readflash((u32)0x0803E000,1,Set_Input_Day_Num+1,Read_Temp_Flash_Date);
Readflash((u32)0x0803E800,1,Set_Input_Day_Num+1,Read_Shidu_Flash_Date);
Readflash((u32)0x0803F000,1,Set_Input_Day_Num+1,Read_Fanzhuan_Flash_Date);
Readflash((u32)0x0803F800,1,Set_Input_Day_Num+1,Set_fan_runtime);
Readflash((u32)0x0803D800,1,Set_Input_Day_Num+1,Set_egg_codetime);
if(Set_Cold_Temp>=30&&Set_Cold_Temp<=40)
{
t2=Set_Cold_Temp*10;
}
else
{
t2=350;
}
if(cold_flag==1)
{
target_temprature=t2 ;
}
else
{
target_temprature = Read_Temp_Flash_Date[Run_days];
}
target_Shidu = Read_Shidu_Flash_Date[Run_days];
target_moto = Read_Fanzhuan_Flash_Date[Run_days];
target_fan = Set_fan_runtime[Run_days];
target_cold = Set_egg_codetime[Run_days];
if((target_moto ==0) || (Set_bird_mode==19||Set_bird_mode==18) ||(no_power_flag==1))
{
egg_turn_on=0;
egg_turn_time=180000;
}
else
{
egg_turn_on=1;
if( target_moto <9)
{
//egg_turn_time=target_moto*180;//1800;
egg_turn_time=target_moto*40;//30;//1800;
}
else
{
egg_turn_time=4;//1800;
}
}
}
void shuiben_test()
{
do
{
GPIO_ResetBits(GPIOC,GPIO_Pin_3);
delay_nms(1000);
IWDG_Feed();
GPIO_SetBits(GPIOC,GPIO_Pin_3);
delay_nms(10000);
}
while(1);
}
void self_test(void)
{
unsigned char t1,t2;
int i,j;
u8 erro_flag;
i=0;
j=0;
/* Moto_Ctrol_Right();
do
{
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==0)
{
i++ ;
}
j++;
LCD_disp_char(13,1,digit[(i%1000/100)]);
LCD_disp_char(14,1,digit[(i%100/10)]);
LCD_disp_char(15,1,digit[(i%10)]);
LCD_disp_char(13,2,digit[(j%1000/100)]);
LCD_disp_char(14,2,digit[(j%100/10)]);
LCD_disp_char(15,2,digit[(j%10)]);
delay_nms(500);
}
while(1) ; */
LCD_clr();
LCD_disp_str(0,1," Hello ");
LCD_disp_str(0,2,"H20_DS 20150420");
OLED_Clear();
oled_disp_china(0,0,"欢迎光临");
// delay_nms(2000);
oled_disp_china(0,1,"版本号");
// delay_nms(2000);
oled_disp_string(0,2,"9G_v03 20180224");
delay_nms(2000);
// while(1);
if(Set_self_test!=0)
{
LCD_clr();
LCD_disp_str(0,1,"Power is testing ");
OLED_Clear();
oled_disp_china(1,0,"电源电压自检");
erro_flag=power_detect();
if(erro_flag==1)
{
LCD_disp_str(0,2,"Power is erro ");
oled_disp_china(0,2,"电源电压自检异常");
}
else
{
LCD_disp_str(0,1,"Power is OK ");
LCD_disp_str(0,2,"level: ");
LCD_disp_char(11,2,digit[(power_lever%1000/100)]);
LCD_disp_char(12,2,digit[(power_lever%100/10)]);
LCD_disp_str(13,2,".");
LCD_disp_char(14,2,digit[(power_lever%10)]);
LCD_disp_str(15,2,"V");
oled_disp_china(0,2,"电源电压自检正常");
oled_disp_china(0,3,"电源电压");
oled_disp_num(8,3,power_lever/10,2);
oled_disp_string(10,3,".");
oled_disp_num(11,3,power_lever%10,1);
oled_disp_string(12,3,"V");
}
delay_nms(2000);
IWDG_Feed();
LCD_clr();
LCD_disp_str(0,1,"pump is testing ");
OLED_Clear();
oled_disp_china(1,0,"水泵加湿自检");
// LCD_disp_str(0,2,"wait 20 seconds ");
erro_flag=0;
// GPIO_ResetBits(GPIOE,GPIO_Pin_3);
delay_nms(2000);
erro_flag=add_water(1);
// GPIO_SetBits(GPIOE,GPIO_Pin_3); //关加湿
if(erro_flag==1)
{
LCD_disp_str(0,2,"pump is bad! ");
oled_disp_china(0,2,"水泵加湿自检异常");
wet_erro_flag=1;
}
else
{
LCD_disp_str(0,2,"pump is ok! ");
oled_disp_china(0,2,"水泵加湿自检正常");
}
delay_nms(3000);
IWDG_Feed();
/*
LCD_clr();
LCD_disp_str(0,1,"wet is testing ");
// LCD_disp_str(0,2,"wait 20 seconds ");
erro_flag=0;
GPIO_ResetBits(GPIOE,GPIO_Pin_3);
delay_nms(2000);
erro_flag=water_check();
GPIO_SetBits(GPIOE,GPIO_Pin_3); //关加湿
if(erro_flag==1)
{
LCD_disp_str(0,2,"Wet is bad! ");
wet_erro_flag=1;
}
else
{
LCD_disp_str(0,2,"Wet is ok! ");
}
delay_nms(3000); */
LCD_clr();
LCD_disp_str(0,1,"HOT fan is testing ");
LCD_disp_str(0,2,"wait 3 seconds ");
OLED_Clear();
oled_disp_china(1,0,"加热风扇自检");
// GPIO_ResetBits(GPIOC,GPIO_Pin_7);
/* TIM8->CCR2 = 15000;
delay_nms(3000);
TIM8->CCR2 = 0 ;*/
erro_flag=fan_test();
if(erro_flag==1)
{
LCD_disp_str(0,2,"HOT Fan is bad! ");
oled_disp_china(0,2,"加热风扇自检异常");
}
else
{
LCD_disp_str(0,2,"HOT Fan is OK! ");
oled_disp_china(0,2,"加热风扇自检正常");
}
delay_nms(3000);
IWDG_Feed();
/* LCD_clr();
LCD_disp_str(0,1,"AIR fan is testing ");
LCD_disp_str(0,2,"wait 3 seconds "); */
OLED_Clear();
oled_disp_china(1,0,"辅风扇自检");
oled_disp_china(0,2,"运转三秒");
oled_disp_china(0,3,"听是否有辅风声");
//GPIO_ResetBits(GPIOC,GPIO_Pin_6);
TIM8->CCR3 = 20000;
delay_nms(3000);
TIM8->CCR3 = 0;
IWDG_Feed();
OLED_Clear();
oled_disp_china(1,0,"加湿风扇自检");
oled_disp_china(0,2,"运转三秒");
oled_disp_china(0,3,"听是否有湿风声");
//GPIO_ResetBits(GPIOC,GPIO_Pin_6);
TIM8->CCR4 = 20000;
delay_nms(3000);
TIM8->CCR4 = 0;
IWDG_Feed();
// GPIO_SetBits(GPIOC,GPIO_Pin_7); //关风扇2
// GPIO_SetBits(GPIOA,GPIO_Pin_2); //关风扇2
// delay_nms(1000); //
// GPIO_ResetBits(GPIOA,GPIO_Pin_2);
LCD_clr();
LCD_disp_str(0,1,"AIR fan is testing ");
LCD_disp_str(0,2,"wait 3 seconds ");
OLED_Clear();
oled_disp_china(1,0,"排风风扇自检");
oled_disp_china(0,2,"运转三秒");
oled_disp_china(0,3,"听是否有排风声");
//GPIO_ResetBits(GPIOC,GPIO_Pin_6);
TIM8->CCR1 = 20000;
delay_nms(3000);
TIM8->CCR1 = 0;
IWDG_Feed();
// GPIO_SetBits(GPIOC,GPIO_Pin_6); //关风扇1
/* LCD_disp_str(0,1," led is testing ");
LCD_disp_str(0,2,"wait 3 seconds ");
GPIO_ResetBits(GPIOB,GPIO_Pin_12);
delay_nms(3000);
GPIO_SetBits(GPIOB,GPIO_Pin_12); //关高亮LED */
LCD_clr();
LCD_disp_str(0,1,"beep is testing ");
LCD_disp_str(0,2,"wait 3 seconds ");
OLED_Clear();
oled_disp_china(1,0,"蜂鸣器自检");
oled_disp_china(0,2,"运转三秒");
oled_disp_china(0,3,"听是否鸣叫");
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
delay_nms(3000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
IWDG_Feed();
LCD_clr();
LCD_disp_str(0,1,"egg turn is testing");
OLED_Clear();
oled_disp_china(1,0,"翻蛋蛋盘自检");
// LCD_disp_str(0,2,"goto start ");
erro_flag=0;
erro_flag= moto_goto_start();
if( erro_flag==0)
{
// LCD_disp_str(0,2,"goto end ");
erro_flag= moto_goto_end();
}
if(erro_flag==0)
{
// LCD_disp_str(0,2,"goto start 2 ");
erro_flag=moto_goto_start();
}
if(erro_flag==0)
{
LCD_disp_str(0,1,"egg turn is OK! ");
oled_disp_china(0,2,"翻蛋蛋盘自检正常");
}
else
{
LCD_disp_str(0,1,"egg turn is bad! ");
oled_disp_china(0,2,"翻蛋蛋盘自检异常");
egg_erro_flag=1;
}
delay_nms(3000);
}
}
u8 moto_goto_start(void)
{
u32 cnt_t1,cnt_t2 ,i,i2 ;
u8 erro_flag;
if(Set_bird_mode==19 ||Set_bird_mode==18)
{
erro_flag=0;
}
else
{
LCD_disp_str(0,2,"egg go to start ");
oled_disp_china(0,1,"蛋盘滑板移到起点");
cnt_t1=cnt;
Moto_Ctrol_Right();
Moto_Ctrol_Right_S();
//delay_nms(5000);
erro_flag=0;
do{
i= GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14);
if(i==0)
{
Moto_Stop();
}
if(Set_self_test==3)
{
i2= GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11);
}
else
{
i2=0;
}
if(i2==0)
{
Moto_Stop_S();
}
cnt_t2=cnt;
if((cnt_t2-cnt_t1)>48)
{
erro_flag=1;
break;
}
IWDG_Feed();
/*LCD_disp_char(13,1,digit[(i%1000/100)]);
LCD_disp_char(14,1,digit[(i%100/10)]);
LCD_disp_char(15,1,digit[(i%10)]); */
delay_nms(100);
}
while(i==1 || i2==1) ;
Moto_Stop();
Moto_Stop_S();
}
return(erro_flag);
}
u8 moto_goto_end(void)
{
int t,i;
u32 cnt_t1,cnt_t2;
u8 erro_flag;
if(Set_bird_mode==19||Set_bird_mode==18)
{
erro_flag=0;
}
else
{ LCD_disp_str(0,2,"egg go to end ");
oled_disp_china(0,1,"蛋盘滑板移到终点");
if(Moto_Runtime>0&&Moto_Runtime<100)
{
t=Moto_Runtime;
}
else
{
t=8;
}
Moto_Ctrol_Left();
Moto_Ctrol_Left_S();
cnt_t1=cnt;
do{
cnt_t2=cnt;
delay_nms(100);
IWDG_Feed();
}
while( cnt_t2-cnt_t1<t) ;
/* for(i=0;i<t;i++)
{
delay_nms(1000);
IWDG_Feed();
} */
// delay_nms(t);
Moto_Stop();
Moto_Stop_S();
if(Set_self_test==3)
{
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==0 ||GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==0)
erro_flag=1;// return(1);
else
erro_flag=0;
}
else
{
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==0)
erro_flag=1;// return(1);
else
erro_flag=0;
}
}
return(erro_flag);
}
/*u8 moto_goto_start(void)
{
u32 cnt_t1,cnt_t2 ;
u8 erro_flag;
int t,i;
cnt_t1=cnt;
Moto_Ctrol_Right();
erro_flag=0;
if(Moto_Runtime>0&&Moto_Runtime<20)
{
t=Moto_Runtime;
}
else
{
t=8;
}
Moto_Ctrol_Right();
for(i=0;i<t;i++)
{
delay_nms(1000);
IWDG_Feed();
}
Moto_Stop();
return(erro_flag);
}
u8 moto_goto_end(void)
{
int t,i;
if(Moto_Runtime>0&&Moto_Runtime<20)
{
t=Moto_Runtime;
}
else
{
t=8;
}
Moto_Ctrol_Left();
for(i=0;i<t;i++)
{
delay_nms(1000);
IWDG_Feed();
}
Moto_Stop();
// if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==0)
// return(1);
// else
return(0);
} */
u8 power_detect()
{
u16 t1,t2;
float t3;
// adcx=ADC_Get_aveg(ADC_Channel_1,10);
//temp=(float)adcx*(3.3/4096);
// power_lever=(ADC_GetConversionValue(ADC2)*3.3)*110/4096+10;
t1=ADC_Get_aveg(ADC_Channel_17,10);
t2=ADC_Get_aveg(ADC_Channel_14,10);
t3= t2*11*12/t1;
power_lever=(int)t3;
if(power_lever>380|| power_lever<100)
{
dianchi_flag=0;
return (1);
}
else
{
if(power_lever<170)
{
dianchi_flag=1;
/* if(power_lever>=210)
{
dianchi_val=100;
}
else if(power_lever>=203 && power_lever<210 )
{
dianchi_val=90;
}
else if(power_lever>=199 && power_lever<203 )
{
dianchi_val=80;
}
else if(power_lever>=196 && power_lever<199 )
{
dianchi_val=70;
}
else if(power_lever>=193 && power_lever<196 )
{
dianchi_val=60;
}
else if(power_lever>=191 && power_lever<193 )
{
dianchi_val=50;
}
else if(power_lever>=189 && power_lever<191 )*/
if(power_lever>=179 && power_lever<170)
{
dianchi_val=40;
}
else if(power_lever>=168 && power_lever<169 )
{
dianchi_val=30;
}
else if(power_lever>=167 && power_lever<168 )
{
dianchi_val=20;
}
else if(power_lever>=164 && power_lever<167 )
{
dianchi_val=10;
}
else if(power_lever>=152 && power_lever<164 )
{
dianchi_val=5;
}
else
{
dianchi_val=0;
}
}
else
{
dianchi_flag=0;
}
return(0);
}
}
/*u8 water_detect()
{
water_lever=(ADC_GetConversionValue(ADC3)*3.3)*10/4096;
if(water_lever<10)
{
return (0);
}
else
{
return(1);
}
} */
u8 fan_test()
{
u32 t1,t2;
// t1= TIM_GetCounter(TIM1);
TIM_SetCounter(TIM1, 0);
TIM8->CCR2 = 20000;
delay_nms(2000);
TIM8->CCR2 = 0 ;
t2= (u32) TIM_GetCounter(TIM1);
//if(t2==t1&&(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_7)==1))
if(t2<20)
{
return(1);
}
else
{
return(0);
}
TIM_SetCounter(TIM1, 0);
}
/*u8 egg_turn()
{
u8 erro_flag;
erro_flag=0;
if(Set_bird_mode==19||Set_bird_mode==18)
{
erro_flag=0;
}
else
{
if(((target_moto!=0)&&(hour % target_moto==0) && (minute==0) && (turn_flag==0))||(hand_egg_turn==1))
{
turn_flag =1;
if(egg_flag==0)
{
erro_flag=moto_goto_start();
egg_flag=1;
egg_erro_flag= erro_flag;
}
else
{
erro_flag= moto_goto_end();
egg_flag=0;
egg_erro_flag= erro_flag;
}
hand_egg_turn=0;
}
if(minute!=0) turn_flag=0;
}
return(erro_flag);
} */
void hand_turn()
{
u8 erro_flag;
erro_flag=0;
if(Set_bird_mode==19||Set_bird_mode==18)
{
egg_erro_flag=0;
}
else
{
if(hand_egg_turn==1&& egg_erro_flag==0)
{
egg_use_flag=1;
erro_flag=moto_goto_start();
egg_erro_flag= erro_flag;
erro_flag= moto_goto_end();
egg_erro_flag= erro_flag;
erro_flag=moto_goto_start();
egg_erro_flag= erro_flag;
egg_turn_init();
egg_use_flag=0;
}
hand_egg_turn=0;
}
}
void fan_ctrl(void)
{
int ph_t;
int fan_mode_air,air_fan_speed;
fan_mode_air=Fan_mode%100/10;
if(fan_mode_air>=0&&fan_mode_air<=8)
{
air_fan_speed=20000-2000*fan_mode_air;
}
else //(Fan_mode==9)
{
air_fan_speed=4000;
}
if(Now_PH_D <target_Shidu+20)
{
wet_t_cnt=cnt;
}
switch(wetfan_state)
{case 0x00:
// if (Now_PH_D>(target_Shidu +wet_time*10)||(avr_ph>target_Shidu+20))
if (Now_PH_D>(target_Shidu +wet_time*10)||(cnt>wet_t_cnt+120))
wetfan_state=0x01;
else
wetfan_state=0x00;
break;
case 0x01:
if (Now_PH_D<=target_Shidu +10 )
wetfan_state=0x00;
else
wetfan_state=0x01;
break;
default:
wetfan_state=0x00;
break;
}
switch(hotfan_state)
{case 0x00:
if (Now_TH_D>(target_temprature+5))
hotfan_state=0x01;
else
hotfan_state=0x00;
break;
case 0x01:
if (Now_TH_D<=target_temprature )
{hotfan_state=0x02;
hot_cnt=cnt;
}
else
hotfan_state=0x01;
break;
case 0x02:
if (Now_TH_D>(target_temprature+20))
{
hotfan_state=0x01;
}
else if (cnt>(hot_cnt+360) )
{
hotfan_state=0x00;
}
else
hotfan_state=0x02;
break;
default:
hotfan_state=0x00;
break;
}
/*if(avr_ph>target_Shidu+20)
{
ph_t=0;
}
else
{
ph_t=wet_time*10;
} */
if(hotfan_state==0x01)
{
wet_high_temp=1;
}
else
{
wet_high_temp=0;
}
if(cold_flag==0)
{
// if((Now_TH>(target_temprature+5)) || (Now_PH_D>(target_Shidu + ph_t)))
if((hotfan_state==0x01) || (wetfan_state==0x01))
{
TIM8->CCR1 = air_fan_speed;//20000;
fan_open_flag=1;
}
else if((target_fan!=0)&&(hour % target_fan==0))
{ if(minute>=1&& minute<=Set_Fan1_Opentime)
{
TIM8->CCR1 =air_fan_speed;// 20000;
fan_open_flag=1;
}
else
{
//delay_nms(3000);
TIM8->CCR1 = 0;
fan_open_flag=0;
}
}
else
{
TIM8->CCR1 = 0;
fan_open_flag=0;
}
}
else
{
TIM8->CCR1 = air_fan_speed;//20000;
fan_open_flag=1;
}
}
void egg_cold(void)
{
int t,t2;
if((target_cold!=0))
{ t=24/target_cold;
if(hour%t==0)
{
if(minute>=1&& minute<=Set_Cold_Runtime)
{
// target_temprature =t2 ;
//TIM8->CCR1 = 20000;
cold_flag=1;
}
else
{
//TIM8->CCR1 = 0;
cold_flag=0;
}
}
else
{
//TIM8->CCR1 = 0;
cold_flag=0;
}
}
else
{
//TIM8->CCR1 = 0;
cold_flag=0;
}
}
u8 add_water(u8 init)
{
u16 i;
u8 erro_flag,water_flag,key_t;
u8 t;
int delay_t ;
if(Set_self_test==9)
{
erro_flag=0;
}
else
{
break_flag=0;
erro_flag=0;
if(init==2)
{
wet_flag=1;
GPIO_ResetBits(GPIOE,GPIO_Pin_3); //开加湿
oled_disp_china(0,2,"加湿自检");
delay_nms(1000);
IWDG_Feed();
water_flag=water_check();
GPIO_SetBits(GPIOE,GPIO_Pin_3); //关加湿器
wet_flag=0;
if(water_flag==0)
{
return( erro_flag);
}
}
wet_flag=1;
GPIO_ResetBits(GPIOE,GPIO_Pin_3); //开加湿
LCD_disp_str(0,2,"add water step1 ");
oled_disp_china(0,2,"水泵加水第一步骤");
GPIO_ResetBits(GPIOC,GPIO_Pin_3);
// do
if(init==1)
{
delay_t=55;
}
else
{
delay_t=15;
}
for(i=0;i<delay_t;i++)
{
// if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_15)==1) break;
delay_nms(1000);
IWDG_Feed();
water_flag=water_check();
// key_t=Remote_Process();
// if(key_t==0xC2) break_flag=1;
// if( GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==0)
if(water_flag==0 ||(Now_PH_D>900 && init==0))
{
erro_flag=0;
break;
}
erro_flag=1;
}
// while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==1) ;
GPIO_SetBits(GPIOE,GPIO_Pin_3); //关加湿器
wet_flag=0;
LCD_disp_str(0,2,"add water step2 ");
oled_disp_china(0,2,"水泵加水第二步骤");
/*if(Pump_Runtime>0&&Pump_Runtime<60)
{
t=Pump_Runtime;
}
else
{
t=12;
} */
t=Pump_Runtime%10;
//if(init==1) t=t*2;
IWDG_Feed();
if( erro_flag==0)
{
for(i=0;i<t;i++)
{
if(Now_PH_D>900 && init==0)
{
break;
}
delay_nms(1000);
IWDG_Feed();
}
}
IWDG_Feed();
GPIO_SetBits(GPIOC,GPIO_Pin_3); //关水泵
}
add_water_cnt++;
return( erro_flag);
}
/*u8 open_wet(void)
{
u8 erro_flag;
int i,t;
IWDG_Feed();
erro_flag=0;
w_cnt_t2=cnt;
if(Set_self_test==9)
{
wet_erro_flag=0;
if(w_cnt_t2-w_cnt_t1>1800)
{
w_cnt_t1=cnt;
erro_flag=add_water();
}
}
else
{
no_water_flag= water_check() ;
if(wet_erro_flag ==0)
{
if(no_water_flag==1)
{
erro_flag=add_water();
wet_erro_flag= erro_flag;
add_water_cnt++;
}
}
}
return( erro_flag);
}
*/
void warning_report(void)
{
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;
int t;
int delta_tt;
u8 fan_flag,power_flag;
wet_warn_s=Warning_Switch&0x01;
egg_warn_s=(Warning_Switch&0x02)>>1;
sen_warn_s=(Warning_Switch&0x04)>>2;
hight_warn_s=(Warning_Switch&0x08)>>3;
lowt_warn_s=(Warning_Switch&0x10)>>4;
power_warn_s=(Warning_Switch&0x20)>>5;
fan_warn_s=(Warning_Switch&0x40)>>6;
low_wet_s= (Warning_Switch&0x80)>>7;
if(wet_erro_flag==1&&wet_warn_s==1)
{ LCD_clr();
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
LCD_disp_str(0,1,"Erro No: 000 ");
LCD_disp_str(0,2,"pump is bad!");
OLED_Clear();
oled_disp_china(0,0,"错误编号");
oled_disp_string(8,0,":000");
oled_disp_china(0,1,"水泵加湿异常");
delay_nms(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
bump_erro_cnt++;
}
IWDG_Feed();
if(wet_short_flag==1&&wet_warn_s==1)
{ LCD_clr();
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
/*LCD_disp_str(0,1,"Erro No: 000 ");
LCD_disp_str(0,2,"pump is bad!"); */
OLED_Clear();
oled_disp_china(0,0,"错误编号");
oled_disp_string(8,0,":008");
oled_disp_china(0,1,"加湿异常");
delay_nms(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
}
IWDG_Feed();
if(egg_erro_flag==1&&egg_warn_s==1)
{ LCD_clr();
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
LCD_disp_str(0,1,"Erro No: 001 ");
LCD_disp_str(0,2,"egg turn is bad!");
OLED_Clear();
oled_disp_china(0,0,"错误编号");
oled_disp_string(8,0,":001");
oled_disp_china(0,1,"翻蛋蛋盘异常");
delay_nms(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
}
IWDG_Feed();
if(sen_erro_flag>100&&sen_warn_s==1)
{ //if( sen_erro_flag>100)
{
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
// Run_YN=0;
}
LCD_clr();
LCD_disp_str(0,1,"Erro No: 002 ");
LCD_disp_str(0,2,"sensor is bad! ");
OLED_Clear();
oled_disp_china(0,0,"错误编号");
oled_disp_string(8,0,":002");
oled_disp_china(0,1,"主传感器探头异常");
oled_disp_num(0,2,sen_erro_flag,6);
/*LCD_disp_char(15,2,digit[(sen_erro_flag%10)]);
LCD_disp_char(14,2,digit[(sen_erro_flag%100/10)]);
LCD_disp_char(13,2,digit[(sen_erro_flag%1000/100)]);
LCD_disp_char(12,2,digit[(sen_erro_flag%10000/1000)]);*/
delay_nms(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
}
IWDG_Feed();
if(sen_erro_flag_S>100&&sen_warn_s==1)
{ //if( sen_erro_flag>100)
{
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
// Run_YN=0;
}
LCD_clr();
LCD_disp_str(0,1,"Erro No: 002 ");
LCD_disp_str(0,2,"sensor is bad! ");
OLED_Clear();
oled_disp_china(0,0,"错误编号");
oled_disp_string(8,0,":002");
oled_disp_china(0,1,"辅传感器探头异常");
oled_disp_num(0,2,sen_erro_flag_S,6);
/*LCD_disp_char(15,2,digit[(sen_erro_flag%10)]);
LCD_disp_char(14,2,digit[(sen_erro_flag%100/10)]);
LCD_disp_char(13,2,digit[(sen_erro_flag%1000/100)]);
LCD_disp_char(12,2,digit[(sen_erro_flag%10000/1000)]);*/
delay_nms(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
}
IWDG_Feed();
if(date_erro_flag==1&&sen_warn_s==1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
LCD_clr();
LCD_disp_str(0,1,"Erro No: 003 ");
LCD_disp_str(0,2,"sensor is bad! ");
OLED_Clear();
oled_disp_china(0,0,"错误编号");
oled_disp_string(8,0,":008");
oled_disp_china(0,1,"时间错误");
oled_disp_china(0,2,"设置时间");
//oled_disp_num(0,2,sen_erro_flag_S,6);
delay_nms(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
}
IWDG_Feed();
if(Set_High_Temp>=10&& Set_High_Temp<=50)
{
t= Set_High_Temp*10;
}
else
{
t=400;
}
IWDG_Feed();
if(Now_TH_D>t&&hight_warn_s==1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
if( Now_TH_D>400)
{ LCD_clr();
// LCD_disp_str(0,1,"the temperature is ");
LCD_disp_str(0,1,"Warning No: 103 ");
LCD_disp_str(0,2,"it is too hot!!! ");
OLED_Clear();
oled_disp_china(0,0,"报警编号");
oled_disp_string(8,0,":103");
oled_disp_china(0,1,"温度太高");
}
/*if( wendunum1<350)
{
LCD_disp_str(0,1,"the temperature is ");
LCD_disp_str(0,2,"too low !!! ");
} */
delay_nms(200);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay_nms(1000);
//high_t_cnt++;
}
IWDG_Feed();
if(Set_Low_Temp>=5&& Set_Low_Temp<=40)
{
t= Set_Low_Temp*10;
}
else
{
t=340;
}
if(Now_TH_D<t && lowt_warn_s==1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
if( Now_TH_D<t)
{ LCD_clr();
LCD_disp_str(0,1,"Warning No: 104 ");
LCD_disp_str(0,2,"it is too cold!");
OLED_Clear();
oled_disp_china(0,0,"报警编号");
oled_disp_string(8,0,":104");
oled_disp_china(0,1,"温度太低");
}
/*if( wendunum1<350)
{
LCD_disp_str(0,1,"the temperature is ");
LCD_disp_str(0,2,"too low !!! ");
} */
delay_nms(200);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay_nms(1000);
}
IWDG_Feed();
delta_tt=abs(Now_TH-Now_TH_S);
if(Set_bird_mode ==19||Set_bird_mode==18)
{
if(delta_tt>30 && lowt_warn_s==1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
OLED_Clear();
oled_disp_china(0,0,"报警编号");
oled_disp_string(8,0,":120");
oled_disp_china(0,1,"温差太大");
delay_nms(200);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay_nms(1000);
}
}
else
{
if(delta_tt>10 && lowt_warn_s==1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
OLED_Clear();
oled_disp_china(0,0,"报警编号");
oled_disp_string(8,0,":120");
oled_disp_china(0,1,"温差太大");
delay_nms(200);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay_nms(1000);
}
}
IWDG_Feed();
power_flag= power_detect();
//if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==1&&power_warn_s==1)
if(power_flag==1&&power_warn_s==1)
{
GPIO_ResetBits(GPIOE,GPIO_Pin_4); //关背光
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
LCD_disp_str(0,1,"Erro No: 005 ");
LCD_disp_str(0,2,"Power is off! ");
OLED_Clear();
oled_disp_china(0,0,"错误编号");
oled_disp_string(8,0,":005");
oled_disp_china(0,1,"电源掉电");
delay_nms(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
power_erro_cnt++;
}
else if(dianchi_flag==1&&power_warn_s==1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
OLED_Clear();
oled_disp_china(0,0,"报警编号");
oled_disp_string(8,0,":110");
oled_disp_china(0,1,"电池");
delay_nms(200);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay_nms(1000);
}
else
{
GPIO_SetBits(GPIOE,GPIO_Pin_4);
}
// fan_flag=fan_detect();
IWDG_Feed();
//if((fan_cnt==fan_cnt_pre &&(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_7)==1) ) && fan_warn_s==1)
//if((fan_cnt==fan_cnt_pre ) && fan_warn_s==1)
if((fan_erro_flag==1 ) && fan_warn_s==1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
LCD_disp_str(0,1,"Erro No: 006 ");
LCD_disp_str(0,2,"HOT fan is bad! ");
OLED_Clear();
oled_disp_china(0,0,"错误编号");
oled_disp_string(8,0,":006");
oled_disp_china(0,1,"加热风扇异常");
delay_nms(1000);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
fan_erro_cnt++;
}
IWDG_Feed();
if( low_wet_s==1 )
{
if( (Now_PH_D<target_Shidu -50) &&( fan_open_flag==0))
{ GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
LCD_disp_str(0,1,"Warning No: 107 ");
LCD_disp_str(0,2,"wet is too low! ");
OLED_Clear();
oled_disp_china(0,0,"报警编号");
oled_disp_string(8,0,":107");
oled_disp_china(0,1,"湿度太低");
delay_nms(200);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay_nms(1000);
low_wet_cnt++;
}
else if( Now_PH_D>target_Shidu+70)
{ GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
LCD_disp_str(0,1,"Warning No: 108 ");
LCD_disp_str(0,2,"wet is too high! ");
OLED_Clear();
oled_disp_china(0,0,"报警编号");
oled_disp_string(8,0,":108");
oled_disp_china(0,1,"湿度太高");
delay_nms(200);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay_nms(1000);
high_wet_cnt++;
}
IWDG_Feed();
if((wet_many_flag==1) && (fan_open_flag==0))
{
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
OLED_Clear();
oled_disp_china(0,0,"报警编号");
oled_disp_string(8,0,":109");
oled_disp_china(0,1,"加湿工作时间太长");
delay_nms(200);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay_nms(1000);
}
IWDG_Feed();
if(too_wet_flag==1)
{
GPIO_SetBits(GPIOC,GPIO_Pin_0); //开蜂鸣器
OLED_Clear();
oled_disp_china(0,0,"报警编号");
oled_disp_string(8,0,":112");
oled_disp_china(0,1,"排风时间太长");
delay_nms(200);
GPIO_ResetBits(GPIOC,GPIO_Pin_0);
delay_nms(1000);
}
IWDG_Feed();
}
}
void RCC_Configuration(void)//时钟配置
{
ErrorStatus HSEStartUpStatus;
RCC_DeInit(); //将外设 RCC寄存器重设为缺省值
RCC_HSEConfig(RCC_HSE_ON); //设置外部高速晶振(HSE)
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //等待 HSE 起振
if(HSEStartUpStatus == SUCCESS)
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //预取指缓存使能
//设置代码延时值
//FLASH_Latency_2 2 延时周期
FLASH_SetLatency(FLASH_Latency_2);
//设置 AHB 时钟(HCLK)
//RCC_SYSCLK_Div1 AHB 时钟 = 系统时钟
RCC_HCLKConfig(RCC_SYSCLK_Div1);
//设置高速 AHB 时钟(PCLK2)
//RCC_HCLK_Div2 APB1 时钟 = HCLK / 2
RCC_PCLK2Config(RCC_HCLK_Div2);
//设置低速 AHB 时钟(PCLK1)
RCC_PCLK1Config(RCC_HCLK_Div2);
//设置ADC时钟频率
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
// PLLCLK = 8MHz * 9 = 72 MHz
//设置 PLL 时钟源及倍频系数
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
//使能或者失能 PLL
RCC_PLLCmd(ENABLE);
//等待指定的 RCC 标志位设置成功 等待PLL初始化成功
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
//设置系统时钟(SYSCLK) 设置PLL为系统时钟源
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//等待PLL成功用作于系统时钟的时钟源
// 0x00:HSI 作为系统时钟
// 0x04:HSE作为系统时钟
// 0x08:PLL作为系统时钟
while(RCC_GetSYSCLKSource() != 0x08)
{
}
}
/* 1602*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE );
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
/* SHT10*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, DISABLE); //使能TIM5时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, DISABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, DISABLE);
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_SDIO, DISABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, DISABLE);
//相应的GPIO口即可
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2 | RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3 | RCC_APB2Periph_GPIOC, ENABLE);
}
void GPIO_Configuration(void) //GPIO口配置,实际用的是GPIO口的哪些引脚,打开即可
{
GPIO_InitTypeDef GPIO_InitStructure;
//LCD1602(DO~D7)对应STM32的GPIO口(PD8~PD15)
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
| GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
//LCD1602的(RS、RS、E,Backlight)对应STM32的GPIO口(PE0、PE1、PE2、P44)
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_4);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
// //SHT10 SCLK GPIOB_PIN_10
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_10);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//SHT10 DATA GPIOE_PIN_14
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_14);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOE, &GPIO_InitStructure);
//SHT10 SCLK GPIOB_PIN_10 S
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_12);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(GPIOD, &GPIO_InitStructure);
//SHT10 DATA GPIOE_PIN_14
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(GPIOD, &GPIO_InitStructure);
//DS1302 GPIO_Pin_10 SCLK GPIO_Pin_12 RST
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_10|GPIO_Pin_12);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
//DS1302_DATA
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_11);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
GPIO_Init(GPIOE, &GPIO_InitStructure);
//0,1,2,3,key GPIOE_5,6,7 输入
GPIO_InitStructure.GPIO_Pin =(GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);//|GPIO_Pin_6|GPIO_Pin_7);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//GPIO_Mode_IPD ;//GPIO_Mode_IN_FLOATING;//
GPIO_Init(GPIOE, &GPIO_InitStructure);
//加热 PA2 输出
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_2);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//MOTO 翻蛋PA4,5 预留PA6,7
// GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
// GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_1|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_14);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
//加湿控制 PE3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
// 加湿检测 PB13
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Mode_IN_FLOATING; //上拉输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//红外输入管脚A0
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //红外引脚上拉输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 电机限位检测 PB14,15 输入
// GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_14|GPIO_Pin_15);
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_14|GPIO_Pin_11);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Mode_IN_FLOATING; //上拉输入
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//水泵控制 PC3 输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
//适配器与蓄电池切换 PC4 电源与锂电池切换 PC5 输入
//GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_4|GPIO_Pin_5);
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_5);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Mode_IN_FLOATING; //上拉输入
GPIO_Init(GPIOC, &GPIO_InitStructure);
//输入电源电压检测
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_4);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//GPIO_Mode_IN_FLOATING; //上拉输入
GPIO_Init(GPIOC, &GPIO_InitStructure);
//蜂鸣器 PC0 风扇1 PC6 风扇2 PC7 输出
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
/*GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_7);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure); */
//高亮LED控制 PB12 输出
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_12);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//电池电源切换控制
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_11);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_10);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE);//重映射管脚
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//GPIO_Mode_IN_FLOATING; //上拉输入
GPIO_Init(GPIOE, &GPIO_InitStructure);
//水位开关 输入
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_1);
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//GPIO_Mode_IN_FLOATING; //上拉输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOC, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能PC,D,G端口时钟
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; //PD3,PD6推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//速度50MHz
// GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化GPIOD3,6
GPIO_Init(GPIOB, &GPIO_InitStructure);
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; //PD3,PD6推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//速度50MHz
// GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOD3,6
// GPIO_SetBits(GPIOD,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_3|GPIO_Pin_8); //PD3,PD6 输出高
GPIO_SetBits(GPIOB, GPIO_Pin_6);
GPIO_SetBits(GPIOB, GPIO_Pin_7);
// GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);//重映射管脚
// I2C_Mode_config() ;
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_13|GPIO_Pin_15|GPIO_Pin_8|GPIO_Pin_9);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;//速度50MHz
// GPIO_Init(GPIOD, &GPIO_InitStructure); //初始化GPIOD3,6
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB, GPIO_Pin_8);
GPIO_SetBits(GPIOB, GPIO_Pin_9);
GPIO_SetBits(GPIOB, GPIO_Pin_13);
GPIO_SetBits(GPIOB, GPIO_Pin_15);
GPIO_SetBits(GPIOB, GPIO_Pin_10);
//pa7 ff;pa3 Pf;pc2 sf;pb1 zf;pa6 sb
/* GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_7);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure); */
}
/*void I2C_Mode_config(void) {
I2C_InitTypeDef I2C_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1,ENABLE);
I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 =0x0A;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = 400000;
I2C_Cmd(I2C1, ENABLE);
I2C_Init(I2C1, &I2C_InitStructure);
} */
void NVIC_Configuraton(void)//flash里调试,还是在RAM里调试
{
NVIC_InitTypeDef NVIC_InitStructure;
#ifdef VECT_TAB_RAM // Set the Vector Table base location at 0x20000000
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x4000);
#else
//Set the Vector Table base location at 0x08000000
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x4000);
#endif
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel; //EXTI9_5_IRQChannel; //外部中断线0
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组
NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/*****************************************************************
状态0的显示内容:
PH: XX.X DAYS: XX
TH: XX.X RUN : X
Display_0()
******************************************************************/
void Display_0()
{
u16 temp;
u16 ff_val;
blank=(blank+1)%2;
if(lcd_close_flag==0 && (disp_cnt<36000 ||Set_self_test==1))
{
//oledcheck();
OLED_Display_On();
if(disp_mode == 0)
{
power_detect();
// LCD_clr();
LCD_disp_char(0,1,Display_digit[Run_days/10]);
LCD_disp_char(1,1,Display_digit[Run_days%10]);
LCD_disp_str(2,1," ");
LCD_disp_char(3,1,digit[(hour/10)]);
LCD_disp_char(4,1,digit[(hour%10)]);
LCD_disp_str(5,1,":");
LCD_disp_char(6,1,digit[(minute/10)]);
LCD_disp_char(7,1,digit[(minute%10)]);
LCD_disp_str(8,1," ");
// OLED_Clear();
oled_disp_china(0,0,"第");
oled_disp_num(2,0,Run_days,2);
oled_disp_china(2,0,"天");
oled_disp_string(6,0," ");
oled_disp_num(7,0,hour,2);
if(blank==0)
{
oled_disp_string(9,0,":");
}
else
{
oled_disp_string(9,0," ");
}
oled_disp_num(10,0,minute,2);
/* if(Set_bird_mode==9)
{oled_disp_china(6,0,"保温");}
else if(Set_bird_mode==1)
{ oled_disp_china(6,0,"牡丹"); }
else if(Set_bird_mode==2)
{ oled_disp_china(6,0,"玄凤");}
else if(Set_bird_mode==3)
{ oled_disp_china(6,0,"虎皮"); }
else if(Set_bird_mode==4)
{ oled_disp_china(6,0,"和尚");}
else if(Set_bird_mode==5)
{ oled_disp_china(6,0,"太阳"); }
else if(Set_bird_mode==6)
{ oled_disp_china(6,0,"灰机"); }
else if(Set_bird_mode==7)
{ oled_disp_china(6,0,"折中"); }
else if(Set_bird_mode==0)
{ oled_disp_china(6,0,"手动"); }
else
{
oled_disp_china(6,0,"小鸡");
} */
get_bird_name(bird_mode);
oled_disp_china(6,0,bird_name);
oled_disp_china(0,2,"主探头");
if(Now_TH==500)
{
oled_disp_china(3,2," 异常 ");
}
else
{
oled_disp_num(6,2,Now_TH/10,2);
oled_disp_string(8,2,".");
oled_disp_num(9,2,Now_TH%10,1);
oled_disp_china(5,2,"度");
oled_disp_string(12,2," ");
oled_disp_num(13,2,Now_PH/10,2);
oled_disp_string(15,2,"%");
}
oled_disp_china(0,3,"辅探头");
if(Now_TH_S==500)
{
oled_disp_china(3,3," 异常 ");
}
else
{
oled_disp_num(6,3,Now_TH_S/10,2);
oled_disp_string(8,3,".");
oled_disp_num(9,3,Now_TH_S%10,1);
oled_disp_china(5,3,"度");
oled_disp_string(12,3," ");
oled_disp_num(13,3,Now_PH_S/10,2);
oled_disp_string(15,3,"%");
}
if(Set_self_test==3)
{
oled_disp_china(0,4,"主辅蛋盘");
}
else
{
oled_disp_china(0,4," ");
}
if(Set_bird_mode==19 ||Set_bird_mode==18)
{
if(dianchi_flag==0)
{
oled_disp_china(0,1,"加热功率");
oled_disp_num(8,1,power_val,3);
oled_disp_string(11,1,"%");
}
else
{
oled_disp_china(0,1,"电池电量");
oled_disp_num(8,1,dianchi_val,3);
oled_disp_string(11,1,"%");
}
}
else
{
oled_disp_china(0,1,"翻蛋");
oled_disp_num(4,1,target_moto,1);
oled_disp_string(5,1," ");
if(egg_direct==1)
{
oled_disp_string(6,1,"<-");
//oled_disp_china(2,1,"起点");
}
else
{
oled_disp_string(6,1,"->");
// oled_disp_china(2,1,"终点");
}
if( cnt_turn<0)
{
oled_disp_string(8,1,"-");
oled_disp_num(9,1,abs(cnt_turn),2);
}
else
{
oled_disp_string(8,1," ");
oled_disp_num(9,1,abs(cnt_turn),2);
}
oled_disp_string(11,1," ");
}
if(Run_YN == 1)
{
//LCD_disp_str(9,1,"RUN ");
LCD_disp_char(9,1,digit[(power_val%1000/100)]);
LCD_disp_char(10,1,digit[(power_val%100/10)]);
LCD_disp_char(11,1,digit[(power_val%10)]);
LCD_disp_str(12,1," ");
if(cold_flag==1)
{
oled_disp_china(6,1,"凉蛋");
}
else
{
oled_disp_china(6,1,"运行");
}
}
else
{
LCD_disp_str(9,1,"STOP");
oled_disp_china(6,1,"停止");
}
LCD_disp_char(13,1,digit[(Now_PH%1000)/100]); //显示湿度十位
LCD_disp_char(14,1,digit[(Now_PH%100)/10]); //显示湿度个位
// LCD_disp_str(9,2,".");
// LCD_disp_char(10,2,digit[(Now_PH%10)]); //显示湿度小数点后第一位
LCD_disp_str(15,1,"%");
LCD_disp_str(0,2,"P:");
LCD_disp_char(2,2,digit[(Now_TH%1000)/100]); //显示温度十位
LCD_disp_char(3,2,digit[(Now_TH%100)/10]); //显示温度个位
LCD_disp_str(4,2,".");
LCD_disp_char(5,2,digit[(Now_TH%10)]); //显示温度小数点后第一位
if(cold_flag==1)
{
LCD_disp_str(6,2,"!");
}
else
{
LCD_disp_str(6,2,"C");
}
LCD_disp_str(7,2," ");
// LCD_disp_str(7,2,"R:");
// LCD_disp_char(10,2,digit[Now_PH/1000]); //显示湿度百位
LCD_disp_str(8,2," S:");
dot=ds18b20_temp&0xff;
LCD_disp_char(11,2,digit[((ds18b20_temp>>8)%100/10)]);
LCD_disp_char(12,2,digit[((ds18b20_temp>>8)%10)]);
LCD_disp_str(13,2,".");
LCD_disp_char(14,2,digit[(dot%10)]);
LCD_disp_str(15,2,"C");
/* LCD_disp_char(11,2,digit[(Now_TH_S%1000)/100]); //显示温度十位
LCD_disp_char(12,2,digit[(Now_TH_S%100)/10]); //显示温度个位
LCD_disp_str(13,2,".");
LCD_disp_char(14,2,digit[(Now_TH_S%10)]); //显示温度小数点后第一位
LCD_disp_str(15,2,"C"); */
/*ff_val= ffan_detect();
oled_disp_num(0,5,ff_val,4); */
}
else if (disp_mode==1)
{
LCD_clr();
LCD_disp_str(0,1,"Set: ");
OLED_Clear();
oled_disp_china(1,0,"当天参数设置");
oled_disp_china(0,1,"温湿度");
oled_disp_num(6,1,target_temprature/10,2);
oled_disp_string(8,1,".");
oled_disp_num(9,1,target_temprature%10,1);
oled_disp_china(5,1,"度");
oled_disp_num(13,1,target_Shidu/10,2);
oled_disp_string(15,1,"%");
oled_disp_china(0,2,"翻蛋");
oled_disp_string(4,2,"/");
oled_disp_num(5,2,target_moto,1);
oled_disp_china(3,2,"时");
oled_disp_china(4,2,"排风");
oled_disp_string(12,2,"/");
oled_disp_num(13,2,target_fan,1);
oled_disp_china(7,2,"时");
oled_disp_china(0,3,"凉蛋");
oled_disp_num(5,3,target_cold,1);
oled_disp_china(3,3,"次每天");
LCD_disp_str(5,1,"M");
if(target_moto==0)
{
LCD_disp_str(6,1,"N");
}
else
{
LCD_disp_char(6,1,digit[(target_moto%10)]);
}
LCD_disp_str(7,1," F");
if(target_fan==0)
{
LCD_disp_str(9,1,"N");
}
else
{
LCD_disp_char(9,1,digit[(target_fan%10)]);
}
LCD_disp_str(10,1," C");
if(target_cold==0)
{
LCD_disp_str(12,1,"N");
}
else
{
LCD_disp_char(12,1,digit[(target_cold%10)]);
}
LCD_disp_char(0,2,digit[(target_temprature%1000/100)]);
LCD_disp_char(1,2,digit[(target_temprature%100/10)]);
LCD_disp_str(2,2,".");
LCD_disp_char(3,2,digit[(target_temprature%10)]);
LCD_disp_str(4,2,"C ");
LCD_disp_char(6,2,digit[(target_Shidu%1000/100)]);
LCD_disp_char(7,2,digit[(target_Shidu%100/10)]);
LCD_disp_str(8,2,".");
LCD_disp_char(9,2,digit[(target_Shidu%10)]);
LCD_disp_str(10,2,"%");
}
else if(disp_mode == 2)
{
power_detect();
// LCD_clr();
LCD_disp_char(0,1,Display_digit[Run_days/10]);
LCD_disp_char(1,1,Display_digit[Run_days%10]);
LCD_disp_str(2,1," ");
LCD_disp_char(3,1,digit[(hour/10)]);
LCD_disp_char(4,1,digit[(hour%10)]);
LCD_disp_str(5,1,":");
LCD_disp_char(6,1,digit[(minute/10)]);
LCD_disp_char(7,1,digit[(minute%10)]);
LCD_disp_str(8,1," ");
// OLED_Clear();
oled_disp_china(0,0,"第");
oled_disp_num(2,0,Run_days,2);
oled_disp_china(2,0,"天");
oled_disp_string(6,0," ");
oled_disp_num(7,0,hour,2);
if(blank==0)
{
oled_disp_string(9,0,":");
}
else
{
oled_disp_string(9,0," ");
}
oled_disp_num(10,0,minute,2);
/* if(Set_bird_mode==9)
{oled_disp_china(6,0,"保温");}
else if(Set_bird_mode==1)
{ oled_disp_china(6,0,"牡丹"); }
else if(Set_bird_mode==2)
{ oled_disp_china(6,0,"玄凤");}
else if(Set_bird_mode==3)
{ oled_disp_china(6,0,"虎皮"); }
else if(Set_bird_mode==4)
{ oled_disp_china(6,0,"和尚");}
else if(Set_bird_mode==5)
{ oled_disp_china(6,0,"太阳"); }
else if(Set_bird_mode==6)
{ oled_disp_china(6,0,"灰机"); }
else if(Set_bird_mode==7)
{ oled_disp_china(6,0,"折中"); }
else if(Set_bird_mode==0)
{ oled_disp_china(6,0,"手动"); }
else
{
oled_disp_china(6,0,"小鸡");
} */
get_bird_name(bird_mode);
oled_disp_china(6,0,bird_name);
oled_disp_china(0,2,"主探头");
if(Now_TH==500)
{
oled_disp_china(3,2," 异常 ");
}
else
{
oled_disp_num(6,2,Now_TH/10,2);
oled_disp_string(8,2,".");
oled_disp_num(9,2,Now_TH%10,1);
oled_disp_china(5,2,"度");
oled_disp_string(12,2," ");
oled_disp_num(13,2,Now_PH/10,2);
oled_disp_string(15,2,"%");
}
oled_disp_china(0,3,"辅探头");
if(Now_TH_S==500)
{
oled_disp_china(3,3," 异常 ");
}
else
{
oled_disp_num(6,3,Now_TH_S/10,2);
oled_disp_string(8,3,".");
oled_disp_num(9,3,Now_TH_S%10,1);
oled_disp_china(5,3,"度");
oled_disp_string(12,3," ");
oled_disp_num(13,3,Now_PH_S/10,2);
oled_disp_string(15,3,"%");
}
if(dianchi_flag==0)
{
oled_disp_china(0,1,"加热功率");
oled_disp_num(8,1,power_val,3);
oled_disp_string(11,1,"%");
}
else
{
oled_disp_china(0,1,"电池电量");
oled_disp_num(8,1,dianchi_val,3);
oled_disp_string(11,1,"%");
}
if(Run_YN == 1)
{
//LCD_disp_str(9,1,"RUN ");
LCD_disp_char(9,1,digit[(power_val%1000/100)]);
LCD_disp_char(10,1,digit[(power_val%100/10)]);
LCD_disp_char(11,1,digit[(power_val%10)]);
LCD_disp_str(12,1," ");
if(cold_flag==1)
{
oled_disp_china(6,1,"凉蛋");
}
else
{
oled_disp_china(6,1,"运行");
}
}
else
{
LCD_disp_str(9,1,"STOP");
oled_disp_china(6,1,"停止");
}
}
else if (disp_mode==3)
{
OLED_Clear();
if( open_wet_cnt>999999) open_wet_cnt=999999;
oled_disp_china(0,0,"加湿次数");
oled_disp_num(8,0,open_wet_cnt,8);
if( wetfan_cnt>999999) wetfan_cnt=999999;
oled_disp_china(0,1,"排风次数");
oled_disp_num(8,1,wetfan_cnt,8);
oled_disp_china(0,2,"平均湿度");
oled_disp_num(10,2,Now_PH_D/10,2);
oled_disp_string(12,2,".");
oled_disp_num(13,2,Now_PH_D%10,1);
oled_disp_china(0,3,"加湿风速");
oled_disp_num(8,3,u_wet,8);
}
else if (disp_mode==4)
{
LCD_clr();
LCD_disp_str(0,1,"low wet:");
if( low_wet_cnt>999999) low_wet_cnt=999999;
LCD_disp_char(9,1,digit[(low_wet_cnt%1000000/100000)]);
LCD_disp_char(10,1,digit[(low_wet_cnt%100000/10000)]);
LCD_disp_char(11,1,digit[(low_wet_cnt%10000/1000)]);
LCD_disp_char(12,1,digit[(low_wet_cnt%1000/100)]);
LCD_disp_char(13,1,digit[(low_wet_cnt%100/10)]);
LCD_disp_char(14,1,digit[(low_wet_cnt%10)]);
LCD_disp_str(15,1," ");
LCD_disp_str(0,2,"high wet:");
if( high_wet_cnt>999999) high_wet_cnt=999999;
LCD_disp_char(9,2,digit[(high_wet_cnt%1000000/100000)]);
LCD_disp_char(10,2,digit[(high_wet_cnt%100000/10000)]);
LCD_disp_char(11,2,digit[(high_wet_cnt%10000/1000)]);
LCD_disp_char(12,2,digit[(high_wet_cnt%1000/100)]);
LCD_disp_char(13,2,digit[(high_wet_cnt%100/10)]);
LCD_disp_char(14,2,digit[(high_wet_cnt%10)]);
LCD_disp_str(15,2," ");
OLED_Clear();
oled_disp_china(0,0,"低湿次数");
oled_disp_num(8,0,low_wet_cnt,6);
oled_disp_china(0,1,"高湿次数");
oled_disp_num(8,1,high_wet_cnt,6);
oled_disp_china(0,2,"平均湿度");
oled_disp_num(8,2,avr_ph/10,2);
oled_disp_string(10,2,".");
oled_disp_num(11,2,avr_ph%10,1);
oled_disp_string(12,2,"%");
}
else if (disp_mode==5)
{
LCD_clr();
LCD_disp_str(0,1,"low tem:");
if( low_t_cnt>999999) low_t_cnt=999999;
LCD_disp_char(9,1,digit[(low_t_cnt%1000000/100000)]);
LCD_disp_char(10,1,digit[(low_t_cnt%100000/10000)]);
LCD_disp_char(11,1,digit[(low_t_cnt%10000/1000)]);
LCD_disp_char(12,1,digit[(low_t_cnt%1000/100)]);
LCD_disp_char(13,1,digit[(low_t_cnt%100/10)]);
LCD_disp_char(14,1,digit[(low_t_cnt%10)]);
LCD_disp_str(15,1," ");
LCD_disp_str(0,2,"high tem:");
if( high_t_cnt>999999) high_t_cnt=999999;
LCD_disp_char(9,2,digit[(high_t_cnt%1000000/100000)]);
LCD_disp_char(10,2,digit[(high_t_cnt%100000/10000)]);
LCD_disp_char(11,2,digit[(high_t_cnt%10000/1000)]);
LCD_disp_char(12,2,digit[(high_t_cnt%1000/100)]);
LCD_disp_char(13,2,digit[(high_t_cnt%100/10)]);
LCD_disp_char(14,2,digit[(high_t_cnt%10)]);
LCD_disp_str(15,2," ");
OLED_Clear();
oled_disp_china(0,0,"低温次数");
oled_disp_num(8,0,low_t_cnt,6);
oled_disp_china(0,1,"高温次数");
oled_disp_num(8,1,high_t_cnt,6);
oled_disp_china(0,2,"平均功率");
oled_disp_num(8,2,ave_hot,5);
oled_disp_china(0,3,"最大功率");
oled_disp_num(8,3,max_hot,5);
}
else if (disp_mode==6)
{
LCD_clr();
LCD_disp_str(0,1,"max tem1: ");
LCD_disp_char(10,1,digit[(max_s1_temp%1000/100)]);
LCD_disp_char(11,1,digit[(max_s1_temp%100/10)]);
LCD_disp_str(12,1,".");
LCD_disp_char(13,1,digit[(max_s1_temp%10)]);
LCD_disp_str(14,1," ");
LCD_disp_str(0,2,"max tem2: ");
LCD_disp_char(10,2,digit[((max_s2_temp>>8)%100/10)]);
LCD_disp_char(11,2,digit[((max_s2_temp>>8)%10)]);
LCD_disp_str(12,2,".");
LCD_disp_char(13,2,digit[((max_s2_temp&0xff)%10)]);
LCD_disp_str(14,2," ");
OLED_Clear();
oled_disp_china(0,0,"主最高温度");
oled_disp_num(10,0,max_s1_temp/10,2);
oled_disp_string(12,0,".");
oled_disp_num(13,0,max_s1_temp%10,1);
oled_disp_china(7,0,"度");
oled_disp_china(0,1,"辅最高温度");
oled_disp_num(10,1,max_s2_temp/10,2);
oled_disp_string(12,1,".");
oled_disp_num(13,1,max_s2_temp%10,1);
oled_disp_china(7,1,"度");
oled_disp_china(0,2,"主最低温度");
oled_disp_num(10,2,min_s1_temp/10,2);
oled_disp_string(12,2,".");
oled_disp_num(13,2,min_s1_temp%10,1);
oled_disp_china(7,2,"度");
oled_disp_china(0,3,"辅最低温度");
oled_disp_num(10,3,min_s2_temp/10,2);
oled_disp_string(12,3,".");
oled_disp_num(13,3,min_s2_temp%10,1);
oled_disp_china(7,3,"度");
}
else if (disp_mode==7)
{
OLED_Clear();
oled_disp_china(0,0,"主最高湿度");
oled_disp_num(10,0,max_s1_ph/10,2);
oled_disp_string(12,0,".");
oled_disp_num(13,0,max_s1_ph%10,1);
//oled_disp_china(7,0,"度");
oled_disp_china(0,1,"辅最高湿度");
oled_disp_num(10,1,max_s2_ph/10,2);
oled_disp_string(12,1,".");
oled_disp_num(13,1,max_s2_ph%10,1);
//oled_disp_china(7,1,"度");
oled_disp_china(0,2,"主最低湿度");
oled_disp_num(10,2,min_s1_ph/10,2);
oled_disp_string(12,2,".");
oled_disp_num(13,2,min_s1_ph%10,1);
//oled_disp_china(7,2,"度");
oled_disp_china(0,3,"辅最低湿度");
oled_disp_num(10,3,min_s2_ph/10,2);
oled_disp_string(12,3,".");
oled_disp_num(13,3,min_s2_ph%10,1);
//oled_disp_china(7,3,"度");
}
else if (disp_mode==8)
{
power_detect();
LCD_clr();
if(power_erro_cnt>999) power_erro_cnt=999;
OLED_Clear();
oled_disp_china(0,0,"电源掉电次数");
oled_disp_num(12,0,power_erro_cnt,4);
oled_disp_china(0,1,"电源电压");
oled_disp_num(8,1,power_lever/10,2);
oled_disp_string(10,1,".");
oled_disp_num(11,1,power_lever%10,1);
oled_disp_string(12,1,"V");
oled_disp_china(0,2,"风扇报警次数");
oled_disp_num(12,2,fan_erro_cnt,4);
oled_disp_china(0,3,"风扇速度");
oled_disp_num(12,3,fan_cnt,4);
}
else if (disp_mode==9)
{
LCD_clr();
LCD_disp_str(0,1,"chip temp: ");
LCD_disp_char(12,1,digit[(chip_temp%100/10)]);
LCD_disp_char(13,1,digit[(chip_temp%10)]);
LCD_disp_str(14,1,"CT");
OLED_Clear();
oled_disp_china(0,0,"控制板温度");
oled_disp_num(12,0,chip_temp,2);
oled_disp_china(7,0,"度");
water_check();
oled_disp_num(0,1,wet_power_level,4);
temp=ADC_Get_aveg(ADC_Channel_17,10)*3.3*1000/4096;
oled_disp_num(8,1,temp,4);
//wet_new=ReadADCAverageValue();
oled_disp_string(0,2,"wet e");
oled_disp_num(8,2,wet_erro_cnt,8);
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
wuxian.rar
(687.34 KB, 下载次数: 43)
2018-9-15 15:48 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
admin
时间:
2018-9-15 15:49
补全原理图或者详细说明一下电路连接即可获得100+黑币
作者:
火火的菜鸟
时间:
2018-11-8 22:19
楼主,有元件清单和成品照片吗
作者:
richardgann
时间:
2019-5-29 18:54
感谢楼主分享
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1