找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 700|回复: 0
打印 上一主题 下一主题
收起左侧

dfg

[复制链接]
跳转到指定楼层
楼主
ID:918728 发表于 2024-5-6 17:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "includes.h"
uint temp;
uint count;
uint hour=0,minute=0,sec=0,sec2=0,oldsec=0;
uint hour1=0,minute1=0,sec1=0;   //时,分,秒
sbit green = P1^0;                         //工作指示灯
sbit red  = P1^1;                     //停止指示灯
sbit Set = P3^6;                         //速煮米饭
sbit Cook = P1^2;                         //速煮米饭
sbit Soup  = P1^3;                     //精煮米饭
sbit congee = P1^7;                        //煮粥
sbit Stewed = P2^0;                        //煲汤
sbit KeepHeat = P1^4;            //保温
sbit menu = P1^5;                        //时间预约
sbit add = P1^6;                        //加
sbit dec = P2^1;                        //减

sbit Beep = P2^4;                        //蜂鸣器
sbit AddTemp = P3^7;  //加热
uint ModeFlag;
unsigned char mode;
void KeepTemp(void);
unsigned char mode = 0;
/*******************************************
******          延时程序    ***************
*******************************************/
void delay_ms(unsigned char ms)    // 延时毫秒@12M,ms最大值255
{
    unsigned char i;
    while(ms--)
        for(i = 0; i < 5; i++);
}
void delay00(unsigned int z)
{
    unsigned int x,y;
    for(x=z; x>0; x--)
        for(y=110; y>0; y--);
}
/*******************************************
******          设置工作模式    ***************
*******************************************/
void SetMode()
{
    if(Set == 0)        //速煮米饭
    {
        delay_ms(5);
        while(!Set);
        ModeFlag = 7;               
    }       
       
    if(Cook == 0)        //速煮米饭
    {
        delay_ms(5);
        while(!Cook);
        sec = 0;
        minute = 0;
        count = 0;
        ModeFlag = 1;
    }
    else if(Soup == 0)            //精煮米饭
    {
         delay_ms(5);
        while(!Soup);
        sec = 0;
        minute = 0;
        count = 0;
        ModeFlag = 2;
    }

    else if(KeepHeat == 0)    //保温
    {
        delay_ms(5);
        while(!KeepHeat);
        sec = 0;
        minute = 0;
        count = 0;
        ModeFlag = 5;
    }  
   else if(congee == 0)                //煮粥
    {
        delay_ms(5);
        while(!congee);
        sec = 0;
        minute = 0;
        count = 0;
        ModeFlag = 3;
    }

    else if(Stewed == 0)                //煲汤
    {
        delay_ms(5);
        while(!Stewed);
        sec = 0;
        minute = 0;
        count = 0;
        ModeFlag = 4;
    }
}
/*******************************************
******          取消按键部分   ***************
*******************************************/
void Set_KEY(void)                          //速煮米饭
{
        sec = 0;
        minute = 0;
        count = 0;
                                Beep = 1;
                                AddTemp = 1;
                                green = 1;
                                red=1;                       
        LCD_WriteString(0,0,"                     ");                       
}
/*******************************************
******          速煮米饭部分   ***************
*******************************************/
void CookRice(void)                          //速煮米饭
{
    LCD_WriteString(0,0,"Cook Rice1.");
                LCD_SramChar(11,1,(0 - minute)%100/10+0x30);                  //4分钟
                LCD_SramChar(12,1,(0 - minute)%10+0x30);
                LCD_SramChar(13,1,':');
                LCD_SramChar(14,1,(10 - sec)%100/10+0x30);
                LCD_SramChar(15,1,(10 - sec)%10+0x30);
    if(temp >= 800)  //超过80度
    {
          AddTemp = 1;                       
                }
                else
                {
        AddTemp = 0;                       
                }
        if((0 - minute) == 0 && (10 - sec) > 0)
        {
    TR0=1;               
    green = 0;
    red=1;       
        }
        else
        {       
          TR0 = 1;
    if(temp >= 800)  //超过80度
    {
        TR0 = 1;                       
        AddTemp = 1;
        mode=1;       
              sec2=0;                       
    }
                else
                {
        TR0 = 0;
        AddTemp = 0;                  
                }
        }
}
void CookRice2(void)                          //速煮米饭
{
    LCD_WriteString(0,0,"Cook Rice2.");
                LCD_SramChar(11,1,(0 - minute)%100/10+0x30);                 
                LCD_SramChar(12,1,(0 - minute)%10+0x30);
                LCD_SramChar(13,1,':');
                LCD_SramChar(14,1,(15 - sec2)%100/10+0x30);
                LCD_SramChar(15,1,(15 - sec2)%10+0x30);       
    if(temp >= 1000)  //超过100度
    {
       AddTemp = 1;                       
                }
                else
                {
        AddTemp = 0;                       
                }       
        if((0 - minute) == 0 && (15 - sec2) > 0)
        {               
    green = 0;
    red=1;       
        }       
        else
        {       
    if(temp >= 1000)  //超过100度
    {
                                                TR0 = 0;
                                                AddTemp = 0;
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);

                                                ModeFlag=5;                 //保温                                       
    }
                else
                {
        TR0 = 0;
        AddTemp = 1;                  
                }
        }       
}
/*******************************************
******          精煮米饭部分   ***************
*******************************************/
void CookCong(void)
{
    LCD_WriteString(0,0,"Cook Cong1.");
                LCD_SramChar(11,1,(0 - minute)%100/10+0x30);                  //4分钟
                LCD_SramChar(12,1,(0 - minute)%10+0x30);
                LCD_SramChar(13,1,':');
                LCD_SramChar(14,1,(15 - sec)%100/10+0x30);
                LCD_SramChar(15,1,(15 - sec)%10+0x30);
    if(temp >= 800)  //超过80度
    {
        AddTemp = 1;                       
                }
                else
                {
        AddTemp = 0;                       
                }       
        if((0 - minute) == 0 && (15 - sec) > 0)
        {
    TR0=1;               
    green = 0;
    red=1;       
        }       
        else
        {       
          TR0 = 1;
    if(temp >= 800)  //超过80度
    {
        TR0 = 1;                       
        AddTemp = 1;
        mode=1;       
              sec2=0;                       
    }
                else
                {
        TR0 = 0;
        AddTemp = 0;                  
                }
        }
}
void CookCong2(void)                          //速煮米饭
{
    LCD_WriteString(0,0,"Cook Cong2.");
                LCD_SramChar(11,1,(0 - minute)%100/10+0x30);                 
                LCD_SramChar(12,1,(0 - minute)%10+0x30);
                LCD_SramChar(13,1,':');
                LCD_SramChar(14,1,(30 - sec2)%100/10+0x30);
                LCD_SramChar(15,1,(30 - sec2)%10+0x30);       
    if(temp >= 1000)  //超过100度
    {
        AddTemp = 1;                       
                }

                else
                {
        AddTemp = 0;                       
                }       
        if((0 - minute) == 0 && (30 - sec2) > 0)
        {               
    green = 0;
    red=1;       
        }       
        else
        {       
    if(temp >= 1000)  //超过100度
    {
                                                TR0 = 0;
                                                AddTemp = 0;
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                        delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                               delay00(200);
                                                ModeFlag=5;                 //保温                                       
    }
                else
                {
        TR0 = 0;
        AddTemp = 1;                  
                }
        }       
}
/*******************************************
******          煮粥部分   ***************
*******************************************/
void CookSoup(void)                        //煮粥
{
    LCD_WriteString(0,0,"Cook Soup1.");
                LCD_SramChar(11,1,(0 - minute)%100/10+0x30);                  //4分钟
                LCD_SramChar(12,1,(0 - minute)%10+0x30);
                LCD_SramChar(13,1,':');
                LCD_SramChar(14,1,(10 - sec)%100/10+0x30);
                LCD_SramChar(15,1,(10 - sec)%10+0x30);       
    if(temp >= 700)  //超过70度
    {
        AddTemp = 1;                       
                }
                else
                {
        AddTemp = 0;                       
                }       
        if((0 - minute) == 0 && (10 - sec) > 0)
        {
    TR0=1;               
    green = 0;
    red=1;       
        }       
        else
        {       
          TR0 = 1;
    if(temp >= 700)  //超过70度
    {
        TR0 = 1;                       
        AddTemp = 1;

        mode=1;       
              sec2=0;                       
    }
                else
                {
        TR0 = 0;
        AddTemp = 0;                  
                }
        }
}
void CookSoup2(void)                          //速煮米饭
{
    LCD_WriteString(0,0,"Cook Soup2.");
                LCD_SramChar(11,1,(0 - minute)%100/10+0x30);                 
                LCD_SramChar(12,1,(0 - minute)%10+0x30);
                LCD_SramChar(13,1,':');
                LCD_SramChar(14,1,(25 - sec2)%100/10+0x30);
                LCD_SramChar(15,1,(25 - sec2)%10+0x30);       
    if(temp >=1000)  //超过100度
    {
        AddTemp = 1;                       
                }
                else
                {
        AddTemp = 0;                       
                }       

        if((0 - minute) == 0 && (25 - sec2) > 0)
        {               
    green = 0;
    red=1;       
        }       
        else
        {       
    if(temp >= 1000)  //超过100度
    {
                                                TR0 = 0;
                                                AddTemp = 0;
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);

                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                ModeFlag=5;                 //保温                                       
    }
                else
                {
        TR0 = 0;
        AddTemp = 1;                  
                }
        }       
}

/*******************************************
******          煲汤部分   ***************
*******************************************/
void Stewedsoup(void)                        //煲汤
{
    LCD_WriteString(0,0,"Stew soup1.");
                LCD_SramChar(11,1,(0 - minute)%100/10+0x30);                  //4分钟
                LCD_SramChar(12,1,(0 - minute)%10+0x30);
                LCD_SramChar(13,1,':');
                LCD_SramChar(14,1,(10 - sec)%100/10+0x30);
                LCD_SramChar(15,1,(10 - sec)%10+0x30);       
    if(temp >= 700)  //超过70度
    {
        AddTemp = 1;                       
                }
                else
                {
        AddTemp = 0;                       
                }       
        if((0 - minute) == 0 && (10 - sec) > 0)
        {
    TR0=1;               
    green = 0;
    red=1;       
        }       
        else
        {       
          TR0 = 1;
    if(temp >= 700)  //超过70度
    {
        TR0 = 1;                       
        AddTemp = 1;

        mode=1;       
              sec2=0;                       
    }

                  else
                {
        TR0 = 0;
        AddTemp = 0;                  
                }
        }
}
void Stewedsoup2(void)                          //速煮米饭
{
    LCD_WriteString(0,0,"Cook soup2.");
                LCD_SramChar(11,1,(0 - minute)%100/10+0x30);                 
                LCD_SramChar(12,1,(0 - minute)%10+0x30);
                LCD_SramChar(13,1,':');
                LCD_SramChar(14,1,(30 - sec2)%100/10+0x30);
                LCD_SramChar(15,1,(30 - sec2)%10+0x30);       
    if(temp >= 1000)  //超过100度
    {
        AddTemp = 1;                       
                }
                else
                {
        AddTemp = 0;                       
                }       

        if((0 - minute) == 0 && (30 - sec2) > 0)
        {               
    green = 0;
    red=1;       
        }       
        else
        {       
    if(temp >= 1000)  //超过100度
    {
                                                TR0 = 0;
                                                AddTemp = 0;
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);
                                                Beep = 0;
                                                delay00(200);
                                                Beep = 1;
                                                delay00(200);

                                                ModeFlag=5;                 //保温                                       
    }
                else
                {
        TR0 = 0;
        AddTemp = 1;                  
                }
        }       
}

/*******************************************
******          保温部分   ***************
*******************************************/
void KeepTemp(void)
{
          mode=0;
    LCD_WriteString(0,0,"Keep Temp..     ");
    AddTemp = 0;//开始加热
    green = 0;
    red=0;
    if(temp >= 600)//超过60度        30
    {
        AddTemp = 1;//停止加热
    }


    else if(temp <= 300)           //开始加热 30度
    {
        AddTemp = 0;
        green = 0;
        red=0;
    }
}

/*******************************************
******          按键部分   ***************
*******************************************/
void key_scan()
{
    unsigned char s1num=0;
    if(menu==0)
    {
        delay00(50);
        if(menu==0)
        {
            while(!menu);
            s1num++;
            command(0x01);
            TR0 = 0;
            hour=0;
            minute=0;
            sec=0;
            while(1)
            {

                if(menu==0)
                {
                    delay00(50);
                    if(menu==0)
                    {
                        while(!menu);
                        s1num++;
                    }
                }

                if(s1num==1)
                {
                    LCD_WriteString(0,0,"Set Mode:");
                    LCD_SramChar(9,0,mode/10+0x30);
                    LCD_SramChar(10,0,mode%10+0x30);

                   if(add==0)
                    {
                        delay00(30);
                        if(add==0)
                        {   while(!add);
                            mode ++;
                            if(mode >= 5)
                                mode = 0;
                            LCD_SramChar(9,0,mode/10+0x30);
                            LCD_SramChar(10,0,mode%10+0x30);
                        }
                    }

                    if(dec==0)
                    {
                        delay00(30);
                        if(dec==0)
                        {   while(!dec);
                            if(mode == 0)
                                mode = 5;
                            mode --;
                            LCD_SramChar(9,0,mode/10+0x30);
                            LCD_SramChar(10,0,mode%10+0x30);
                        }
                    }
                }

                if(s1num==2)
                {
                    LCD_WriteString(0,0,"Set hour:");
                    LCD_SramChar(9,0,hour1/10+0x30);
                    LCD_SramChar(10,0,hour1%10+0x30);

                    if(add==0)
                    {
                        delay00(30);
                        if(add==0)
                        {   while(!add);
                            hour1 ++;
                            if(hour1 == 12)
                                hour1 = 0;
                            LCD_SramChar(9,0,hour1/10+0x30);
                            LCD_SramChar(10,0,hour1%10+0x30);
                        }
                    }
                    if(dec==0)
                    {
                        delay00(30);
                        if(dec==0)
                        {   while(!dec);
                            if(hour1 == 0)
                                hour1 = 12;
                            hour1 --;
                            LCD_SramChar(9,0,hour1/10+0x30);
                            LCD_SramChar(10,0,hour1%10+0x30);
                        }
                    }
                }


                if(s1num==3)
                {
                    LCD_WriteString(0,0,"Set minute:");
                    LCD_SramChar(11,0,minute1/10+0x30);
                    LCD_SramChar(12,0,minute1%10+0x30);

                    if(add==0)
                    {
                        delay00(30);
                        if(add==0)
                        {   while(!add);
                            minute1 ++;
                            if(minute1 == 60)
                                minute1 = 0;
                            LCD_SramChar(11,0,minute1/10+0x30);
                            LCD_SramChar(12,0,minute1%10+0x30);
                        }
                    }
                }

                if(s1num == 4)
                {
                    s1num=0;//s1num清零//
                    command(0x01);   //清屏
                    ModeFlag = 6;
                    AddTemp = 1;
                    TR0 = 1;
                    break;
                }
            }
        }
    }
}

/*******************************************
******     显示预约剩余时间部分   ***************
*******************************************/
void SetTime(void)
{
    LCD_SramChar(0,1,(hour1 - hour)%100/10+0x30);           //hour1 是设定的时间,hour是正常走的时间
    LCD_SramChar(1,1,(hour1 - hour)%10+0x30);
    LCD_SramChar(2,1,':');
    if((minute1-minute)>0)
    {
        LCD_SramChar(3,1,(minute1 - 1 - minute)%100/10+0x30);
        LCD_SramChar(4,1,(minute1 - 1 - minute)%10+0x30);
    }

      else
    {
        LCD_SramChar(3,1,'0');
        LCD_SramChar(4,1,'0');
    }
    LCD_SramChar(5,1,':');
    if(((hour1 - hour)>0)||((minute1-minute)>0))
    {
        LCD_SramChar(6,1,(59 - sec)%100/10+0x30);
        LCD_SramChar(7,1,(59 - sec)%10+0x30);
    }
    else
    {
        LCD_SramChar(6,1,'0');
        LCD_SramChar(7,1,'0');
    }
    LCD_WriteString(8,1,"   ");
    if((minute1 - 1 - minute) == 0 && (59 - sec) == 0 &&(hour1 - hour) == 0)
    {
        TR0 = 0;
        Beep = 0;
        delay00(200);
        Beep = 1;
        ModeFlag = mode;
        hour=0;
        minute=0;
        sec=0;
    }
}         

/*******************************************
******          主函数  ***************
*******************************************/
void main()
{
    EA = 1;
    TMOD = 0X01;
    ET0 = 1;
    TH0 = 0X3C;
    TL0 = 0XB0;
    Beep = 1;
    AddTemp = 1;
    LCD_Initial();
    Init_DS18B20();
    temp = ReadTemperature();
    delay_ms(100);
    TR0=1;
    while(1)
    {

           temp = ReadTemperature();
        LCD_WriteString(0,2,"NowTemp=");
        LCD_SramChar(8,2,temp%10000/1000+0x30);
        LCD_SramChar(9,2,temp%1000/100+0x30);
        LCD_SramChar(10,2,temp%100/10+0x30);
        LCD_SramChar(11,2,'.');
        LCD_SramChar(12,2,temp%10+0x30);
        LCD_SramChar(13,2,'C');
        SetMode();
        key_scan();

        switch(ModeFlag)                //模式选择
        {
        case 1:
                                          if(mode==0)
                                                {
              CookRice();                  

                                                   else if(mode==1)
                                                {
                    CookRice2();                                                       
                                                }
            break;
        case 2:
                                          if(mode==0)
                                                {
              CookCong();
                                                }
                                                else if(mode==1)
                                                {
                    CookCong2();                                                       
                                                }                                       
            break;
        case 3:
                                          if(mode==0)
                                                {
              CookSoup();
                                                }
                                                else if(mode==1)
                                                {
                    CookSoup2();                                                       
                                                }                                               
            break;
        case 4:   
                                          if(mode==0)
                                                {
              Stewedsoup();
                                                }
                                                else if(mode==1)
                                                {
                    Stewedsoup2();                                                       
                                                }                                               
            break;
        case 5:
            KeepTemp();
            break;
        case 6:
            SetTime();
            break;
        case 7:
            Set_KEY();
            break;                               
        }
    }
}                  
/*******************************************
******         定时器定时部分   ***************
*******************************************/
void t0() interrupt 1
{
    TH0 = 0X3C;
    TL0 = 0XB0;
    count ++;
    if(count >= 20)
    {
        count = 0;
        sec ++;
        sec2 ++;                       
        if(sec == 60)
        {
            sec = 0;
            minute ++;
            if(minute == 60)
                hour ++;
        }
    }
}     

                                               




                                               

                                       


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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