采用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 上傳
【必讀】版權免責聲明
1、本主題所有言論和內容純屬會員個人意見,與本論壇立場無關。2、本站對所發內容真實性、客觀性、可用性不做任何保證也不負任何責任,網友之間僅出于學習目的進行交流。3、對提供的數字內容不擁有任何權利,其版權歸原著者擁有。請勿將該數字內容進行商業交易、轉載等行為,該內容只為學習所提供,使用后發生的一切問題與本站無關。 4、本網站不保證本站提供的下載資源的準確性、安全性和完整性;同時本網站也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的損失或傷害。 5、本網站所有軟件和資料均為網友推薦收集整理而來,僅供學習用途使用,請務必下載后兩小時內刪除,禁止商用。6、如有侵犯你版權的,請及時聯系我們(電子郵箱1370723259@qq.com)指出,本站將立即改正。
|
|