|
一個單片機(jī)帶4個18b20工作,數(shù)據(jù)通過串口輸出
注意:需要先把DS18B20接到 U16 這個接口,板子并沒有板載DS18B20
實驗現(xiàn)象:1、串口打印出序列號和溫度
2、在打印的同時,D3閃爍
GPIO寄存器描述
1、端口配置低寄存器(GPIOx_CRL)(x = A...E)
2、端口配置高寄存器(GPIOx_CRH)(x = A...E)
3、端口輸入數(shù)據(jù)寄存器(GPIOx_IDR)(x = A...E)
這些位為只讀并只能以字(16位)的形式讀出。讀出的值為對應(yīng)I/O口的狀態(tài)。
4、端口輸出數(shù)據(jù)寄存器(GPIOx_ODR)(x = A...E)
只能以字(16bit)的形式操作,復(fù)位值全是0。寫0即輸出0,寫1即輸出1。
5、端口位設(shè)置/清除寄存器(GPIOx_BSRR)(x = A...E)
高16bit寫1用于清0,低16bit寫1用于置位,同時寫1的話低16bi有效。
6、端口位清除寄存器(GPIOx_BRR)(x = A...E)
低16位寫1用于置位。
7、端口配置鎖定寄存器(GPIOx_LCKR)(x = A...E)
單片機(jī)源程序如下:
- /**
- ******************************************************************************
- * @file main.c
- * @author fire
- * @version V1.0
- * @brief systick系統(tǒng)定時器
- ******************************************************************************
- *
- ******************************************************************************
- */
-
- #include "stm32f10x.h"
- #include "bsp_SysTick.h"
- #include "bsp_led.h"
- #include "bsp_usart1.h"
- #include "bsp_ds18b20.h"
- /**
- * @brief 主函數(shù)
- * @param 無
- * @retval 無
- */
- int main(void)
- {
- uint8_t uc1, ucDs18b20Id1 [ 8 ];
- uint8_t uc2, ucDs18b20Id2 [ 8 ];
- uint8_t uc3, ucDs18b20Id3 [ 8 ];
- uint8_t uc4, ucDs18b20Id4 [ 8 ];
- /* 配置SysTick 為1us中斷一次 */
- SysTick_Init();
- USARTx_Config(); //初始化串口1
-
-
-
-
- printf("\r\n this is a ds18b20 test demo \r\n");
- while( 1 )
- {
- while( DS18B20_Init() )
-
-
-
- printf("\r\n no ds18b20 exit \r\n");
- printf("\r\n ds18b20 exit \r\n");
-
- DS18B20_ReadId ( ucDs18b20Id1 ); // 讀取 DS18B20 的序列號
- //printf("\r\nDS18B20的序列號是: 0x");
- //for ( uc1 = 0; uc1 < 8; uc1 ++ ) // 打印 DS18B20 的序列號 1
- //printf ( "%.2x", ucDs18b20Id1 [ uc1 ] );
- printf ( "\r\n獲取傳感器一的溫度: %.1f\r\n", DS18B20_GetTemp_SkipRom ( ) ); // 打印通過 DS18B20 序列號獲取的溫度值
- Delay_ms(1000); /* 1s 讀取一次溫度值 */
-
- while( DS18B20_Init2() )
- DS18B20_ReadId2 ( ucDs18b20Id2 ); // 讀取 DS18B20 的序列號
- //printf("\r\nDS18B20的序列號是: 0x");
- //for ( uc2 = 0; uc2 < 8; uc2 ++ ) // 打印 DS18B20 的序列號 2
- //printf ( "%.2x", ucDs18b20Id2 [ uc2 ] );
- printf ( "\r\n獲取傳感器二的的溫度: %.1f\r\n", DS18B20_GetTemp_SkipRom2 ( ) ); // 打印通過 DS18B20 序列號獲取的溫度值
- Delay_ms(1000); /* 1s 讀取一次溫度值 */
-
-
-
- while( DS18B20_Init3() )
- DS18B20_ReadId3 ( ucDs18b20Id3 ); // 讀取 DS18B20 的序列號
- //rintf("\r\nDS18B20的序列號是: 0x");
- //for ( uc3 = 0; uc3 < 8; uc3 ++ ) // 打印 DS18B20 的序列號 3
- //printf ( "%.2x", ucDs18b20Id3 [ uc3 ] );
- printf ( "\r\n獲取傳感器三的溫度: %.1f\r\n", DS18B20_GetTemp_SkipRom3 ( ) ); // 打印通過 DS18B20 序列號獲取的溫度值
- Delay_ms(1000); /* 1s 讀取一次溫度值 */
-
-
- while( DS18B20_Init4() )
- DS18B20_ReadId4 ( ucDs18b20Id4 ); // 讀取 DS18B20 的序列號
- //printf("\r\nDS18B20的序列號是: 0x");
- //for ( uc4 = 0; uc4 < 8; uc4 ++ ) // 打印 DS18B20 的序列號 4
- //printf ( "%.2x", ucDs18b20Id4 [ uc4 ] );
- printf ( "\r\n獲取傳感器四的溫度: %.1f\r\n", DS18B20_GetTemp_SkipRom4 ( ) ); // 打印通過 DS18B20 序列號獲取的溫度值
- Delay_ms(1000); /* 1s 讀取一次溫度值 */
-
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
GPIO輸入輸出—DS18B20_多_好.rar
(332.78 KB, 下載次數(shù): 88)
2017-11-10 21:24 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|