国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標題:
8路DS18B20溫度采集串口發送數據帶仿真程序
[打印本頁]
作者:
coolice
時間:
2020-1-31 23:55
標題:
8路DS18B20溫度采集串口發送數據帶仿真程序
采用51單片機8路溫度采集
完整代碼和仿真文件:
8路溫度采集,串口發送溫度數據.zip
(169.7 KB, 售價: 1 E幣)
2020-1-31 23:53 上傳
點擊文件名下載附件
售價: 1 E幣
[記錄]
[
購買
]
部分代碼
/序列號匹配
void MatchROM(const unsigned char *pMatchData)
{
unsigned char i;
Initialization();
WriteByte(0x55);
for (i = 0; i < 8; i++) WriteByte(*(pMatchData + i));
}
//得到64位ROM序列(在P1口顯示,必須與Proteus聯調且在單步調試下才能得到)
/*void GetROMSequence()
{
unsigned char i;
Initialization();
WriteByte(READ_ROM);
for (i = 0; i < 8; i++)
P1 = ReadByte();
}*/
//讀取溫度值
bit ReadTemperature(TEMPDATA * pTempData)
{
unsigned int iTempDataH;
unsigned char btDot, iTempDataL;
static unsigned char i = 0;
pTempData->btNegative = 0; //為0溫度為正
i++;
if (i == 9) i = 1;
Initialization();
WriteByte(0xCC); //跳過ROM匹配
WriteByte(0x44); //啟動轉換
Delay1ms(65);
//Initialization();
//多個芯片的時候用MatchROM(ROMData)換掉WriteByte(SKIP_ROM)
switch (i)
{
case 1 : MatchROM(ROMData1); break; //匹配1
case 2 : MatchROM(ROMData2); break; //匹配2
case 3 : MatchROM(ROMData3); break; //匹配3
case 4 : MatchROM(ROMData4); break; //匹配4
case 5 : MatchROM(ROMData5); break; //匹配5
case 6 : MatchROM(ROMData6); break; //匹配6
case 7 : MatchROM(ROMData7); break; //匹配7
case 8 : MatchROM(ROMData8); break; //匹配8
}
//WriteByte(SKIP_ROM); //跳過ROM匹配(單個芯片時用這句換掉上面的switch)
WriteByte(0xBE); //讀數據
iTempDataL = ReadByte();
iTempDataH = ReadByte();
iTempDataH <<= 8;
iTempDataH |= iTempDataL;
if (iTempDataH & 0x8000)
{
pTempData->btNegative = 1;
iTempDataH = ~iTempDataH + 1; //負數求補
}
//為了省去浮點運算帶來的開銷,而采用整數和小數部分分開處理的方法(沒有四舍五入)
btDot = (unsigned char)(iTempDataH & 0x000F); //得到小數部分
iTempDataH >>= 4; //得到整數部分
btDot *= 5; //btDot*10/16得到轉換后的小數數據
btDot >>= 3;
//數據處理
pTempData->btThird = (unsigned char)iTempDataH / 100;
pTempData->btSecond = (unsigned char)iTempDataH % 100 / 10;
pTempData->btFirst = (unsigned char)iTempDataH % 10;
pTempData->btDecimal = btDot;
return 1;
}
//數據顯示處理子程序
void DataProcess()
{
ReadTemperature(&m_TempData);
if (m_TempData.btNegative) DisplayOne(1, 6, '-', 0);
else DisplayOne(1, 6, m_TempData.btThird, 1);
DisplayOne(1, 7, m_TempData.btSecond, 1);
DisplayOne(1, 8, m_TempData.btFirst, 1);
DisplayOne(1, 10, m_TempData.btDecimal, 1);
}
//溫度數據串口發送程序
void tempdatalist()
{ u8 i;
for(i=0;i<8;i++)
{
ReadTemperature(&m_TempData);
if (m_TempData.btNegative)
{ DisplayOne(1, 6, '-', 0);
zhenfu[i]='-';
temp[i]=( m_TempData.btThird*1000+m_TempData.btSecond*100+m_TempData.btFirst*10+m_TempData.btDecimal);
}
else {
DisplayOne(1, 6, m_TempData.btThird, 1);
zhenfu[i]='+';
DisplayOne(1, 7, m_TempData.btSecond, 1);
DisplayOne(1, 8, m_TempData.btFirst, 1);
DisplayOne(1, 10, m_TempData.btDecimal, 1);
temp[i]=( m_TempData.btThird*1000+m_TempData.btSecond*100+m_TempData.btFirst*10+m_TempData.btDecimal);
Delay1ms(1000);
}
}
for(i=0;i<8;i++)
{
UART_SendOneByte(zhenfu[i]);
UART_SendNum(temp[i]);
UART_SendString(":");
}
UART_SendString("\r\n");
}
復制代碼
1.jpg
(217.01 KB)
下載附件
2020-1-31 23:53 上傳
2.jpg
(43.41 KB)
下載附件
2020-1-31 23:53 上傳
歡迎光臨 ELEOK (http://www.afoofa.cn/)
Powered by Discuz! X5.0