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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

寫入的溫控程序為什么單片機讀不了ds18b20數據顯示000.0采用STC89C52RC單片機12M晶振

[復制鏈接]
跳轉到指定樓層
樓主
#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)//溫度測試界面
                  {
                          wendu=temget();
                               
                          if(wendu<xiaxian)   //升溫
                          {
                                          shenwen=0;
                                        jiangwen=1;
                          }
                          else if((wendu>=xiaxian) && (wendu<=shangxian) )        //實際溫度處于保溫范圍
                          {
                                          shenwen=1;           //繼電器初始化
                                        delay(5);
                                        jiangwen=1;
                                        delay(5);
                          }
                          else if(wendu>=shangxian)    //降溫開啟,燒水功能關閉
                          {
                                          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)//溫度下限設置界面
                   {
                           yi=13;er=12;
                          xiaxian=shangxian-2;
                      san1=xiaxian%100/10;
                      si=xiaxian%10;
                                 
                          display2(yi,er,san1,si);
                  }

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

                }
}

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

          if(key2==0)//加數值
        {
                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)//減數值
        {
                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);        //顯示整數

    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空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

使用道具 舉報

板凳
ID:514901 發表于 2019-6-12 21:20 | 只看該作者
既然仿真沒問題,那程序就應該沒有多大問題,大概是電路問題,我猜是與DS18B20的IO口沒接上拉電阻
回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕乱码视频32 | 国产精品久久久久久久久久久久冷 | 日韩在线精品视频 | 天天看天天干 | 免费一区二区 | 在线91| 一区二区福利视频 | 精品亚洲一区二区三区四区五区 | 日韩国产免费 | 婷婷五月色综合 | 国产欧美日韩综合精品一区二区 | 精品久久国产 | 亚洲精品中文字幕在线观看 | 国产精品久久久久久久久污网站 | 免费视频成人国产精品网站 | 黄色毛片在线看 | 91精品国产一区二区三区动漫 | 国产午夜精品一区二区三区在线观看 | 国产精品久久久久久久久久久免费看 | 久久国产婷婷国产香蕉 | 欧美亚洲国产日韩 | 久久久蜜桃 | 成人网av| 欧美在线观看一区 | 国产九九精品视频 | 天天操一操| 国产农村妇女精品一二区 | 国产精品久久久乱弄 | 欧美日韩久久 | 久久久久9999 | 波多野结衣电影一区 | 日韩三级免费观看 | 特黄色毛片 | 欧美三区在线观看 | 亚洲一区二区三区四区av | 在线欧美亚洲 | 蜜桃特黄a∨片免费观看 | 国产精品亚洲成在人线 | 欧美日韩综合 | 久久国产精品72免费观看 | 2023亚洲天堂 |