onewire(單總線)是DALLAS公司推出的外圍串行擴展總線,傳輸時鐘信號又傳輸數據,而且能夠進行雙向通信,具有節省I/O口線、資源結構簡單、成本低廉、便于總線擴展和維護等諸多優點。常用到單總線的器件,一般是穩定傳感器,如DS18B20、DS2431。
以下是一個簡單的onewire(單總線)溫度測試程序,希望大家能夠喜歡。
- // LCD module connections
- sbit LCD_RS at P2_0_bit;
- sbit LCD_EN at P2_1_bit;
- sbit LCD_D4 at P2_2_bit;
- sbit LCD_D5 at P2_3_bit;
- sbit LCD_D6 at P2_4_bit;
- sbit LCD_D7 at P2_5_bit;
- // End LCD module connections
- // OneWire pinout
- sbit OW_Bit at P1_2_bit;
- // end OneWire definition
- // Set TEMP_RESOLUTION to the corresponding resolution of used DS18x20 sensor:
- // 18S20: 9 (default setting; can be 9,10,11,or 12)
- // 18B20: 12
- const unsigned short TEMP_RESOLUTION = 9;
- char *text = "000.0000";
- unsigned temp;
- void Display_Temperature(unsigned int temp2write) {
- const unsigned short RES_SHIFT = TEMP_RESOLUTION - 8;
- char temp_whole;
- unsigned int temp_fraction;
- // check if temperature is negative
- if (temp2write & 0x8000) {
- text[0] = '-';
- temp2write = ~temp2write + 1;
- }
- // extract temp_whole
- temp_whole = temp2write >> RES_SHIFT;
- // convert temp_whole to characters
- if (temp_whole/100)
- text[0] = temp_whole/100 + 48;
- else
- text[0] = '0';
- text[1] = (temp_whole/10)%10 + 48; // Extract tens digit
- text[2] = temp_whole%10 + 48; // Extract ones digit
- // extract temp_fraction and convert it to unsigned int
- temp_fraction = temp2write << (4-RES_SHIFT);
- temp_fraction &= 0x000F;
- temp_fraction *= 625;
- // convert temp_fraction to characters
- text[4] = temp_fraction/1000 + 48; // Extract thousands digit
- text[5] = (temp_fraction/100)%10 + 48; // Extract hundreds digit
- text[6] = (temp_fraction/10)%10 + 48; // Extract tens digit
- text[7] = temp_fraction%10 + 48; // Extract ones digit
- // print temperature on LCD
- Lcd_Out(2, 5, text);
- }
- void main() {
- Lcd_Init(); // Initialize LCD
- Lcd_Cmd(_LCD_CLEAR); // Clear LCD
- Lcd_Cmd(_LCD_CURSOR_OFF); // Turn cursor off
- Lcd_Out(1, 1, " Temperature: ");
- // Print degree character, 'C' for Centigrades
- Lcd_Chr(2,13,223); // different LCD displays have different char code for degree
- // if you see greek alpha letter try typing 178 instead of 223
- Lcd_Chr(2,14,'C');
- //--- main loop
- do {
- //--- perform temperature reading
- Ow_Reset(); // Onewire reset signal
- Ow_Write(0xCC); // Issue command SKIP_ROM
- Ow_Write(0x44); // Issue command CONVERT_T
- Delay_us(120);
- Ow_Reset();
- Ow_Write(0xCC); // Issue command SKIP_ROM
- Ow_Write(0xBE); // Issue command READ_SCRATCHPAD
- temp = Ow_Read();
- temp = (Ow_Read() << 8) + temp;
- //--- Format and display result on Lcd
- Display_Temperature(temp);
- Delay_ms(500);
- } while (1);
- }
復制代碼 相關信息:http://www.zg4o1577.cn/bbs/dpj-136722-1.html
OneWire.jpg (70.54 KB, 下載次數: 54)
下載附件
2018-10-30 17:11 上傳
|