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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3897|回復(fù): 2
收起左側(cè)

基于單片機(jī)的微波爐控制,所有功能可用,為什么我溫度亂跳

[復(fù)制鏈接]
ID:250518 發(fā)表于 2018-3-8 21:08 | 顯示全部樓層 |閱讀模式
30黑幣
本帖最后由 迷失朋友 于 2018-3-8 21:12 編輯

1520514314(1).png 微信截圖_20180308210958.png 微信截圖_20180308211018.png 求求大神解救我,是我程序問題嗎?
#include <reg51.h>
#define  uint unsigned int
#define  uchar unsigned char
uchar codevalue[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //七段數(shù)碼管顯示碼,顯示0~9
uint tt=20;        // 為了計(jì)時一秒,定時器一次中斷為50ms,20*50ms=1s
uint mt=150;      //電機(jī)速度
uint st=1;       //掃描速度
uint signalm;    //電機(jī)信號
uint signald;    //顯示信號
uint minutetens,minuteuints,secondtens,seconduints;//時間分、秒十位個位
uint temphundreds,temptens,tempuints;//溫度百位十位個位
uint tmax=30;    //火力上限
uint check=0;    //檢測信號
uint m;        //全局溫度
int count_s=0;    //時間
sbit P10=P1^0;                //引腳定義
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P30=P3^0;
sbit P31=P3^1;
sbit P32=P3^2;
sbit P33=P3^3;
sbit P34=P3^4;
sbit P35=P3^5;
sbit P36=P3^6;
sbit P37=P3^7;
sbit DQ=P2^7;   //定義DS18B20總線I/O

void T_initalize()
{
        EA=1;            //開中斷
        ET0=1;
        ET1=1;           //定時器 中斷允許
        TMOD=0x11;       //定時器T0 定時   方式一
    TR1=1;
        TH0=0x3c;
        TL0=0xaf;
        TH1=0xfc;
        TL1=0x18;
//12M 晶振,65536-15536=50000,50000us*20=1000000us=1s
}

void Delay(uint i)//延時
{
while( i-- );
}

void Init_DS18B20(void)//初始化DS18B20
{
uchar n;
DQ=1;
Delay(8);
DQ=0;
Delay(80);   //500us
DQ=1;
Delay(8);
n=DQ;
Delay(4);
}

uchar Readonechar(void)//讀一個字節(jié)
{
  uchar i,value;
for(i=0;i<8;i++)
{
  DQ=0;       //給脈沖
  value>>=1;
  DQ=1;       //給脈沖
  if(DQ)
  value|=0x80;
  Delay(4);
}
return value;
}

void Writeonechar(uchar dat)//寫一個字節(jié)
{
  uchar i;
for(i=0;i<8;i++)
{
  DQ=0;
  DQ=dat&0x01;
  Delay(4);
  DQ=1;
  dat>>=1;
}
Delay(4);
}

void Tmperature_change(void) //發(fā)送溫度轉(zhuǎn)換命令
{
  Init_DS18B20();
  Writeonechar(0xCC);  //跳過讀序號列號的操作
  Writeonechar(0x44);  //啟動溫度轉(zhuǎn)換
}

uint Read_temperature(void)//讀取溫度
{
  uchar a=0;
  uchar b=0;
  uint t=0;
  Init_DS18B20();
  Tmperature_change();
  Delay(300);
  Init_DS18B20();
  Writeonechar(0xCC);  //跳過讀序號列號的操作
  Writeonechar(0xBE);  //讀取溫度寄存器
  a=Readonechar();     //讀低8位
  b=Readonechar();    //讀高8位
  t=b;
  t<<=8;
  t=t|a;
  t=t*0.0625;
  return(t);
}

void Temperature()//顯示溫度
{
uint i;
i=Read_temperature();  //獲取溫度值
temphundreds=i/100;            //百位
temptens=i%100/10;            //十位
tempuints=i%10;               //個位
m=i;
}

void Time()//顯示時間
{
minutetens=count_s/600;             //取分的十位
minuteuints=(count_s/60)%10;        //取分的個位                                 
secondtens=(count_s%60)/10;         //取秒的十位
seconduints=(count_s%60)%10;                   //取秒的個位
}

void Display_initalize()
{
P2=0xff;
P0=0x40;
P20=0,P21=1,P22=1,P23=1,P24=1,P25=1,P26=1;
Delay(120);
P2=0xff;
P0=0x40;
P20=1,P21=0,P22=1,P23=1,P24=1,P25=1,P26=1;
Delay(120);
P2=0xff;
P0=0x40;
P20=1,P21=1,P22=0,P23=1,P24=1,P25=1,P26=1;
Delay(120);
P2=0xff;
P0=0x40;
P20=1,P21=1,P22=1,P23=0,P24=1,P25=1,P26=1;
Delay(120);
P2=0xff;
P0=0x40;
P20=0,P21=1,P22=1,P23=1,P24=0,P25=1,P26=1;
Delay(120);
P2=0xff;
P0=0x40;
P20=0,P21=1,P22=1,P23=1,P24=1,P25=0,P26=1;
Delay(120);
P2=0xff;
P0=0x40;
P20=0,P21=1,P22=1,P23=1,P24=1,P25=1,P26=0;
Delay(120);
P2=0xff;
}

void Motor()//電機(jī)
{
switch(signalm)
{case 0:P33=1,P34=0,P35=0,P36=0;signalm=1;break;
case 1:P33=1,P34=1,P35=0,P36=0;signalm=2;break;
case 2:P33=0,P34=1,P35=0,P36=0;signalm=3;break;
case 3:P33=0,P34=1,P35=1,P36=0;signalm=4;break;
case 4:P33=0,P34=0,P35=1,P36=0;signalm=5;break;
case 5:P33=0,P34=0,P35=1,P36=1;signalm=6;break;
case 6:P33=0,P34=0,P35=0,P36=1;signalm=7;break;
case 7:P33=1,P34=0,P35=0,P36=1;signalm=0;break;
}
}

void Display()
{
switch(signald)
{case 0:P20=1,P21=1,P22=1,P23=1,P24=1,P25=1,P26=1;
        P0=codevalue[minutetens];
        P20=0,P21=1,P22=1,P23=1,P24=1,P25=1,P26=1;
        signald=1;
        break;
case 1:P20=1,P21=1,P22=1,P23=1,P24=1,P25=1,P26=1;
       P0=codevalue[minuteuints];
           P20=1,P21=0,P22=1,P23=1,P24=1,P25=1,P26=1;
           signald=2;
           break;
case 2:P20=1,P21=1,P22=1,P23=1,P24=1,P25=1,P26=1;
       P0=codevalue[secondtens];
           P20=1,P21=1,P22=0,P23=1,P24=1,P25=1,P26=1;
           signald=3;
           break;
case 3:P20=1,P21=1,P22=1,P23=1,P24=1,P25=1,P26=1;
       P0=codevalue[seconduints];
           P20=1,P21=1,P22=1,P23=0,P24=1,P25=1,P26=1;
           signald=4;
           break;
case 4:P20=1,P21=1,P22=1,P23=1,P24=1,P25=1,P26=1;
       P0=codevalue[temphundreds];
           P20=1,P21=1,P22=1,P23=1,P24=0,P25=1,P26=1;
           signald=5;
           break;
case 5:P20=1,P21=1,P22=1,P23=1,P24=1,P25=1,P26=1;
       P0=codevalue[temptens];
           P20=1,P21=1,P22=1,P23=1,P24=1,P25=0,P26=1;
           signald=6;
           break;
case 6:P20=1,P21=1,P22=1,P23=1,P24=1,P25=1,P26=1;
       P0=codevalue[tempuints];
           P20=1,P21=1,P22=1,P23=1,P24=1,P25=1,P26=0;
           signald=0;
           break;
}
}

void Temperature_check()//溫度檢測
{if(check==1)
{
if(m<=tmax)
P17=0;
if(m>tmax)
P17=1;
}
}

void Key_scan()//鍵位掃描
{   
        if(!P10)
        {
        count_s+=60;      //時間+1分
        if (count_s>6000)
            count_s=0;
        while(!P10);
        }
        
    if(!P11)
        {
        count_s-=60;       //時間-1分
        if (count_s<0)
            count_s=0;
        while(!P11);
        }

        if(!P12)
        {
                tmax=50;      //小火
        }

        if(!P13)
        {
            tmax=80;      //中火
        }

        if(!P14)
        {
                tmax=120;    //大火
        }

        if(!P15)
        {
                     P17=1;
         if(count_s==0)          //如果沒有設(shè)定時間,不加熱,定時器不工作
           { TR0=0;
                        TR1=0;
                        }
         else                    //如果已經(jīng)設(shè)定時間,則開始計(jì)時,開始加熱
                    {                  
            T_initalize();
            TR0=1;
                        TR1=1;
            check=1;
            P17=0;
            }
        }

        if(!P16)               //停止加熱,終止定時器
        {
                 P17=1;
                 TR0=0;
                 TR1=0;
         check=0;
                }
}

void t0() interrupt 1//定時
{        
    TR0=0;
    TH0=0x3c;
        TL0=0xaf;
    tt--;
        if (tt==0)
                {tt=20;
                count_s--;  //時間-1S
        if (count_s==0)  //如果定時已到
            {
                         P17=1;      //停止加熱,定時器終止
             TR0=0;
                         TR1=0;
                         check=0;
             P37=0;
                         Delay(500);
                         P37=1;
                         P37=0;
                         Delay(500);
                         P37=1;
                         P37=0;
                         Delay(500);
                         P37=1;
            }
        else
            TR0=1;        //繼續(xù)定時
                }
    else
        TR0=1;
           
}

void t1() interrupt 3
{
    TH1=0xfc;
        TL1=0x18;
        mt--;
    st--;
        if(mt==0)
        {if(check==1)Motor();
        mt=150;
        }
    if(st==0)
    {Display();
    st=1;
    }
}

void main()
{
uint j;
P37=0;
Delay(500);
P37=1;
Read_temperature();
Delay(150);
T_initalize();
for(j=0;j<100;j++)
{
Display_initalize();
}

while(1)
{
Time();
Temperature();
Key_scan();
Temperature_check();
}
} 微波爐.rar (28.97 KB, 下載次數(shù): 31)

回復(fù)

使用道具 舉報(bào)

ID:250518 發(fā)表于 2018-3-8 22:03 | 顯示全部樓層
問題解決了,現(xiàn)在新問題,ds18b20加上拉電阻,時鐘變慢了,什么情況?
回復(fù)

使用道具 舉報(bào)

ID:289477 發(fā)表于 2018-3-9 03:59 | 顯示全部樓層

;下載內(nèi)容使用說明
;----------------------

下載內(nèi)容的程序需要采用C語言的編譯軟件打開閱讀,也可以使用“UltraEdit”等軟件打開閱讀或者編輯。
但是這些程序必須使用“Embedded Workbench”集成開發(fā)環(huán)境進(jìn)行編譯調(diào)試。

下載內(nèi)容的電路圖是用Protel99軟件畫成的,所以必須使用該軟件打
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产999精品久久久久久 | 天天草天天射 | 国产精品海角社区在线观看 | 精品在线播放 | 在线不卡视频 | 久久久国产一区二区三区四区小说 | 欧美午夜精品久久久久免费视 | 久久久久久久久久久久久久国产 | 久久久高清 | 久久九| 欧美a在线观看 | 午夜伦理影院 | 精品国产视频 | 天堂亚洲网 | 中文字幕亚洲精品 | 日本一区二区高清不卡 | 青青久草| 国产资源在线播放 | 国产精品永久久久久 | 亚洲精品一区二区三区蜜桃久 | 日本在线看片 | 中文字幕二区 | 日韩一二区在线 | 亚洲在线一区二区 | 欧美综合一区二区 | 欧美一区二区小视频 | 久久精品男人的天堂 | 天天摸天天干 | 在线观看视频一区二区三区 | 国产视频精品在线观看 | 亚洲国产免费 | 亚洲a视频 | 亚洲精品国产第一综合99久久 | 国产专区在线 | 亚洲高清视频一区二区 | 欧美激情亚洲 | 久久精品播放 | 欧美狠狠操 | 一级黄色片网站 | 亚洲视屏 | 国产欧美视频一区二区 |