欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1715|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

寫入的溫控程序?yàn)槭裁磫纹瑱C(jī)讀不了ds18b20數(shù)據(jù)顯示000.0采用STC89C52RC單片機(jī)12M晶振

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
#include<reg52.h>
#include<intrins.h>
#include<wendu.h>

#define uchar unsigned char
#define uint unsigned int

sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^6;
sbit led=P3^3;
sbit shenwen=P1^5;
sbit jiangwen=P1^6;
       
uchar code tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40,0x00,0x40,0x38,0x76};
uchar code tab3[]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0xC0,0x00};

uchar yi,er,san,si,san1;
uint shangxian=30,xiaxian=0,flag=0;

void delay(int ma);
void display1(uchar yi,uchar er,uchar san,uchar si);
void display2(uchar yi,uchar er,uchar san1,uchar si);
void keyscan();

void main()
{
          float wendu=0;
          int wenduzhen=0;

          yi=11;er=11;san=11;si=11;
          jiangwen=shenwen=1;//繼電器
               
          while(1)
                {
                  keyscan();

                  if(flag==0)//溫度測(cè)試界面
                  {
                          wendu=temget();
                               
                          if(wendu<xiaxian)   //升溫
                          {
                                          shenwen=0;
                                        jiangwen=1;
                          }
                          else if((wendu>=xiaxian) && (wendu<=shangxian) )        //實(shí)際溫度處于保溫范圍
                          {
                                          shenwen=1;           //繼電器初始化
                                        delay(5);
                                        jiangwen=1;
                                        delay(5);
                          }
                          else if(wendu>=shangxian)    //降溫開(kāi)啟,燒水功能關(guān)閉
                          {
                                          shenwen=1;
                                        jiangwen=0;
                          }

                          wenduzhen=wendu*10;
                      yi=wenduzhen/1000;
                          er=wenduzhen%1000/100;
                          san=wenduzhen%100/10;
                          si=wenduzhen%10;        

                          display1(yi,er,san,si);
                  }
               
                  else         if(flag==2)//溫度下限設(shè)置界面
                   {
                           yi=13;er=12;
                          xiaxian=shangxian-2;
                      san1=xiaxian%100/10;
                      si=xiaxian%10;
                                 
                          display2(yi,er,san1,si);
                  }

                  else         if(flag==1)//溫度上限設(shè)置界面
                   {
                           yi=14;er=12;
                      san1=shangxian%100/10;
                      si=shangxian%10;
                                 
                          display2(yi,er,san1,si);
                  }
//                 
//                  if(xiaxian>=shangxian)led=0;//下限超過(guò)上限led亮
//                  else led=1;

                }
}

void keyscan()
{
        if(key1==0)//設(shè)置界面
        {
                delay(5);
                if(key1==0)
                {
                  flag++;
                  if(flag>2)flag=0;
                }
                while(!key1);       
        }

          if(key2==0)//加數(shù)值
        {
                delay(5);
                if(key2==0)
                {
                          if(flag==1)
                        {
                                shangxian++;
                                if(shangxian>90)shangxian=0;
                        }
                        else if(flag==2)
                        {
                                xiaxian++;
                                if(xiaxian>89)shangxian=0;
                        }
                }
                while(!key2);       
        }

        if(key3==0)//減數(shù)值
        {
                delay(5);
                if(key3==0)
                {
                          if(flag==1)
                        {
                                shangxian--;
                                if(shangxian<1)xiaxian=1;
                        }
                        else if(flag==2)
                        {
                                xiaxian--;
                                if(shangxian<0)xiaxian=0;
                        }
                }
                while(!key3);       
        }
}

void display1(uchar yi,uchar er,uchar san,uchar si)
{
                P2=0XBF;
                P0=tab[yi];
                delay(1);
       
                P2=0XF7;
                P0=tab[er];
                delay(1);

                P2=0XEF;
                P0=tab3[san];
                delay(1);
       
                P2=0XDF;
                P0=tab[si];
                delay(1);
}

void display2(uchar yi,uchar er,uchar san1,uchar si)
{
                P2=0XBF;
                P0=tab[yi];
                delay(1);
       
                P2=0XF7;
                P0=tab[er];
                delay(1);

                P2=0XEF;
                P0=tab[san1];
                delay(1);
       
                P2=0XDF;
                P0=tab[si];
                delay(1);
}

void delay(int ms)
{
                int i,a;
                for(i=ms;i>0;i--)
                  for(a=125;a>0;a--);
}


#include<reg52.h>
#include<intrins.h>
#include<wendu.h>

uchar temget()
{
    uchar low,high;
    int temp;
        float temperature;

        dsinit();
        write(0xcc);
        write(0x44);
        Delay_us(100);

        dsinit();
        write(0xcc);
        write(0xbe);
        Delay_us(100);

    low=read();
        high=read();       

        temp=((high<<8)|low);
        temperature=temp*0.0625;//分辨率是0.0625

//        temp=high<<4;
//        temp|=(low>>4);        //顯示整數(shù)

    return temperature;
}

uchar read()
{
        uchar i;
        uchar dat;
        for(i=0;i<8;i++)
        {
                DQ=0;
                _nop_();_nop_();_nop_();_nop_();_nop_();
                dat>>=1;
                DQ=1;
                if(DQ==1)
                {
                                dat|=0x80;
                }
                Delay_us(100);                       
        }
        return dat;
}

void write(uchar dat)
{
                uchar i;
                for(i=0;i<8;i++)
                {
                                DQ=0;
                                DQ=dat&0x01;
                                Delay_us(70);
                                DQ=1;
                                dat>>=1;
                }
}



void dsinit()
{
                DQ=0;
                Delay_us(80);
                DQ=1;
                Delay_us(80);               
}


void Delay_us(uchar us)
{
        while(us--);        
}


#include<reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit DQ=P1^7;

uchar temget();
void write(uchar dat);
uchar read();
void dsinit();
void Delay_us(uchar us);



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

使用道具 舉報(bào)

沙發(fā)
ID:445575 發(fā)表于 2019-6-11 23:58 | 只看該作者
仿真軟件能讀取溫度且顯示,在硬件電路就出問(wèn)題了,其他功能都正常
回復(fù)

使用道具 舉報(bào)

板凳
ID:514901 發(fā)表于 2019-6-12 21:20 | 只看該作者
既然仿真沒(méi)問(wèn)題,那程序就應(yīng)該沒(méi)有多大問(wèn)題,大概是電路問(wèn)題,我猜是與DS18B20的IO口沒(méi)接上拉電阻
回復(fù)

使用道具 舉報(bào)

地板
ID:520590 發(fā)表于 2019-6-12 22:13 | 只看該作者
可能硬件問(wèn)題,有接上拉電阻嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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