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

標題: 關于多個ds18b20測溫數碼管顯示的問題 [打印本頁]

作者: apin123    時間: 2015-12-12 10:00
標題: 關于多個ds18b20測溫數碼管顯示的問題
為什么使用單個ds18b20測溫用數碼管顯示很正常。
當多個ds18b20測溫時,數碼管顯示其中一個ds18b20的溫度時數碼管一個很亮,其他數碼管很暗還會一直閃??

源碼:
#include"delay.h"
void delay(uint z)      //毫秒級延時函數
{
     uint x,y;
  for(x=z;x>0;x--)
   for(y=240;y>0;y--);
}
void delay_18B20(uint t)  //ds18b20延時函數
{
     while(t--);
}

數碼管程序:
#include<stc12c5a60s2.h>
#include"smg.h"
#include"delay.h"
#define DataPort P1     //定義數據端口 程序中遇到DataPort 則用P0 替換
sbit LATCH2=P2^3;    //位選
sbit LATCH1=P2^2;    //段選
uchar code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code smg_we[]={0xbf,0x7f};
void display(uchar i,uchar dat)
{
       DataPort=0;   //清空數據,防止有交替重影
       LATCH1=1;     //段鎖存
       LATCH1=0;   
    DataPort=smg_we[i]; //取位碼
       LATCH2=1;     //位鎖存
       LATCH2=0;
    DataPort=smg_du[dat]; //取顯示數據,段碼
       LATCH1=1;     //段鎖存
       LATCH1=0;
         
//    delay_18B20(200); // 掃描間隙延時,時間太長會閃爍,太短會造成重影
//    DataPort=0;   //清空數據,防止有交替重影                  
}

ds18b20程序:
#include<stc12c5a60s2.h>
#include"ds18b20.h"
#include"smg.h"
#include"delay.h"      //注:stc12c5a60s2單片機執行一條語句的時間是普通51單片機的1/12,在寫時序時一定要注意到
sbit DQ=P2^0;
uchar code str1[]={0x28,0xC2,0x99,0x41,0x07,0x00,0x00,0xBE}; //ROM 1
uchar code str2[]={0x28,0xAE,0x79,0xFA,0x05,0x00,0x00,0x90}; //ROM 2
uchar data disdata[2];
uint tvalue;         //溫度值

void init_ds18b20()//ds1820復位   
{
DQ=1;          //DQ復位
delay_18B20(40); //延時
DQ=0;          //DQ拉低
delay_18B20(1000); //精確延時大于480us
DQ=1;          //拉高
delay_18B20(400);
}
void write_byte(uchar dat)      //寫一個字節
{
    uchar i=0;
    for(i=8;i>0;i--)
    {
   DQ=0;
      DQ=dat&0x01;
      delay_18B20(100);
      DQ=1;
      dat>>=1;
    }
}
uchar read_byte()       //讀一個字節
{
    uchar i=0;
uchar dat=0;
for(i=8;i>0;i--)
{  
     DQ=0; //給脈沖信號
     dat>>=1;
     DQ=1; //給脈沖信號
     if(DQ)
     dat|=0x80;
     delay_18B20(100);
}
   return(dat);
}
void ds18b20_Matchrom(uchar a)  //匹配ROM
{
char j;
write_byte(0x55);    //發送匹配ROM命令
if(a==1)
{
for(j=0;j<8;j++)
  write_byte(str1[j]);  //發送18B20的序列號,先發送低字節
}
if(a==2)
{
for(j=0;j<8;j++)
  write_byte(str2[j]);  //發送18B20的序列號,先發送低字節
}
}
uchar read_temp(uchar z)   //讀取溫度值并轉換
{
    uchar a,b;
init_ds18b20();   
write_byte(0xcc);   //跳過讀序列號
init_ds18b20();
if(z==1)
{
  ds18b20_Matchrom(1);   //匹配ROM 1
}
if(z==2)
{
  ds18b20_Matchrom(2);   //匹配ROM  2
}
write_byte(0x44);//*啟動溫度轉換*/
delay(5);
init_ds18b20();   
write_byte(0xcc);    //跳過讀序列號
init_ds18b20();
if(z==1)
{
  ds18b20_Matchrom(1);       //匹配ROM 1
}
if(z==2)
{
  ds18b20_Matchrom(2);    //匹配ROM  2
}
write_byte(0xbe);//*讀取溫度*/
a=read_byte();
b=read_byte();
tvalue=b<<4;
tvalue|=(a&0xf0)>>4;
return(tvalue);
}

void ds1820display()//溫度值顯示
{   
   
   if(z==1)
  {
      read_temp();
      disdata[0]=tvalue%100/10;//十位數
      display(0,disdata[0]);
   delay_18B20(2000);
   disdata[1]=tvalue%10;//個位數
   display(1,disdata[1]);
//   delay(5);
   
      
  }
  
}

主程序;
#include"ds18b20.h"

void main()
{
    init_ds18b20();
    while(1)
{
    ds1820display();    //溫度值顯示
}
}


作者: 木木de    時間: 2015-12-12 11:34
多個DS18B20的時候電流較比單個DS18B20需求的電流大,對于這種情況建議   你的數碼管單獨使用供電電源   不要直接用單片機上的電源供電
作者: 1114013515    時間: 2015-12-12 12:37
我也不懂,只是想回答拿個積分下載
作者: 李志博32    時間: 2015-12-20 07:43
使用多個傳感器要用到單總線,你可以看看。
作者: 917106794    時間: 2016-1-20 15:05
這個應該和硬件有關,和軟件沒關系
作者: 13996140473    時間: 2016-1-21 10:20
多個DS18B20的時候電流較比單個DS18B20需求的電流大
作者: 王琪1    時間: 2016-1-21 13:24
看不到C只會用匯編
作者: 月阿拉山口飛機    時間: 2016-4-20 19:25
寫的很好
作者: 帽子屋    時間: 2016-4-20 20:36
這是基于無線的嗎?
作者: lvwenqiang1988    時間: 2016-4-26 16:26
檢查一下你的硬件電路,看電壓是否有跳動
作者: lvwenqiang1988    時間: 2016-4-26 16:28
如果電壓很穩定,則可以看看是否存在虛焊的地方;數碼管與單片機之間可以去掉限流電阻
作者: shenjinliang    時間: 2016-4-26 22:56
首先你需要看看電壓是否穩定,數碼管不亮可能是焊接的問題,或驅動的地方的焊接。既然一個能很亮,很可能在焊接的地方。
作者: luoluoluo136    時間: 2016-4-27 09:41
和軟件也是有關系的。。。你的延時太久了,導致數碼管刷新很慢,所以會出現這個問題
作者: jiajuntao    時間: 2016-4-27 09:57
18b20直接讀出的數據在數碼管上來不斷刷,造成數碼管無法顯示。
作者: 月阿拉山口飛機    時間: 2016-5-19 20:39
有什么問題嗎?
作者: 月阿拉山口飛機    時間: 2016-5-19 20:39
怎么只有8幣
作者: feifeilaobinge    時間: 2016-5-19 23:03
如果寫ROM的時候選擇了跳過序列碼模式,可能導致只有一個溫度傳感器響應
作者: lx843040583    時間: 2017-5-5 19:36
和軟件也是有關系的吧。延時太久會導致數碼管刷新很慢的
作者: 依然是你    時間: 2017-5-6 13:26
程序的問題 數碼管刷新在2MS左右正常  把顯示程序放在2MS的定時中斷里面就OK了




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美成人a∨高清免费观看 色999日韩 | 国产高清精品一区二区三区 | 亚洲黄色一区二区三区 | 成人免费在线播放 | 日本精品久久久久久久 | 亚洲国产精品一区二区www | 亚洲三级视频 | 91精品国产91久久久久久 | 欧美啊v在线观看 | 亚洲电影中文字幕 | 欧美精品网 | 男女又爽又黄视频 | 一区二区三区四区av | 日韩欧美高清dvd碟片 | 99reav| 美女久久| 久久精品免费一区二区 | 精品国产一区二区三区性色av | 欧美成人免费在线视频 | 欧美精品一区二区三区在线 | 97天天干 | 丝袜 亚洲 另类 欧美 综合 | 欧美综合国产精品久久丁香 | 久久成 | 国产免费又黄又爽又刺激蜜月al | 欧美一区二区三区精品免费 | 亚洲免费网址 | 久久99精品久久久久 | 91视频久久| 麻豆久久久 | 精品久久久久久 | 久久精品视频网站 | 日韩精品人成在线播放 | 久久精品亚洲精品 | 美女视频h | 成人av网站在线观看 | 日本免费一区二区三区 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 成人国产精品久久 | 97国产爽爽爽久久久 | 西西裸体做爰视频 |