#include "common.h"
#include "include.h"
#include "MK60_FTM.h"
#include "oled.h"
#include "CONTROL.h"
/**
*函数声明
*/
void PIT0_IRQHandler();
void PORTE_IRQHandler();
void control();
void UART0_IRQHandler();
/**
*变量
*/
extern float temp_value_dht22, humi_value_dht22;
float wendu,shidu;
int wendu1=0;
char ch,ch2;
char ch;
int last_t=0,last_last_t=0,chazhi=0;
int _temp_value_dht22;
uint8 YANSHI=30;
int shengwenflag = 0, jiangwenflag = 0;
int only_one_flag=0,only_one_cont=0;
char up_T=0,down_T=0;
extern u8 key0,key1,key2,key3,key4,key5,key6,key7,key8,key9,keyA,keyB,keyC,keyD,keyE,keyF;
int n=0,i=0,n1=0;
int number[3]={0};
int number_cont=0;
int temperture,queren_flag=0;
int temperture_line[3]={0};//温度曲线设定数组
char temperture_cont=1; //温度输入次数计数
int measre_tempure=0;
u8 temperture_show[128]; //设置温度曲线存储数组
u8 temperture_show1[64][128];//温度曲线存储数组
u8 temperture_show2[64][128];//温度曲线存储数组
u8 zuo_biao=0;
int nn=1 ,wendu_cont=0;
extern char set_T_num_cont;
extern char key_flag;
extern char auto_num;
extern char get_init_num_f;
extern uint shou_zi;
extern char shidu_num; //0 表示什么也不操作/1 表示增湿
int jj=0,oo=0;
int shidu1=0;
char queren_flag2=0;
int Set_Shidu;
int delay1=0,delay_count=0;
int ii=0,j=0;
float shi_s_init=0,shi_set=0;
int yy=0,yyy=0,yy_z=0;
float temp_set=0.0,temp_s_init=0.0;
int my_delay=0;
int qushicount=0;
int hold=0;
int y_z=0;
char flag = 1;
int shengwen=0,jiangwen=0;
int j_w_count=0,s_w_count=0,tingji=0;
float gaowen=10;
void main()
{
DisableInterrupts;
OLED_Init();
OLED_CLS();
pit_init_ms(PIT0, 10);
PIT_Flag_Clear(PIT0);
set_vector_handler(PIT0_VECTORn, PIT0_IRQHandler);
uart_init (UART0, 9600);
set_vector_handler(UART0_RX_TX_VECTORn, UART0_IRQHandler);
NVIC_SetPriorityGrouping(2);
NVIC_SetPriority(PIT0_IRQn, 0);
NVIC_SetPriority(UART0_RX_TX_IRQn, 1);
gpio_init (PTB5, GPO,0); //制冷片
gpio_init (PTB6, GPO,0);
gpio_init (PTB7, GPO,0);
gpio_init (PTB8, GPO,0);
gpio_init (PTB9, GPO,1); //风扇
gpio_init (PTB10, GPO,0); //制热
gpio_init (PTB11, GPO,0); //湿度
gpio_init(PTE0, GPI, 1);
port_init_NoALT(PTE0,PULLUP);
gpio_init(PTE1, GPI, 1);
port_init_NoALT(PTE1,PULLUP);
gpio_init(PTE2, GPI, 1);
port_init_NoALT(PTE2,PULLUP);
gpio_init(PTE4, GPI, 1);
port_init_NoALT(PTE4,PULLUP);
gpio_init(PTE6, GPO, 0);
gpio_init(PTE8, GPO, 0);
gpio_init(PTE10,GPO, 0);
gpio_init(PTE12,GPO, 0);
EnableInterrupts;
enable_irq(PIT0_IRQn);
while(1)
{
ch2=DHT22_ReadTempAndHumi();
if(ch2 == OK)
{
shidu=(float)(humi_value_dht22/10);
wendu=(float)(temp_value_dht22/10);
shidu1=(int)shidu;
keyboard();
if(queren_flag==1)
{
temperture=number[1]+number[0]*10;//确认后的设定温度temperture set_T_num_cont//
number[1]=0;number[0]=0;number_cont=0;
queren_flag=0;
}
if(queren_flag2==1)
{
Set_Shidu=number[1]+number[0]*10;
number[1]=0;number[0]=0;number_cont=0;
queren_flag2=0;
}
if(number_cont==2)
{
if(keyE == 1)
{
queren_flag = 1;
}
if(keyD==1)
{
queren_flag2 = 1;
}
}
if(number_cont == 1)
{
if(key0 == 1) {number[1] = 0; number_cont ++;}
if(key1 == 1) {number[1] = 1; number_cont ++;}
if(key2 == 1) {number[1] = 2; number_cont ++;}
if(key3 == 1) {number[1] = 3; number_cont ++;}
if(key4 == 1) {number[1] = 4; number_cont ++;}
if(key5 == 1) {number[1] = 5; number_cont ++;}
if(key6 == 1) {number[1] = 6; number_cont ++;}
if(key7 == 1) {number[1] = 7; number_cont ++;}
if(key8 == 1) {number[1] = 8; number_cont ++;}
if(key9 == 1) {number[1] = 9; number_cont ++;}
}
if(number_cont==0)
{
if(key0 == 1) {number[0] = 0; number_cont ++;}
if(key1 == 1) {number[0] = 1; number_cont ++;}
if(key2 == 1) {number[0] = 2; number_cont ++;}
if(key3 == 1) {number[0] = 3; number_cont ++;}
if(key4 == 1) {number[0] = 4; number_cont ++;}
if(key5 == 1) {number[0] = 5; number_cont ++;}
if(key6 == 1) {number[0] = 6; number_cont ++;}
if(key7 == 1) {number[0] = 7; number_cont ++;}
if(key8 == 1) {number[0] = 8; number_cont ++;}
if(key9 == 1) {number[0] = 9; number_cont ++;}
}
measre_tempure = (int)((wendu1 - 10) * 1.5);//此处输入温度值
if(measre_tempure > 64)
{
measre_tempure = 63;
}
if(measre_tempure<0)
{
measre_tempure = 0;
}
for(n = 127; n > 0; n --)
{
temperture_show[n] = temperture_show[n - 1];
}
temperture_show[0] = measre_tempure;
//上面是温度存储
for(n1=0;n1<64;n1++)//hang
{
for(n=0;n<128;n++)
{
temperture_show1[n1][n]=0;
}
}
for(n=0;n<128;n++)
{
zuo_biao=0;
zuo_biao=wendu1;
temperture_show1[zuo_biao][n]=255;
}
/************以上是温度变化曲线*********************/
for(n1=0;n1<64;n1++)//hang
{
for(n=0;n<128;n++)
{
temperture_show2[n1][n]=0;
}
}
for(n=0;n<128;n++)
{
zuo_biao=0;
zuo_biao=temperture;
temperture_show2[zuo_biao][n]=255;
}
/*********************************/
if( auto_num==0)
{
if(key_flag==1) OLED_CLS();
OLED_P8x16Str(35,0,"A H U T");
}
if( auto_num==1)
{
if(key_flag==1)
{
OLED_CLS();
}
OLED_PrintImage((u8*)temperture_show1, 64, 128);
OLED_PrintImage((u8*)temperture_show2, 64, 128);
}
if(auto_num == 2)
{
if(key_flag == 1)
{
OLED_CLS();
}
if(shou_zi == 0)
{
if(keyA==1)
{
OLED_CLS();
}
OLED_P8x16Str(0,0,"Set_T_num:");
OLED_P8x16Str(0,2,"Set_T:");
OLED_P8x16Str(0,4,"Now_T:");
OLED_P8x16Str(0,6,"Now_M:");
OLED_P8x16Str(80,6,"auto");
OLED_P14x16Str(110,2,"度");
OLED_nurbem(90,2,temperture,0);
OLED_P14x16Str(110,4,"度");
OLED_nurbem(90,4,wendu1,0);
OLED_nurbem(90,0,set_T_num_cont,0);
}
if(shou_zi==1)
{
if(keyA==1)
{
OLED_CLS();
}
OLED_P8x16Str(0,0,"Set_T_num:");
OLED_P8x16Str(0,2,"Set_T:");
OLED_P8x16Str(0,4,"Now_T:");
OLED_P8x16Str(0,6,"Now_M:");
OLED_P8x16Str(80,6,"shouD");
OLED_P14x16Str(110,2,"度");
OLED_nurbem(90,2,temperture,0);
OLED_P14x16Str(110,4,"度");
OLED_nurbem(90,4,wendu1,0);
OLED_nurbem(90,0,set_T_num_cont,0);
}
}
if(auto_num==3)
{
if(key_flag==1) OLED_CLS();
if(shidu_num==0)
{
if(keyB==1) OLED_CLS();
OLED_P8x16Str(0,0,"chushi:");
OLED_P8x16Str(0,2,"shidu:");
OLED_P8x16Str(0,4,"Set_Shidu:");
OLED_P8x16Str(0,6,"Now_T:");
OLED_P8x16Str(80,0,"NOR");
OLED_nurbem(90,2,shidu1,0);
OLED_nurbem(90,4,Set_Shidu,0);
OLED_nurbem(90,6,wendu1,0);
}
if(shidu_num==1)
{
if(keyB==1) OLED_CLS();
OLED_P8x16Str(0,0,"chushi:");
OLED_P8x16Str(0,2,"shidu:");
OLED_P8x16Str(0,4,"Set_Shidu:");
OLED_P8x16Str(0,6,"Now_T:");
OLED_P8x16Str(80,0,"zenshi");
OLED_nurbem(90,2,shidu1,0);
OLED_nurbem(90,4,Set_Shidu,0);
OLED_nurbem(90,6,wendu1,0);
}
if(shidu_num==2)
{
if(keyB==1) OLED_CLS();
OLED_P8x16Str(0,0,"chushi:");
OLED_P8x16Str(0,2,"shidu:");
OLED_P8x16Str(0,4,"Set_Shidu:");
OLED_P8x16Str(0,6,"Now_T:");
OLED_P8x16Str(80,0,"chushi");
OLED_nurbem(90,2,shidu1,0);
OLED_nurbem(90,4,Set_Shidu,0);
OLED_nurbem(90,6,wendu1,0);
}
}
reset();//按键复位
}
}
}
void PIT0_IRQHandler()
{
PIT_Flag_Clear(PIT0);
UARTn_e uratn = UART0;
if(UART_S1_REG(UARTN[uratn]) & UART_S1_RDRF_MASK) //接收数据寄存器满
{
uart_getchar (UART0, &ch); //无限等待接受1个字节
}
wendu1=(int)wendu;
control();
j ++;
if(j==150)
{
j = 0;
my_delay = 1;
}
}
void control()
{
if(shidu_num==0)
{
if(shou_zi==0)
{
if(get_init_num_f==1)
{
shengwen=1;
temp_s_init=wendu;
temp_set=temp_s_init+5;
get_init_num_f=0;
}
if(shengwen==1)
{
if(wendu>=temp_set)//temp_set
{
hold=1;
}
if(wendu<temp_set)
{
hold=0;
}
if(hold==1)
{
gpio_set (PTB5, 1);
gpio_set (PTB6, 1);
gpio_set (PTB7, 1);
gpio_set (PTB8, 1);
gpio_set (PTB10, 0);
}
if(hold==0)
{
gpio_set (PTB5, 0);
gpio_set (PTB6, 0);
gpio_set (PTB7, 0);
gpio_set (PTB8, 0);
if(my_delay == 1)
{
flag = ~flag;
if(flag == -2)
{
gpio_set (PTB10, 0);
}
else
{
gpio_set (PTB10, 1);
}
my_delay = 0;
}
if(ABS(wendu-temp_set)<=0.5)
{
gaowen=wendu;
s_w_count++;
}
if(s_w_count>=1000)
{
shengwen=0;
jiangwen=1;
}
}
}
if(jiangwen==1)
{
temp_s_init=gaowen;
temp_set=temp_s_init-20;
if(wendu>temp_set)//temp_set
{
hold=1;
}
if(wendu<=temp_set)
{
hold=0;
}
if(hold==1)
{
gpio_set (PTB5, 1);
gpio_set (PTB6, 1);
gpio_set (PTB7, 1);
gpio_set (PTB8, 1);
gpio_set (PTB10, 0);
}
if(hold==0)
{
gpio_set (PTB5, 0);
gpio_set (PTB6, 0);
gpio_set (PTB7, 0);
gpio_set (PTB8, 0);
//DELAY_MS(800);
if(my_delay == 1)
{
flag = ~flag;
if(flag == -2)
{
gpio_set (PTB10, 0);
}
else
{
gpio_set (PTB10, 1);
}
my_delay = 0;
}
}
if(ABS(wendu-temp_set)<=0.5)
{
j_w_count++;
}
if(j_w_count>=1000)
{
tingji=1;
}
}
if(tingji==1)
{
gpio_set (PTB5, 0);
gpio_set (PTB6, 0);
gpio_set (PTB7, 0);
gpio_set (PTB8, 0);
gpio_set (PTB9, 0);
gpio_set (PTB10, 0);
}
}
if(shou_zi==1)
{
temp_set=temperture;
if(wendu>temp_set)//temp_set
{
hold=1;
}
if(wendu<=temp_set)
{
hold=0;
}
if(hold==1)
{
gpio_set (PTB5, 1);
gpio_set (PTB6, 1);
gpio_set (PTB7, 1);
gpio_set (PTB8, 1);
gpio_set (PTB10, 0);
}
if(hold==0)
{
gpio_set (PTB5, 0);
gpio_set (PTB6, 0);
gpio_set (PTB7, 0);
gpio_set (PTB8, 0);
if(my_delay == 1)
{
flag = ~flag;
if(flag == -2)
{
gpio_set (PTB10, 0);
}
else
{
gpio_set (PTB10, 1);
}
my_delay = 0;
}
}
}
}
/**********************************************/
if(shidu_num!=0)
{
if(shou_zi==0)
{
y_z=0;
if(shidu_num!=1)
{
yy=0;
}
if(shidu_num==1)//增湿
{
if(yy<=200)
{
temp_s_init=wendu;
shi_s_init=shidu;
yy++;
}
shi_set=shi_s_init+5;
temp_set=temp_s_init;
if(shidu>=shi_set)
{
gpio_set (PTB11, 0);
}
if(shidu<shi_set)
{
gpio_set (PTB11, 1);
}
if(wendu>=temp_set)
{
hold=1;
}
if(wendu<temp_set)
{
hold=0;
}
if(hold==1)
{
gpio_set (PTB5, 1);
gpio_set (PTB6, 1);
gpio_set (PTB7, 1);
gpio_set (PTB8, 1);
gpio_set (PTB10, 0);
}
if(hold==0)
{
gpio_set (PTB5, 0);
gpio_set (PTB6, 0);
gpio_set (PTB7, 0);
gpio_set (PTB8, 0);
if(my_delay == 1)
{
flag = ~flag;
if(flag == -2)
{
gpio_set (PTB10, 0);
}
else
{
gpio_set (PTB10, 1);
}
my_delay = 0;
}
}
}
if(shidu_num!=2)
{
qushicount=0;
}
if(shidu_num==2)//去湿
{
if(qushicount<=200)
{
temp_s_init=wendu;
shi_s_init=shidu;
qushicount++;
}
shi_set=shi_s_init-5;
temp_set=temp_s_init;
if(shidu>=shi_set)
{
gpio_set (PTB11, 0);
}
if(shidu<shi_set)
{
gpio_set (PTB11, 1);
}
if(wendu>temp_set)
{
hold=1;
}
if(wendu<=temp_set)
{
hold=0;
}
if(hold==1)
{
gpio_set (PTB5, 1);
gpio_set (PTB6, 1);
gpio_set (PTB7, 1);
gpio_set (PTB8, 1);
gpio_set (PTB10, 0);
}
if(hold==0)
{
gpio_set (PTB5, 0);
gpio_set (PTB6, 0);
gpio_set (PTB7, 0);
gpio_set (PTB8, 0);
if(my_delay == 1)
{
flag = ~flag;
if(flag == -2)
{
gpio_set (PTB10, 0);
}
else
{
gpio_set (PTB10, 1);
}
my_delay = 0;
}
}
}
}
/*********************************************/
if(shou_zi==1)
{
if(y_z<=200)
{
temp_s_init=wendu;
//shi_s_init=shidu;
y_z++;
}
shi_set=Set_Shidu;
temp_set=temp_s_init;
if(shidu>shi_set)
{
gpio_set (PTB11, 0);
}
if(shidu<=shi_set)
{
gpio_set (PTB11, 1);
}
if(wendu>temp_set)
{
hold=1;
}
if(wendu<=temp_set)
{
hold=0;
}
if(hold==1)
{
gpio_set (PTB5, 1);
gpio_set (PTB6, 1);
gpio_set (PTB7, 1);
gpio_set (PTB8, 1);
gpio_set (PTB10, 0);
}
if(hold==0)
{
gpio_set (PTB5, 0);
gpio_set (PTB6, 0);
gpio_set (PTB7, 0);
gpio_set (PTB8, 0);
if(shi_set<=shi_s_init)
{
if(my_delay == 1)
{
flag = ~flag;
if(flag == -2)
{
gpio_set (PTB10, 0);
}
else
{
gpio_set (PTB10, 1);
}
my_delay = 0;
}
}
}
}
}
}
char ch;
void UART0_IRQHandler()
{
UARTn_e uratn = UART0;
if(UART_S1_REG(UARTN[uratn]) & UART_S1_RDRF_MASK) //接收数据寄存器满
{
uart_getchar (UART0, &ch); //无限等待接受1个字节
wendu=ch;
}
}
恒温箱系统
最新推荐文章于 2024-01-06 07:09:21 发布