久久久久久久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)
下載附件
2015-4-12 16:08 上傳
作者:
忘語憶
時間:
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爱免费视频
|
国产精品美女久久久久久免费
|
日韩中文不卡
|
国产欧美日韩一区二区三区在线观看
|
国产精品一区二区三区在线
|