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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

新手求助有多路三個(gè)ds18b20不用單總線的方法怎么做?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:76331 發(fā)表于 2015-4-12 16:12 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
最近在做單片機(jī)課設(shè) ds18b20多路溫度計(jì)老師要求我們不要用單總線的方法
代碼貼出來如下:
#include<reg52.h>
#include<intrins.h>
#define bool int
#define true 1
#define false 0
#define uchar unsigned char
#define uint unsigned int
bool flag=true;
uchar code table[]={0xc0,0xf9,//共陽數(shù)碼管普通編碼表
0xa4,0xb0,0x99,
0x92,0x82,0xf8,
0x80,0x90};
uchar code table_1[]={0x40,0x79,//共陽數(shù)碼管帶小數(shù)編碼表
0x24,0x30,0x19,
0x12,0x02,0x78,
0x00,0x10
};
sbit reset=P2^4; //定義復(fù)位鍵 按下復(fù)位鍵之后才可以按其余三個(gè)鍵來選擇溫度
sbit key1=P2^5; //定義三個(gè)獨(dú)立按鍵來選擇用哪一個(gè)ds18b20
sbit key2=P2^6;
sbit key3=P2^7;


sbit DQ1=P1^0; //位定義三個(gè)io口接ds18b20
sbit DQ2=P1^1;
sbit DQ3=P1^2;
/*************數(shù)碼管顯示延時(shí)程序*********************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*****************ds18b20精確延時(shí)程序***********/
/******************延時(shí)20us********************/
void time20(void)
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=16;a>0;a--);
}
/******************延時(shí)60us********************/
void time60(void)
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=48;a>0;a--);
}


/****************延時(shí)500us********************/
void time500(void)
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
/*************初始化程序*********************/
void Init_DS18B20_1()
{


DQ1= 1;
time20();
DQ1= 0;
time500();
DQ1= 1;
time60();
}
/************** DS18B20讀函數(shù),每次讀16位,可以讀出溫度寄存器的數(shù)值********************/
uchar read_1(void)
{
int i=0;
uchar u=0;
for (i=0;i<16;i++)
{
DQ1=0;
u>>=1;
DQ1=1;
if(DQ1) u|=0x8000;
time20();
}
return (u);
}
/*******************DS18B20寫函數(shù),寫指令給芯片,每次寫八位*************/
void write_1(unsigned char ku)
{
int i=0;
for (i=0;i<8;i++)
{
DQ1=0;
DQ1=ku&0x01;
delay(3);
DQ1=1;
ku>>=1;
}
}
/*******************讀取顯示函數(shù) 返回的是16位的溫度數(shù)據(jù)讀取并顯示到數(shù)碼管上***************************/
void Read_and_display_Temperature_1()
{
int num=0;
int aa,bb,cc,dd;
float tm=0;
uchar tp;
write_1(0xcc);//跳過序列號(hào) (0xcc)
write_1(0x44);//啟動(dòng)溫度轉(zhuǎn)換 (0x44)
Init_DS18B20_1();//初始化ds18b20
write_1(0xcc);//跳過序列號(hào)(0xcc)
write_1(0xbe);//開始讀取溫度寄存器(指令0xbe)
tp=read_1();//調(diào)用函數(shù)讀取溫度寄存器
delay(60);
if((tp&0xf800)==0xf800)//判斷正負(fù)數(shù) if成立為負(fù)數(shù)
{
tp=~tp+1;//將tp取反再+1
tm=tp*0.0625;//得到無符號(hào)的真實(shí)溫度值
num=(uint)(tm*10);//將得到的溫度乘以10 以便得到小數(shù)后一位的數(shù)據(jù)
aa=num/1000;//得到溫度百位
bb=num%1000/100; //得到溫度十位
cc=num%1000%100/10; //得到溫度個(gè)位
dd=num%1000%100%10; //得到溫度小數(shù)后一位
while(flag)
{
/*位選 將第一個(gè)數(shù)碼管點(diǎn)亮*/
P2=0Xfe;
/*段選 使第一個(gè)數(shù)碼管顯示負(fù)號(hào)*/
P0=0xbf;
/*延時(shí)*/
delay(6);
P2=0xfd;
P0=table[bb];
delay(6);
P2=0xfb;
P0=table_1[cc];
delay(6);
P2=0xf7;
P0=table[dd];
if (reset==0)
{
delay(6);
if(reset==0){flag = false;} //退出溫度顯示死循環(huán)
}
}
flag=true;//將標(biāo)志位復(fù)原
}
else
{
tm=tp*0.0625;//得到無符號(hào)的真實(shí)溫度值
num=(uint)(tm*10);//將得到的溫度乘以10 以便得到小數(shù)后一位的數(shù)據(jù)
aa=num/1000;//得到溫度百位
bb=num%1000/100; //得到溫度十位
cc=num%1000%100/10; //得到溫度個(gè)位
dd=num%1000%100%10; //得到溫度小數(shù)后一位
while(flag)
{
/*位選 將第一個(gè)數(shù)碼管點(diǎn)亮*/
P2=0xfe;
/*段選 */
P0=table[aa];
/*延時(shí)*/
delay(6);
P2=0xfd;
P0=table[bb];
delay(6);
P2=0xfb;
P0=table_1[cc];
delay(6);
P2=0xf7;
P0=table[dd];
if (reset==0)
{
delay(6);
if(reset==0){flag = false;} //退出溫度顯示死循環(huán)
}
}
flag=true;//將標(biāo)志位復(fù)原
}
}
void main()
{
while(1)
{
if(key1==0) //第一個(gè)按鍵按下選擇第一個(gè)ds18b20
{
delay(5);
if(key1==0)//防抖動(dòng)
{
Read_and_display_Temperature_1();
}
}
}
代碼編譯沒錯(cuò)
仿真和下載到單片機(jī)中都沒效果
還有就是新手寫的程序太復(fù)雜
最想問的是有三個(gè)ds18b20 難道我得把程序?qū)懭閱?/font>
請論壇的大神幫幫我這個(gè)新手





QK~3OBPQH~4[]_4{[$FUF$3.png (27.54 KB, 下載次數(shù): 115)

QK~3OBPQH~4[]_4{[$FUF$3.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:76755 發(fā)表于 2015-4-12 16:48 | 只看該作者
管用
回復(fù)

使用道具 舉報(bào)

板凳
ID:73711 發(fā)表于 2015-4-12 18:15 | 只看該作者
你好我看了您寫的程序   我沒找到應(yīng)答程序    還有延遲時(shí)間 要看手冊 我用的延遲 就4US的 好好調(diào)延遲  用示波器看
回復(fù)

使用道具 舉報(bào)

地板
ID:69408 發(fā)表于 2015-4-13 09:33 | 只看該作者
換個(gè)方法,我這個(gè)可以參考看看,應(yīng)該可以用的!http://www.zg4o1577.cn/bbs/dpj-31460-1.html

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

5#
ID:69408 發(fā)表于 2015-4-13 09:36 | 只看該作者
換個(gè)方法,直接顯示3路,我這個(gè)應(yīng)該可以參考使用!http://www.zg4o1577.cn/bbs/dpj-31460-1.html

評(píng)分

參與人數(shù) 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久精品国产亚洲夜色av网站 | 成人一区精品 | 婷婷99| 精品久久99| 在线视频一区二区 | 国产精品久久久久久久久久久久久 | 日韩一区精品 | 日韩精品一区在线观看 | 欧美日韩a | 国产99久久精品一区二区永久免费 | www国产精品 | 久久免费精品 | 久久av一区二区三区 | 青青草免费在线视频 | 日韩中文字幕免费在线 | 香蕉久久a毛片 | 超碰日韩 | 亚洲高清视频在线观看 | 中文字幕成人av | 久久亚洲春色中文字幕久久久 | www.久草.com | 日韩在线一区二区 | 97国产精品| 久草在线在线精品观看 | 欧美成年人| 亚洲一区综合 | 中文字幕在线看 | 狠狠操av| 精品国产青草久久久久96 | 国产女人与拘做受视频 | 天堂在线www | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 精品无码久久久久久国产 | 五月激情综合网 | 91精品国产色综合久久不卡98 | 一级毛片视频在线 | 欧美一区视频 | 国产二区av | 中文字幕一区二区在线观看 | 欧美精品久久久久久 | 中文字幕 在线观看 |