以前一直用STC89單片機讀取DS18B20,這次換了1T單片機,以為只是改下延時就行了,誰知一直都讀不出來,搜了個1T讀取DS18B20的代碼,帶進去一測試OK!代碼放出來:
51hei圖片_20191220180008.jpg (230.47 KB, 下載次數: 53)
下載附件
2019-12-20 18:17 上傳
2019-12-20_181647.png (13.97 KB, 下載次數: 50)
下載附件
2019-12-20 18:17 上傳
單片機源程序如下:
- /***************************************************************************
- 標題: STC12 溫感實驗
- 效果: 讀取溫度值數碼管顯示帶小數顯示
- 工作于:LY5A-L2A開發板
- 作者: 林洋電子-單片機
- 說明: 板使用12M晶振
- ******************************************************************************/
- //頭文件:
- #include <reg51.h>
- #include "ds18b20.h" //引入DS18B20頭文件
- //變量定義:
- unsigned char ly_dis[4];//定義顯示緩沖區
- code unsigned char table[] =
- {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
- //表:共陽數碼管 0-9
- unsigned char l_posit = 0; //顯示位置
- //引腳定義:
- sbit SMG_q = P1 ^ 0; //定義數碼管陽級控制腳(千位)
- sbit SMG_b = P1 ^ 1; //定義數碼管陽級控制腳(百位)
- sbit SMG_s = P1 ^ 2; //定義數碼管陽級控制腳(十位)
- sbit SMG_g = P1 ^ 3; //定義數碼管陽級控制腳(個位)
- //函數聲明:
- void display(void);//顯示函數,顯示緩沖區內容
- void Delay(unsigned t); //延時函數
- //主函數,C語言的入口函數:
- void main()
- {
- unsigned int i = 0;
- float tt;
- int ltemp;
- while(1)
- {
- if(i == 10)
- {
- tt = ReadTemp() * 0.0625; //得到真實十進制溫度值,因為DS18B20
- //可以精確到0.0625度,所以讀回數據的最低位代表的是0.0625度。
-
- ltemp = tt * 10 + 0.5; //放大十倍,這樣做的目的將小數點后第一位也轉換為可顯示數字,同時進行一個四舍五入操作。
- if(ltemp < 0) //判斷第一位顯示整數還是負號
- {
- ly_dis[0] = 0xbf;
- ltemp = 0 - ltemp;
- }
- else
- ly_dis[0] = ltemp / 1000; //顯示百位值
-
- if(ly_dis[0] == 0)
- ly_dis[0] = 0xff;
-
- ltemp = ltemp % 1000;
- ly_dis[1] = ltemp / 100; //顯示溫度十位值
- ltemp = ltemp % 100;
- ly_dis[2] = ltemp / 10; //顯示溫度個位值
- ly_dis[3] = ltemp % 10; //顯示小數點后一位
- }
-
- i++;
- if(i == 800)
- i = 0;
- display(); //調用顯示
- Delay(150);
- }
- }
- //顯示函數,參數為顯示內容
- void display()
- {
- P0 = 0XFF; //
- switch(l_posit)
- {
- case 0: //選擇千位數碼管,關閉其它位
- SMG_q = 0;
- SMG_b = 1;
- SMG_s = 1;
- SMG_g = 1;
- P0 = table[ly_dis[0]]; //輸出顯示內容
- break;
- case 1: //選擇百位數碼管,關閉其它位
- SMG_q = 1;
- SMG_b = 0;
- SMG_s = 1;
- SMG_g = 1;
- P0 = table[ly_dis[1]];
- //Delay(4);
- break;
- case 2: //選擇十位數碼管,關閉其它位
- SMG_q = 1;
- SMG_b = 1;
- SMG_s = 0;
- SMG_g = 1;
- P0 = table[ly_dis[2]] & 0x7f;
- //Delay(3);
- break;
- case 3: //選擇個位數碼管,關閉其它位
- SMG_q = 1;
- SMG_b = 1;
- SMG_s = 1;
- SMG_g = 0;
- P0 = table[ly_dis[3]];
- //Delay(2);
- break;
- }
- l_posit++; //每調用一次將輪流顯示一位
- if(l_posit > 3)
- l_posit = 0;
- }
- //延時子函數,短暫延時
- void Delay(unsigned time) //延時函數
- {
- unsigned int i; //決定延時時間長短
- while(time--)
- {
- i = 10;
- while(i--);
- }
- }
復制代碼
所有資料51hei提供下載:
DS18B20.rar
(25.08 KB, 下載次數: 43)
2019-12-20 18:18 上傳
點擊文件名下載附件
1T測溫 下載積分: 黑幣 -5
|