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

標題: 溫度傳感器,改了一天了,求大神幫助 [打印本頁]

作者: 糾結123    時間: 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();
        }
}


作者: 怪怪愛玩    時間: 2017-8-16 10:52
延時函數好像不對吧?
作者: cjjcjj1    時間: 2017-8-16 10:54
提示: 作者被禁止或刪除 內容自動屏蔽
作者: 糾結123    時間: 2017-8-16 11:48
怪怪愛玩 發表于 2017-8-16 10:52
延時函數好像不對吧?

應該是對的

作者: 糾結123    時間: 2017-8-16 12:14
cjjcjj1 發表于 2017-8-16 10:54
你好!具體是什么現象?你要實現的總體功能是什么?可以加我

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


作者: hange_v    時間: 2017-8-16 12:50
在DigDisplay()函數中,P0=data[5-i];這句是錯的。應該是P0=smgduan[data[i]];
作者: hange_v    時間: 2017-8-16 12:56
你的datadeal(int data2)和DigDisplay()函數根本不對,在好好看看怎么寫顯示函數;應該是把數據放到數組data,之后通過數碼管smgduan顯示數字。好好縷一縷吧。
作者: 糾結123    時間: 2017-8-16 16:06
hange_v 發表于 2017-8-16 12:56
你的datadeal(int data2)和DigDisplay()函數根本不對,在好好看看怎么寫顯示函數;應該是把數據放到數組dat ...

這個是對的,例程就是這么寫的,
作者: hange_v    時間: 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);
    }
}
作者: yzwzfyz    時間: 2017-8-16 20:53
多看傳感器手冊,理解了就好寫了。
作者: 糾結123    時間: 2017-8-16 21:45
還是不對呀,我拔掉DS18B20后,數碼管沒有變化
作者: chinagkdj    時間: 2017-8-17 08:35
網上有實例,下個實例試試。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产丝袜一区二区三区免费视频 | 美女视频黄色片 | 日本欧美在线视频 | 久久午夜国产精品www忘忧草 | 中文天堂在线一区 | 一级免费在线视频 | 亚洲第一av | 日本精品一区二区三区在线观看视频 | 日韩中文一区 | 中文字幕一区二区三区四区 | 国产精品久久久久久久久污网站 | 高清黄色 | 欧美国产在线一区 | 99国产视频 | 亚洲天堂av在线 | 欧美11一13sex性hd | 伊人免费网| 亚洲毛片一区二区 | 九九精品久久久 | 日韩av在线一区二区 | 亚洲美女在线视频 | 日韩中文字幕在线视频观看 | 亚洲欧美综合精品久久成人 | 亚洲va国产日韩欧美精品色婷婷 | 国产一区二区三区久久久久久久久 | 亚洲成人精品一区 | 欧美亚洲视频在线观看 | 日本一区高清 | 国产精品久久久久久久久免费丝袜 | 91精品国产91久久久久久丝袜 | 男人天堂网址 | 久久久这里都是精品 | 国产综合av | 56pao在线| 亚洲麻豆 | 成人精品一区二区三区 | 国产目拍亚洲精品99久久精品 | av网站在线免费观看 | 亚洲视频免费 | 夜夜艹天天干 | 国产精品99 |