恒温箱系统

#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;

    }
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值