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

標題: 新手求助有多路三個ds18b20不用單總線的方法怎么做? [打印本頁]

作者: sunshine_紫薇    時間: 2015-4-12 16:12
標題: 新手求助有多路三個ds18b20不用單總線的方法怎么做?
最近在做單片機課設 ds18b20多路溫度計老師要求我們不要用單總線的方法
代碼貼出來如下:
#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,//共陽數碼管普通編碼表
0xa4,0xb0,0x99,
0x92,0x82,0xf8,
0x80,0x90};
uchar code table_1[]={0x40,0x79,//共陽數碼管帶小數編碼表
0x24,0x30,0x19,
0x12,0x02,0x78,
0x00,0x10
};
sbit reset=P2^4; //定義復位鍵 按下復位鍵之后才可以按其余三個鍵來選擇溫度
sbit key1=P2^5; //定義三個獨立按鍵來選擇用哪一個ds18b20
sbit key2=P2^6;
sbit key3=P2^7;


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


/****************延時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讀函數,每次讀16位,可以讀出溫度寄存器的數值********************/
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寫函數,寫指令給芯片,每次寫八位*************/
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;
}
}
/*******************讀取顯示函數 返回的是16位的溫度數據讀取并顯示到數碼管上***************************/
void Read_and_display_Temperature_1()
{
int num=0;
int aa,bb,cc,dd;
float tm=0;
uchar tp;
write_1(0xcc);//跳過序列號 (0xcc)
write_1(0x44);//啟動溫度轉換 (0x44)
Init_DS18B20_1();//初始化ds18b20
write_1(0xcc);//跳過序列號(0xcc)
write_1(0xbe);//開始讀取溫度寄存器(指令0xbe)
tp=read_1();//調用函數讀取溫度寄存器
delay(60);
if((tp&0xf800)==0xf800)//判斷正負數 if成立為負數
{
tp=~tp+1;//將tp取反再+1
tm=tp*0.0625;//得到無符號的真實溫度值
num=(uint)(tm*10);//將得到的溫度乘以10 以便得到小數后一位的數據
aa=num/1000;//得到溫度百位
bb=num%1000/100; //得到溫度十位
cc=num%1000%100/10; //得到溫度個位
dd=num%1000%100%10; //得到溫度小數后一位
while(flag)
{
/*位選 將第一個數碼管點亮*/
P2=0Xfe;
/*段選 使第一個數碼管顯示負號*/
P0=0xbf;
/*延時*/
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;} //退出溫度顯示死循環
}
}
flag=true;//將標志位復原
}
else
{
tm=tp*0.0625;//得到無符號的真實溫度值
num=(uint)(tm*10);//將得到的溫度乘以10 以便得到小數后一位的數據
aa=num/1000;//得到溫度百位
bb=num%1000/100; //得到溫度十位
cc=num%1000%100/10; //得到溫度個位
dd=num%1000%100%10; //得到溫度小數后一位
while(flag)
{
/*位選 將第一個數碼管點亮*/
P2=0xfe;
/*段選 */
P0=table[aa];
/*延時*/
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;} //退出溫度顯示死循環
}
}
flag=true;//將標志位復原
}
}
void main()
{
while(1)
{
if(key1==0) //第一個按鍵按下選擇第一個ds18b20
{
delay(5);
if(key1==0)//防抖動
{
Read_and_display_Temperature_1();
}
}
}
代碼編譯沒錯
仿真和下載到單片機中都沒效果
還有就是新手寫的程序太復雜
最想問的是有三個ds18b20 難道我得把程序寫三遍嗎
請論壇的大神幫幫我這個新手





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

QK~3OBPQH~4[]_4{[$FUF$3.png

作者: 忘語憶    時間: 2015-4-12 16:48
管用
作者: miuifen    時間: 2015-4-12 18:15
你好我看了您寫的程序   我沒找到應答程序    還有延遲時間 要看手冊 我用的延遲 就4US的 好好調延遲  用示波器看
作者: denminshen    時間: 2015-4-13 09:33
換個方法,我這個可以參考看看,應該可以用的!http://www.zg4o1577.cn/bbs/dpj-31460-1.html
作者: denminshen    時間: 2015-4-13 09:36
換個方法,直接顯示3路,我這個應該可以參考使用!http://www.zg4o1577.cn/bbs/dpj-31460-1.html




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产伦精品一区二区三区四区视频 | 亚洲欧美日本国产 | 国产成人jvid在线播放 | 日干夜干| 天天草av | 久久一本| 日韩中文一区 | 欧美v日韩v | 久久伊人一区二区 | 欧美日韩不卡 | 99免费在线视频 | 国产午夜精品一区二区 | 成人在线看片 | 亚洲免费观看视频 | 久久免费观看一级毛片 | 欧美黑人狂野猛交老妇 | 亚洲成人99| 国产精选一区 | 成人一级片在线观看 | 国产精品高清在线 | 黄色大片免费网站 | 日韩精品视频在线播放 | 男人天堂99 | 亚洲国产成人一区二区 | 嫩草网| 一色桃子av一区二区 | 国产免费黄网 | 综合色久 | 国产一区二区三区视频 | 在线一区视频 | av中文字幕在线观看 | 成人av播放 | www.亚洲精品| 国产精品亚洲精品久久 | 中文字幕1区2区 | 福利影院在线看 | 国产做a爱免费视频 | 国产精品美女久久久久久免费 | 日韩中文不卡 | 国产欧美日韩一区二区三区在线观看 | 国产精品一区二区三区在线 |