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

標題: 我有一個4路18b20的程序,但是始終只有P口第一個口例如P2.0有溫度顯示,求大神幫忙 [打印本頁]

作者: erwin095    時間: 2019-3-25 09:38
標題: 我有一個4路18b20的程序,但是始終只有P口第一個口例如P2.0有溫度顯示,求大神幫忙
/********************************************************
* 文件名  :main.c
* 描述    :stc15系列采集ds18b20溫度數據,并從串口輸出,采用的是11.0592M晶振,用P2口      
* 實驗平臺:IAP15w4k58S4
* 庫版本  :
* 連接方式: 見連接圖
* 注意    : 芯片上電后所有與PWM相關的IO口均為高阻態
             需將這些口設置為準雙向口或強推挽模式方可正常使用
             相關IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
             P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
             另外還有P1.0/P1.4兩個口在上電時為強推挽輸出,程序
             初始化時也需將這兩個口設置為弱上拉準雙向口模式
* 作者    :12345678
**********************************************************************************/

#include "config.h"
#include "delay.h"
#include "uart.h"
#include "18B20.h"
/************* 功能說明 **************
******************************************/
/************* 本地常量聲明 **************/

/************* 本地變量聲明 **************/
u16 a=0;//測試用
/************* 本地函數聲明 **************/

/*************  外部函數和變量聲明 *****************/

/******************** IO配置函數 **************************/
void GPIO_config(void)
{
P5M0 = 0;   //設置準雙向口
P5M1 = 0;
P2M0 = 0;  //P2口全部設置為準雙向
P2M1 = 0;
}
/******************** 主函數 **************************/
void main(void)
{
u8 i = 0;
GPIO_config();
UartInit();

while(1)
{
  SendString("4路18B20溫度 串口1測試!\r\n");
   for(i=0;i<4;i++)
  {
//  if(Ds18b20Init(i)){
     
                 a=Ds18b20ReadTemp(i);
  SendString("第 ");
  SendData(i+'1');
  SendString(" 路溫度 : ");
  if(a/10000 == 1)
  {                             //如果萬位為1,則表示溫度為負
                  SendData('-');    //輸出負號
  }                                
                 SendData(a%10000/1000+'0');               //十位
                 SendData(a%1000/100+'0');                 //個位
                 SendData('.');           //小數點
                 SendData(a%100/10+'0');                   //小數點后第一位
                 SendData(a%10+'0');                       //小數點后第二位
                 SendString("℃\r\n");
//  }else{         //想要不顯示直接去除else這部分
//  SendString("第 ");
//  SendData(i+'1');
//  SendString("路溫度  初始化失敗請檢測\r\n");
//    }
    }
  P55 = 0;
  delay_ms(250);
  delay_ms(250);
  delay_ms(250);
  delay_ms(250);
//  P55 = 1;
//  delay_ms(100);
//  P55 = 0;
//  delay_ms(100);
  P55 = 1;
  delay_ms(250);
  delay_ms(250);
  delay_ms(250);
  delay_ms(250);
  }
}
/**************************18B20*******************************/
#include "18B20.h"
#include<intrins.h>
#include "delay.h"
#define DS P2
#define set1(x) (0x01<<(x))
bit Ds18b20Init(u8 m)
{
    bit flag=1;
DS = 0;      
Delay600us();        
DS|=set1(m);      
Delay100us();        
flag=DS;
Delay600us();      
DS|=set1(m);
return (~flag);
}
void Ds18b20WriteByte(u8 dat,m)
{
u8 j;
    bit testb ;
for(j=0; j<8; j++)
{
  testb = dat&0x01;//取最低位   
  dat=dat>>1;   
  if(testb)     //置高 1   
  {   
   DS =0;        
   Delay1us();
   Delay1us();
   DS|=set1(m);
   Delay100us();   //>60us
  }
  else
  {
  DS =0;
  Delay100us(); //大于 60us 小于 120us
  DS|=set1(m);
  Delay1us();
  Delay1us();
  }
   }
}
u8 Ds18b20ReadByte(u8 m)
{
u8 byte, bi;
    u8 j;
for(j=8; j>0; j--)
{
  DS =0X00;
  Delay1us();
  DS|=set1(m);
  Delay6us();
  bi = DS;  
  byte = (byte >> 1) | (bi << 7);        
  Delay48us();   
}   
return byte;
}
void  Ds18b20ChangTemp(u8 m)
{
Ds18b20Init(m);
Delay1ms();
Ds18b20WriteByte(0xcc,m);     
Ds18b20WriteByte(0x44,m);     
Delay1ms();                     
   
}
void  Ds18b20ReadTempCom(u8 m)
{
Ds18b20Init(m);
Delay1ms();
Ds18b20WriteByte(0xcc,m);  
Ds18b20WriteByte(0xbe,m);  
}
int Ds18b20ReadTemp(u8 m)
{
int temp = 0;
u8 tmh, tml;
Ds18b20ChangTemp(m);   
Ds18b20ReadTempCom(m);   
tml = Ds18b20ReadByte(m);
tmh = Ds18b20ReadByte(m);  
if(tmh>0x7f)
    {
        tml=~tml;                    //補碼轉換,取反加一
        tmh=~tmh+1;  
        temp=100;
    }
    temp=temp+tmh*16+tml/16;
    temp=temp*100;
    temp=temp+((tml&0x0f)*10/16)*10;
    temp=temp+(tml&0x0f)*100/16%10;
    return (u16)(temp);
}




作者: 7358655    時間: 2019-3-26 22:16
串4個要注意尋址,指器件地址,讀也要器件地址?纯磯永锏。
單片機多路DS18B20測溫報警proteus仿真及程序  

435
主題       
458
帖子       
1萬
黑幣
管理員
Rank: 9Rank: 9Rank: 9
收聽TA 發消息       
電梯直達
跳轉到指定樓層 樓主
51黑ff 發表于 2016-9-25 13:53 | 只看該作者 |只看大圖 回帖獎勵
單片機多路DS18B20測溫報警proteus仿真及程序
http://www.zg4o1577.cn/bbs/dpj-56017-1.html
(出處: 單片機論壇)


作者: erwin095    時間: 2019-3-29 12:41
7358655 發表于 2019-3-26 22:16
串4個要注意尋址,指器件地址,讀也要器件地址?纯磯永锏摹
單片機多路DS18B20測溫報警proteus仿真及 ...

實在太感謝了




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 综合第一页 | 国产日韩精品一区 | 日韩中文久久 | 免费在线观看成人 | 国产精品爱久久久久久久 | 日韩av电影在线观看 | 欧美精三区欧美精三区 | 精品国产一区二区三区观看不卡 | 国产精品免费福利 | 亚洲a视频 | 午夜国产 | 欧美a v在线| 一区二区av在线 | 91av在线免费播放 | 特级特黄特色的免费大片 | 国产成人综合在线 | 欧美 日韩 国产 成人 在线 | 99亚洲| 欧美99| 久久久.com| 犬夜叉在线观看 | 夜夜骑首页 | 午夜视频大全 | 亚洲第一天堂 | 超碰日韩 | 日韩欧美在线不卡 | 国产在线视频一区 | 二区国产 | 青青久在线视频 | 国产欧美二区 | 超碰日本 | 中文字幕在线视频观看 | 噜噜噜色网 | 欧美精品久久久久久久久久 | 日韩精品亚洲专区在线观看 | 一区二区视频 | 一级黄色录像片子 | 欧美日韩高清一区 | 免费a大片| 黑人巨大精品欧美一区二区免费 | 精品视频在线免费观看 |