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

QQ登錄

只需一步,快速開始

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

求大神看一下哪里出了問題。18b20

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:319802 發(fā)表于 2018-5-1 13:19 來自觸屏版 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include<regx52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit a1=P2^2;
sbit b1=P2^3;
sbit c1=P2^4;
uchar DisplayData[5];
void Delay1ms(uint y)
{
        uint x;
        for( ; y>0; y--)
        {
                for(x=110; x>0; x--);
        }
}
uchar code LEDcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(uint x)
{
        while(x--);
}
void display()
{
        uchar i;
for(i=0;i<5;i++)
{
switch(i)
{
        case 0:a1=0;b1=0;c1=0;break;
        case 1:a1=1;b1=0;c1=0;break;
        case 2:a1=0;b1=1;c1=0;break;
        case 3:a1=1;b1=1;c1=0;break;
        case 4:a1=0;b1=0;c1=1;break;
}
P0=DisplayData[i];
delay(100);
P0=0x00;
}
}

sbit ds18b20=P3^7;
void rest()
{
        uchar  i;
        ds18b20=0;
        i=70;       
        while(i--);
        ds18b20=1;
        while(ds18b20);
        i=50;
        while(i--);
}
void writeds18b20(uchar dat)
{
        uchar i;
        for(i=0;i<8;i++)
        {
                uchar i;
                ds18b20=0;
                _nop_();_nop_();
                ds18b20=dat&0x01;
                dat>>=1;
                i=6;
                while(i--);
                ds18b20=1;
                _nop_();
        }
}
uchar readds18b20()
        {
                uchar bi,i,a;
                for(i=0;i<8;i++)
                {
                ds18b20=0;
                _nop_();_nop_();
                        ds18b20=1;
                        i++;
                        i++;
                        a=ds18b20;
                 bi=(bi>>1)|(a<<7);
                                i = 4;       
                while(i--);
                }
                return bi;
        }
        void  Ds18b20ChangTemp()
{
        rest();
        Delay1ms(1);
        writeds18b20(0xcc);                //跳過ROM操作命令                 
        writeds18b20(0x44);            //溫度轉(zhuǎn)換命令
        //Delay1ms(100);        //等待轉(zhuǎn)換成功,而如果你是一直刷著的話,就不用這個(gè)延時(shí)了
   
}
void  Ds18b20ReadTempCom()
{       

        rest();
        Delay1ms(1);
        writeds18b20(0xcc);         //跳過ROM操作命令
        writeds18b20(0xbe);         //發(fā)送讀取溫度命令
}
uint Ds18b20ReadTemp()
{
        uint temp = 0;
        uchar tmh, tml;
        Ds18b20ChangTemp();                                 //先寫入轉(zhuǎn)換命令
        Ds18b20ReadTempCom();                        //然后等待轉(zhuǎn)換完后發(fā)送讀取溫度命令
        tml = readds18b20();                //讀取溫度值共16位,先讀低字節(jié)
        tmh =readds18b20();                //再讀高字節(jié)
        temp = tmh;
        temp <<= 8;
        temp |= tml;
        return temp;
}
void datapros(uint temp)          
{
                temp=temp*0.0625;       
        DisplayData[0] = ~LEDcode[temp / 10000];
        DisplayData[1] = ~LEDcode[temp % 10000 / 1000];
        DisplayData[2] = ~LEDcode[temp % 1000 / 100] | 0x80;
        DisplayData[3] = ~LEDcode[temp % 100 / 10];
        DisplayData[4] = ~LEDcode[temp % 10];
}
main()
{
while(1)
{
datapros(Ds18b20ReadTemp());
display();       
}
}
對(duì)于延時(shí)多久我是真的頭疼,把控不了
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:123289 發(fā)表于 2018-5-2 17:46 | 只看該作者
讀通器件的手冊(cè),就知道該延時(shí)多少了。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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