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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6661|回復: 19
打印 上一主題 下一主題
收起左側

關于多個ds18b20測溫數碼管顯示的問題

  [復制鏈接]
回帖獎勵 100 黑幣 回復本帖可獲得 20 黑幣獎勵! 每人限 1 次(中獎概率 50%)
跳轉到指定樓層
樓主
ID:86791 發(fā)表于 2015-12-12 10:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
為什么使用單個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單片機執(zhí)行一條語句的時間是普通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)      //寫一個字節(jié)
{
    uchar i=0;
    for(i=8;i>0;i--)
    {
   DQ=0;
      DQ=dat&0x01;
      delay_18B20(100);
      DQ=1;
      dat>>=1;
    }
}
uchar read_byte()       //讀一個字節(jié)
{
    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);    //發(fā)送匹配ROM命令
if(a==1)
{
for(j=0;j<8;j++)
  write_byte(str1[j]);  //發(fā)送18B20的序列號,先發(fā)送低字節(jié)
}
if(a==2)
{
for(j=0;j<8;j++)
  write_byte(str2[j]);  //發(fā)送18B20的序列號,先發(fā)送低字節(jié)
}
}
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();    //溫度值顯示
}
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:76227 發(fā)表于 2015-12-12 11:34 | 只看該作者
多個DS18B20的時候電流較比單個DS18B20需求的電流大,對于這種情況建議   你的數碼管單獨使用供電電源   不要直接用單片機上的電源供電
回復

使用道具 舉報

板凳
ID:99411 發(fā)表于 2015-12-12 12:37 | 只看該作者

回帖獎勵 +20 黑幣

我也不懂,只是想回答拿個積分下載
回復

使用道具 舉報

地板
ID:67175 發(fā)表于 2015-12-20 07:43 | 只看該作者
使用多個傳感器要用到單總線,你可以看看。
回復

使用道具 舉報

5#
ID:94642 發(fā)表于 2016-1-20 15:05 | 只看該作者

回帖獎勵 +20 黑幣

這個應該和硬件有關,和軟件沒關系
回復

使用道具 舉報

6#
ID:103977 發(fā)表于 2016-1-21 10:20 | 只看該作者
多個DS18B20的時候電流較比單個DS18B20需求的電流大
回復

使用道具 舉報

7#
ID:103999 發(fā)表于 2016-1-21 13:24 | 只看該作者
看不到C只會用匯編
回復

使用道具 舉報

8#
ID:115486 發(fā)表于 2016-4-20 19:25 | 只看該作者

回帖獎勵 +20 黑幣

寫的很好
回復

使用道具 舉報

9#
ID:115545 發(fā)表于 2016-4-20 20:36 | 只看該作者
這是基于無線的嗎?
回復

使用道具 舉報

10#
ID:75321 發(fā)表于 2016-4-26 16:26 | 只看該作者

回帖獎勵 +20 黑幣

檢查一下你的硬件電路,看電壓是否有跳動
回復

使用道具 舉報

11#
ID:75321 發(fā)表于 2016-4-26 16:28 | 只看該作者
如果電壓很穩(wěn)定,則可以看看是否存在虛焊的地方;數碼管與單片機之間可以去掉限流電阻

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

12#
ID:99938 發(fā)表于 2016-4-26 22:56 | 只看該作者
首先你需要看看電壓是否穩(wěn)定,數碼管不亮可能是焊接的問題,或驅動的地方的焊接。既然一個能很亮,很可能在焊接的地方。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

13#
ID:97438 發(fā)表于 2016-4-27 09:41 | 只看該作者
和軟件也是有關系的。。。你的延時太久了,導致數碼管刷新很慢,所以會出現這個問題

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

14#
ID:104472 發(fā)表于 2016-4-27 09:57 | 只看該作者
18b20直接讀出的數據在數碼管上來不斷刷,造成數碼管無法顯示。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

15#
ID:115486 發(fā)表于 2016-5-19 20:39 | 只看該作者
有什么問題嗎?
回復

使用道具 舉報

16#
ID:115486 發(fā)表于 2016-5-19 20:39 | 只看該作者
怎么只有8幣
回復

使用道具 舉報

17#
ID:122080 發(fā)表于 2016-5-19 23:03 | 只看該作者

回帖獎勵 +20 黑幣

如果寫ROM的時候選擇了跳過序列碼模式,可能導致只有一個溫度傳感器響應
回復

使用道具 舉報

18#
ID:197037 發(fā)表于 2017-5-5 19:36 | 只看該作者
和軟件也是有關系的吧。延時太久會導致數碼管刷新很慢的
回復

使用道具 舉報

19#
ID:170270 發(fā)表于 2017-5-6 13:26 | 只看該作者
程序的問題 數碼管刷新在2MS左右正常  把顯示程序放在2MS的定時中斷里面就OK了
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜成人免费视频 | 亚洲中午字幕 | 欧美成人综合 | 国产欧美精品一区二区色综合 | 成人网在线观看 | 国产激情在线观看 | 午夜视频一区 | 中文在线播放 | 国产精品久久久久久久久久了 | 日韩中文字幕 | 网站黄色在线免费观看 | 久久综合一区二区三区 | 精品国产乱码久久久久久丨区2区 | 成人一区在线观看 | 国产一区久久 | 久久91av| 粉嫩一区二区三区四区公司1 | 中文字幕日韩欧美 | 在线成人一区 | 日韩α片| 日本中出视频 | 国产日韩欧美另类 | 成人在线免费视频 | 免费一区二区三区 | 亚洲日韩中文字幕一区 | 中国人pornoxxx麻豆 | 日韩视频在线免费观看 | 国产亚洲一区二区精品 | 日日爱av | 亚洲午夜精品视频 | 一本色道精品久久一区二区三区 | 午夜影晥| 国产中文| 日本精品视频 | 日韩在线免费 | 99热欧美 | 欧美精品在线看 | 亚洲精品小视频在线观看 | 人人操日日干 | 久久国产精品亚洲 | 91成人免费电影 |