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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

溫度傳感器,改了一天了,求大神幫助

[復制鏈接]
跳轉到指定樓層
樓主
ID:227857 發表于 2017-8-16 09:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit datacon=P3^7;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar data1[8];

void Delay1ms(uint y)
{
        uint x;
        for( ; y>0; y--)
        {
                for(x=110; x>0; x--);
        }
}
uchar Initial1()
{
    uint a,i;
        datacon=0;
        a=70;
        while(a--);
        datacon=1;
        i=0;
        while(datacon)        //等待DS18B20拉低總線
        {
                Delay1ms(1);
                i++;
                if(i>5)//等待>5MS
                {
                        return 0;//初始化失敗
                }
       
        }
        return 1;//初始化成功
}

void Writing1(uchar data_)
{
        uint i,j;
        for(i=0;i<8;i++)
        {
                datacon=0;
                j++;
                j++;
                datacon=data_&0x01;
                data_>>=1;
                j=6;
                while(j--)                  ;
                datacon=1;
                data_>>=1;
        }
}
uchar reading1(void)
{
        uint i,j;
        uchar data_,bit_;
        {
                for(i=7;i>=0;i--)
                {
                datacon=0;
                j++;
                datacon=1;
                j++;
                j++;
        bit_=datacon;
                data_=(data_ >> 1) | (bit_ << 7);  
                j=4;
                while(j--);
                }
        }
        return data_;
}
void DS18B20initial1()
{
        Initial1() ;
        Delay1ms(1);
        Writing1(0xcc);                                 
        Writing1(0x44);
        Delay1ms(100);
}
void DS18B20reading1()
{
        Initial1() ;
        Delay1ms(1);
        Writing1(0xcc);                                 
        Writing1(0xbe);       
}
int Ds18b20ReadTemp1()
{
        int temp = 0;
        uchar tmh, tml;
        DS18B20initial1();                                
        DS18B20reading1();                       
        tml = reading1();               
        tmh = reading1();               
        temp = tmh;
        temp <<= 8;
        temp |= tml;
        return temp;
}

void delay(uint i)
{
        while(i--);       
}


void datadeal(int data2)
{
        float a;
        if(data2<0)
        {
        data1[0]=0x40;
        data2=data2-1;
        data2=~data2;         //data2*=(-1);
        a=data2;
        data2=a*0.0625*100;
        }
        else
        {
        data1[0]=0x00;
        a=data2;
        data2=a*0.0625*100;
        }
        data1[1]=smgduan[data2/10000];
        data1[2]=smgduan[data2%10000/1000];
        data1[3]=smgduan[data2%1000/100]|0x80;
        data1[4]=smgduan[data2%100/10];
        data1[5]=smgduan[data2%10];
}
void DigDisplay()
{
        uchar i;
        for(i=0;i<6;i++)
        {
                switch(i)       
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;
                        case(1):
                                LSA=1;LSB=0;LSC=0; break ;
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;       
                }
                P0=data1[5-i];
                delay(100);
                P0=0x00;
        }               
}
void main()
{        while(1)
        {
                datadeal(Ds18b20ReadTemp1())        ;
                DigDisplay();
        }
}

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

使用道具 舉報

沙發
ID:227864 發表于 2017-8-16 10:52 | 只看該作者
延時函數好像不對吧?
回復

使用道具 舉報

板凳
ID:82765 發表于 2017-8-16 10:54 | 只看該作者
提示: 作者被禁止或刪除 內容自動屏蔽
回復

使用道具 舉報

地板
ID:227857 發表于 2017-8-16 11:48 | 只看該作者
怪怪愛玩 發表于 2017-8-16 10:52
延時函數好像不對吧?

應該是對的
回復

使用道具 舉報

5#
ID:227857 發表于 2017-8-16 12:14 | 只看該作者
cjjcjj1 發表于 2017-8-16 10:54
你好!具體是什么現象?你要實現的總體功能是什么?可以加我

就是讓數碼管顯示溫度,但是數碼管就是不顯示

回復

使用道具 舉報

6#
ID:190832 發表于 2017-8-16 12:50 | 只看該作者
在DigDisplay()函數中,P0=data[5-i];這句是錯的。應該是P0=smgduan[data[i]];
回復

使用道具 舉報

7#
ID:190832 發表于 2017-8-16 12:56 | 只看該作者
你的datadeal(int data2)和DigDisplay()函數根本不對,在好好看看怎么寫顯示函數;應該是把數據放到數組data,之后通過數碼管smgduan顯示數字。好好縷一縷吧。
回復

使用道具 舉報

8#
ID:227857 發表于 2017-8-16 16:06 | 只看該作者
hange_v 發表于 2017-8-16 12:56
你的datadeal(int data2)和DigDisplay()函數根本不對,在好好看看怎么寫顯示函數;應該是把數據放到數組dat ...

這個是對的,例程就是這么寫的,
回復

使用道具 舉報

9#
ID:190832 發表于 2017-8-16 16:45 | 只看該作者
糾結123 發表于 2017-8-16 16:06
這個是對的,例程就是這么寫的,

這是我以前的代碼,你看看,另外看看你的跳線帽插上了沒有。。。
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define nop() _nop_()
bit flag;
sbit SDA=P3^7;
sbit DA=P2^2;sbit DB=P2^3;sbit DC=P2^4;
void delay(ms)
{
        uchar i,j;
        for(i=0;i<ms;i++)
          for(j=0;j<110;j++);
}
uchar code table[]={
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71,0x80,0x40};
uchar initDS13B20()
{
        uchar i;
        SDA=0;i=70;
        while(i--);
        SDA=1;i=0;
        while(SDA)
        {
                i++;
                delay(1);
                if(i>50)
                        return 0;
    }
        return 1;
}
void DS13B20write(uchar com)
{
        uchar i,j;
        for(i=0;i<8;i++)
        {
                SDA=0;j++;
                SDA=(com&0x01);
                j=6;while(j--);
                SDA=1;
                com=(com>>1);
        }
}
uchar DS13B20read()
{
        uchar i,j,di=0,dat=0;
        for(i=0;i<8;i++)
        {
                SDA=0;j++;
                SDA=1;j++;j++;
                di=SDA;
                dat=((dat>>1)|(di<<7));
                j=4;
                while(j--);
    }
        return dat;
}
void change()
{
        initDS13B20();
        delay(1);
        DS13B20write(0xcc);
        DS13B20write(0x44);
}
void getvalue()
{
        initDS13B20();
        delay(1);
        DS13B20write(0xcc);
        DS13B20write(0xbe);
}
int read()
{
        uchar dal=0,dah=0;
        int dat=0;
        change();
        getvalue();
        dal=DS13B20read();
        dah=DS13B20read();
        dat=((dah<<8)|dal);
        return dat;
}
float changeC()
{
        int a;
        float value;
        a=read();
        if(a>=0)
        {
            flag=1;
                value=a*0.0625;
        }
        else
        {
                flag=0;
                value=(~(a-1))*0.625;
        }
        return value;
}
void disp1(float num)
{
        uchar a,i,j;
        for(i=0;i<6;i++)
        {
                switch(i)
                {
            case 0:DA=0;DB=0;DC=0;a=(int)num/10;    break;               
            case 1:DA=1;DB=0;DC=0;a=(int)num%10;    break;
            case 2:DA=0;DB=1;DC=0;a=16;             break;
                        case 3:DA=1;DB=1;DC=0;a=(int)(num*10)%10; break;
                        case 4:DA=0;DB=0;DC=1;a=(int)(num*100)%10;  break;       
                        case 5:DA=1;DB=0;DC=1;a=(int)(num*1000)%10;   break;
                        case 6:DA=0;DB=1;DC=1;a=(int)(num*10000)%10;      break;               
        }
                P0=table[a];
                j=50;
                while(j--);
                P0=0x00;
    }
}
void disp0(float num1)
{
        uchar a,i,j;
        float num;
        num=0-num1;
        for(i=0;i<7;i++)
        {
                switch(i)
                {
            case 0:DA=0;DB=0;DC=0;a=17;      break;
                        case 1:DA=1;DB=0;DC=0;a=(int)num/10;  break;               
            case 2:DA=0;DB=1;DC=0;a=(int)num%10;break;
            case 3:DA=1;DB=1;DC=0;a=16;          break;
                        case 4:DA=0;DB=0;DC=1;a=(int)(num*10)%10; break;
                        case 5:DA=1;DB=0;DC=1;a=(int)(num*100)%10;  break;       
                        case 6:DA=0;DB=1;DC=1;a=(int)(num*1000)%10;   break;
                        case 7:DA=1;DB=1;DC=1;a=(int)(num*10000)%10;      break;               
        }
                P0=table[a];
                j=50;
                while(j--);
                P0=0x00;
    }
}
void main()
{
        float value;
        while(1)
        {
                value=changeC();
                if(flag==1)
                  disp1(value);
                else disp0(value);
    }
}
回復

使用道具 舉報

10#
ID:123289 發表于 2017-8-16 20:53 | 只看該作者
多看傳感器手冊,理解了就好寫了。
回復

使用道具 舉報

11#
ID:227857 發表于 2017-8-16 21:45 | 只看該作者
還是不對呀,我拔掉DS18B20后,數碼管沒有變化
回復

使用道具 舉報

12#
ID:95277 發表于 2017-8-17 08:35 | 只看該作者
網上有實例,下個實例試試。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产高清在线精品一区二区三区 | 亚洲黄色在线免费观看 | 欧美成人一区二区 | 天堂网中文字幕在线观看 | 日韩精品久久一区二区三区 | 成人精品一区 | 国产99精品 | 成人av一区二区亚洲精 | www成人免费 | 国产精品免费在线 | 免费a在线 | 91精品国产91久久久久久最新 | 亚洲福利 | 国产成人精品午夜视频免费 | 欧美一区二区三区高清视频 | 激情一区二区三区 | 成人在线黄色 | 雨宫琴音一区二区在线 | 国产精品久久久久久久久 | 天天射美女 | 成人免费黄视频 | 蜜桃臀av一区二区三区 | 成人在线观看免费视频 | 成人美女免费网站视频 | 能看的av网站 | 日韩一级免费大片 | 国产精品亚洲一区二区三区在线 | 中文字幕在线看第二 | 国产黄色电影 | www.中文字幕av | 日韩免费视频一区二区 | 人人擦人人 | 国产精品久久久久久久久久免费 | 人人干人人爽 | 成人免费网站视频 | 毛片一级片 | 国产精品三级久久久久久电影 | 国产精品免费观看 | 久久精品国产一区二区电影 | 成人欧美一区二区三区1314 | 久久精品欧美一区二区三区不卡 |