找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機(jī)的溫度控制器源程序

[復(fù)制鏈接]
ID:353431 發(fā)表于 2018-6-17 20:20 | 顯示全部樓層 |閱讀模式
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit p34=P2^4;
sbit p35=P2^5 ;
sbit p36=P2^6;
sbit dp=P0^7;
sbit p37=P2^7;
sbit DQ=P2^2;
sbit SET=P3^1;
sbit LING=P2^0;
signed char m;
bit sign=0;
signed char shangxian=40;
signed char xiaxian=5;
uchar code
LEDData[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};   //共陽極數(shù)碼表



/****延時(shí)子程序******/
void Delay(uint i)
{
    while(i--);
}

/*****初始化DS18B20*****/
void Init_DS18B20(void)
{
    unsigned char x=0;
        DQ=1;
        Delay(8);
        DQ=0;
        Delay(80);
        DQ=1;
        Delay(14);
        x=DQ;
        Delay(20);
}

/*******讀一個(gè)字節(jié)****/
unsigned char ReadOneChar(void)
{
   unsigned char i=0;
   unsigned char dat=0;
   for(i=8;i>0;i--)
   {
      DQ=0;
          dat>>=1;
          DQ=1;
          if(DQ);
          dat|=0x80;
          Delay(4);
        }
        return(dat);
}

/*****寫一個(gè)字節(jié)******/
void WriteOneChar(unsigned char dat)
{
    unsigned char i=0;
        for(i=8;i>0;i--)
        {
           DQ=0;
           DQ=dat&0x01;
           Delay(5);
           DQ=1;
           dat>>=1;
        }
}

void Tmpchange(void)
{
    Init_DS18B20();
        WriteOneChar(0xCC);
        WriteOneChar(0x44);
}

/********讀取溫度********/
        unsigned char ReadTemperature(void)
        {
           unsigned char a=0;
           unsigned char b=0;
           unsigned int t=0;
           float tt=0;
           Tmpchange();
           Init_DS18B20();
           WriteOneChar(0xCC);
           WriteOneChar(0xBE);
           a=ReadOneChar();
           b=ReadOneChar();
           t=b;
           t<<=8;
           t=t|a;
           tt=t*0.0625;
           t=tt*100+0.5;
           return(t);
        }

/*********顯示開機(jī)初始化等待畫面********/
Disp_init()
{
   P0=0x80;
   p34=1;
   p35=0;
   p36=0;
   p37=0;
   Delay(200);
   P0=0x80;
   p34=0;p35=1;p36=0;p37=0;
   Delay(200);
   P0=0x80;
   p34=0;p35=0;p36=1;p37=0;
   Delay(200);
   P0=0x80;
   p34=0;p35=0;p36=0;p37=1;
   Delay(200);
   P0=0x80;
}

/*********顯示溫度子程序********/
Disp_Temperature()
{
    uint a,b,c,d,e;
        e=ReadTemperature();
        a=e/1000;
        b=e/100-a*10;
        d=e%10;
        c=(e%100)/10;
        m=e/100;
        if(m>shangxian||m<xiaxian)
        LING=1;
        else
        LING=0 ;
        p34=0;p35=0;p36=0;p37=0;
        P0=LEDData[d];
        p34=1;p35=0;p36=0;p37=0;
        Delay(300);
        p34=0;p35=0;p36=0;p37=0;
        P0=LEDData[c];
        p34=0;p35=1;p36=0;p37=0;
        Delay(300);
        p34=0;p35=0;p36=0;p37=0;
        P0=LEDData[b];
        dp=0;
        p34=0;p35=0;p36=1;p37=0;
        Delay(300);
        p34=0;p35=0;p36=0;p37=0;
        P0=LEDData[a];
        p34=0;p35=0;p36=0;p37=1;
        Delay(300);
        p34=0;p35=0;p36=0;p37=0;
}

disptiaozheng()
{
   uchar f,g,j,k;
   f=shangxian/10;
   g=shangxian%10;
   j=xiaxian/10;
   k=xiaxian%10;
   p34=0;p35=0;p36=0;p37=0;
   P0=0xc0;
   p34=1;p35=0;p36=0;p37=0;
   Delay(200);
   p34=0;p35=0;p36=0;p37=0;
   P0=0xc0;
   p34=0;p35=1;p36=0;p37=0;
   Delay(200);
   p34=0;p35=0;p36=0;p37=0;
   if(SET==1)
   {
      P0=LEDData[g];
          dp=0;
        }
        else
        {
          P0=LEDData[k];
          dp=0;
        }
        p34=0;p35=0;p36=1;p37=0;
        Delay(200);
        p34=0;p35=0;p36=0;p37=0;
        if(SET==1)
        P0=LEDData[f];
        else
        {
           if(f==0)
           P0=0x00;
           else
           P0=LEDData[j];
         }
         p34=0;p35=0;p36=0;p37=1;
         Delay(200);
         p34=0;p35=0;p36=0;p37=0;
         Delay(200);
}

/********外部中斷0服務(wù)程序****/
void int0(void) interrupt 0
{
    EX0=0;
        sign=1;
        if(SET==1)
        shangxian++;
        else
        xiaxian++;
        Delay(500);
        EX0=1;
}

/********外部中斷1服務(wù)程序*********/
void int1(void) interrupt 1
{
   EX1=0;
   if(SET==1)
   shangxian--;
   else
   xiaxian--;
   Delay(500);
   EX1=1;
}

  /******主函數(shù)********/
void main(void)
{
   uint z;
   IT0=1;
   IT1=1;
   EX0=1;
   EX1=1;
   EA=1;
   ReadTemperature();
   LING=0;
   for(z=0;z<100;z++)
   {
      Disp_init();
        }
        while(1)
        {
          Disp_Temperature();
          if(sign==1)
          {
             for(z=0;z<300;z++)
                 disptiaozheng();
                 sign=0;
          }
        }
}


回復(fù)

使用道具 舉報(bào)

ID:466025 發(fā)表于 2019-1-10 18:01 | 顯示全部樓層
有仿真圖嗎

回復(fù)

使用道具 舉報(bào)

ID:535889 發(fā)表于 2019-5-24 00:52 來自觸屏版 | 顯示全部樓層
有圖就好了
回復(fù)

使用道具 舉報(bào)

ID:849418 發(fā)表于 2020-11-29 16:26 來自觸屏版 | 顯示全部樓層
兄弟,有沒有仿真圖啊
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表