久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 900|回復: 0
打印 上一主題 下一主題
收起左側

單片機電飯鍋程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:918728 發表于 2024-4-24 08:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include "reg51.h"
#include "intrins.h"
#include "DHT11.h"
#include "1602.h"
#define uchar unsigned char
#define uint unsigned int
        
sbit led1=P2^2;//指示燈
sbit led2=P2^3;
sbit led3=P2^4;

sbit led7=P3^6;     //預約
sbit led8=P3^5;     //快慢燉切換
sbit led9=P3^7;     //保溫
sbit led10=P3^4;     //工作指示燈

sbit heat=P2^1;//加熱器
sbit beep=P2^0;//蜂鳴器
sbit shaogan=P3^3;//燒干檢測
sbit CLK=        P3^0;//時鐘,初始狀態為0
sbit DI=        P3^1;//數據輸入
sbit DO=        P3^1;// 數據輸出
sbit CS=        P2^5;
uint current=0;//存儲電流

uint time=0;
uchar pwm=0;//輸出功率控制
uchar mode=0;//模式
uchar shi1=0,fen1=1,shi2=0,fen2=1,miao=0;//煮飯時間+預約時間
uint sec=0;
uchar start=0;
uchar key=0,num=0;
uint k_flag;
bit flag;
uchar wendu,shidu;//溫度、濕度值
//延時
void delay(uint i)
{
    while(i--);
}
//ms延時
void delay_ms(uint i)
{
    while(i--)
        delay(110);
}

/*********************************************
讀取ADC
**********************************************/
uchar ADC()//通道ch0
{
        uchar temp0,temp1,i;
        CS=0;
        temp0=0;
        temp1=0;
        _nop_();
        _nop_();
        DI=1;//開始位
        _nop_();
        _nop_();
        CLK=1;
        _nop_();
        _nop_();
        CLK=0;
        _nop_();
        _nop_();
        DI=0;
        _nop_();
        _nop_();
//選擇通道0
        DI=1;
        _nop_();
        CLK=1;//上升沿DI=1
        _nop_();
        CLK=0;//1個下降沿DI=1
        _nop_();
        DI=0;
        _nop_();
        CLK=1;
        _nop_();
        CLK=0;//第3個上升沿DI=0
        _nop_();
           DI=1;
///********通道選擇結束開始讀取轉換后的二進制數****
//下降沿讀數,一下進行判斷和處理,共8次
for(i=0;i<8;i++)
   {
        temp0=temp0<<1;
        CLK=1;
    if(DO)
           temp0++;
           _nop_();
           CLK=0;
   }
for(i=0;i<8;i++)
   {
        temp1=temp1>>1;
        CLK=1;
    if(DO)
           temp1=temp1 +0x80;
           _nop_();
           CLK=0;
   }
         CS=1;
   return temp0;
}

//蜂鳴器
void buzzr()
{
    beep=0;
    delay_ms(500);
    beep=1;
    delay_ms(500);
    beep=0;
    delay_ms(500);
    beep=1;
    delay_ms(500);
    beep=0;
    delay_ms(500);
    beep=1;
    delay_ms(500);
    beep=0;
    delay_ms(500);
    beep=1;
}

//按鍵檢測
uchar key_scan()
{
    uchar i,j;
    i=0;
    j=0;
    P1=0x0f;
    if(P1!=0x0f) //檢測有無按下
    {
        switch(P1)//檢測行
        {
        case 0x0e:
            i=1;
            break;
        case 0x0d:
            i=5;
            break;
        case 0x0b:
            i=9;
            break;
        case 0x07:
            i=13;
        }
        P1=0xf0;
        switch(P1)//檢測列
        {
        case 0xe0:
            j=0;
            break;
        case 0xd0:
            j=1;
            break;
        case 0xb0:
            j=2;
            break;
        case 0x70:
            j=3;
        }
    }
    if(i+j !=key)
    {
        key=i+j;
        return i+j;
    }
    else
        return 0;
}

//主函數
void main()
{
    uchar i;
    TMOD|=0X01;
    TH0=(65536-1000)/256;
    TL0=(65536-1000)%256;
    ET0=1;//打開定時器0中斷允許
    EA=1;//打開總中斷
    TR0=1;//打開定時器
    LCD_Initial();
    while(1)
    {
                while(current>110)//過流
                {
                        heat=1;
      beep=~beep;  
                }
                if(current<50) //解除報警
                {
      beep=1;
                }
//     LCD_SramChar(13,2,current/100%10+0x30);           //顯示電流
//     LCD_SramChar(14,2,current/10%10+0x30);
//     LCD_SramChar(15,2,current%10+0x30);               
        //點亮指示燈

        switch(mode/2)
        {
        case 5:
            led1=0;
            led2=0;
            led3=1;
            break;
        case 4:
            led1=0;
            led2=1;
            led3=0;
            break;
        case 3:
            led1=0;
            led2=1;
            led3=1;
            break;
        case 2:
            led1=1;
            led2=0;
            led3=0;
            break;
        case 1:
            led1=1;
            led2=0;
            led3=1;
            break;
        case 0:
            led1=1;
            led2=1;
            led3=0;
        }
        //顯示
        if(led7==0)               //yuyue
        {

            LCD_WriteString(0,1,"Yu Yue:");
            LCD_SramChar(8,1,shi2/10+0x30);           //初始設定的時間
            LCD_SramChar(9,1,shi2%10+0x30);
            LCD_SramChar(10,1,':');
            LCD_SramChar(11,1,fen2/10%10+0x30);           //初始設定的時間
            LCD_SramChar(12,1,fen2%10+0x30);
            LCD_SramChar(13,1,':');
            LCD_SramChar(14,1,miao/10+0x30);           //初始設定的時間
            LCD_SramChar(15,1,miao%10+0x30);
        }
        else
        {
            if(led10==0)
            {
                LCD_WriteString(0,1,"ShiJian:");
                LCD_SramChar(8,1,shi1/10+0x30);           //初始設定的時間
                LCD_SramChar(9,1,shi1%10+0x30);
                LCD_SramChar(10,1,':');
                LCD_SramChar(11,1,fen1/10%10+0x30);           //初始設定的時間
                LCD_SramChar(12,1,fen1%10+0x30);
                LCD_SramChar(13,1,':');
                LCD_SramChar(14,1,miao/10+0x30);           //初始設定的時間
                LCD_SramChar(15,1,miao%10+0x30);
            }
            else
            {
                LCD_WriteString(0,1,"     dianfanguo");
            }
        }



        LCD_WriteString(0,2,"WD:");
        LCD_SramChar(3,2,wendu/10+0x30);           //顯示溫度
        LCD_SramChar(4,2,wendu%10+0x30);
        LCD_WriteString(7,2,"SD:");
        LCD_SramChar(10,2,shidu/10+0x30);           //顯示濕度
        LCD_SramChar(11,2,shidu%10+0x30);

        i=key_scan();//按鍵檢測

        if((i<7)&&(i>0)) //選擇
        {
            if(led8==1)//慢燉
            {
                mode=(i-1)*2;
            }
            else
            {
                mode=(i-1)*2+1;
            }
        }

       if(i==7)//快燉
        {
            led8=0;
            if(mode%2==0)
                mode++;
        }
        if(i==8)//慢燉
        {
            led8=1;
            if(mode%2==1)
                mode--;
        }

       if(i==9)//保溫
        {
            led9=!led9;
        }
        if(i==10)//預約
        {
            led7=!led7;
        }
        if(i==11)//啟動
        {
            start=1;
            led10=0;
        }

       if(i==12)//停止
        {
            start=0;
            led9=1;
            led10=1;
            shi1=0;
            fen1=1;
            shi2=0;
            fen2=0;
            miao=0;
            beep=1;
        }
        if(shaogan==0)//燒干
            beep=0;
        else
        {
            beep=1;
        }

        //設置
        if(led7==0)
        {
            if(i==13)//小時
            {
                if(shi2<23)
                    shi2++;
            }
            if(i==14)
            {
                if(shi2>0)
                    shi2--;
            }
            if(i==15)//分鐘
            {
                if(fen2<59)
                    fen2++;
            }
            if(i==16)
            {
                if(fen2>0)
                    fen2--;
            }
            else
        {
            if(i==13)//小時
            {
                if(shi1<23)
                    shi1++;
            }
            if(i==14)
            {
                if(shi1>0)
                    shi1--;
            }
            if(i==15)//分鐘
            {
                if(fen1<59)
                    fen1++;
            }
            if(i==16)
            {
                if(fen1>0)
                    fen1--;
            }
        }
    }
}

//定時器中斷
void Timer0() interrupt 1
{
    if(start)//啟動
    {
        if(led7)//正常模式
        {
            if(led9)
            {
                if(sec<500)//1s
                    sec++;
                else
                {
                    sec=0;
                    if(miao>0)//倒計時
                        miao--;
                    else
                    {
                        miao=59;
                        if(fen1>0)
                            fen1--;

                        else
                        {
                            fen1=59;
                            if(shi1>0)
                                shi1--;
                            else
                            {
                                shi1=0;//結束
                                fen1=0;
                                miao=0;
                                led7=1;
                                buzzr();
                                led8=1;
                                 led9=0;
                            }
                        }
                    }
                }
            }
            //輸出控制
            if(time<14)
                time++;
            else
            {
                time=0;
            }
            if(time<pwm)//占空比控制功率
                heat=0;
            else
                heat=1;
            //輸出值設置
            if(!led8)
                pwm=1;
            else
             {
                pwm=mode+2;
            }
        }
        else//預約模式
        {
            heat=1;
            if(sec<500)//1s
                sec++;
            else
            {
                sec=0;
                if(miao>0)//倒計時
                    miao--;
                else
                {
                    miao=59;
                    if(fen2>=0)
                        fen2--;     
                    else
                    {
                        fen2=59;
                        if(shi2>0)
                            shi2--;
                        else
                        {
                            shi2=0;//結束
                            fen2=0;
                            miao=0;//啟動
                            led7=1;
                                                                                                          led9=0;
                        }
                    }
                }
            }
        }
    }   
    else//停止
    {
        heat=1;
        led10=1;

    }
    if(num<200)        //測溫
        num++;
    else
    {
        num=0;
        dht11_recive();
        wendu=dht11_dat[2];
        shidu=dht11_dat[0];
              current=ADC();//電流檢測        
//                          current = current*2;//電流修正,電路測試環節可以修改
    }
    TH0=(65536-1000)/256;
    TL0=(65536-1000)%256;
}         


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: xnxx 日本免费 | 亚洲码欧美码一区二区三区 | 久久久久亚洲精品中文字幕 | 亚洲一区二区精品视频 | 国产精品国产三级国产aⅴ无密码 | 国产中文字幕在线 | 久久视频免费观看 | 亚洲精品一区二三区不卡 | 国产特级毛片 | 国内久久 | 欧美一区二区三区在线 | 欧美一区二区三区视频在线播放 | 亚洲精品久久久久中文字幕欢迎你 | 中文字幕久久久 | 精品日韩一区 | 欧美一级精品片在线看 | 日韩国产免费观看 | 午夜激情在线 | 亚洲美女视频 | 久久久久久高潮国产精品视 | 国产91丝袜在线熟 | 亚洲国产精品99久久久久久久久 | 我要看黄色录像一级片 | 精品国产一区二区三区性色av | 亚洲一区中文字幕 | 久久久国产一区二区三区 | 2一3sex性hd| 99成人| 丁香色婷婷 | 欧美黄色网 | 色综合色综合网色综合 | 国产精品久久久久aaaa | 成人免费看片 | 精品国产一区二区三区性色av | 日日干夜夜干 | 国产伦精品一区二区三区高清 | 日批免费看 | 亚洲精品免费视频 | 国产一级片一区二区 | 99精品免费 | av资源在线看|