DS18B20溫度顯示仿真
下載所有資料包含中文資料:
溫度顯示.rar
(156.57 KB, 下載次數(shù): 16)
2016-5-11 14:24 上傳
點擊文件名下載附件
新手發(fā)帖
DS18B20溫度顯示仿真圖:
- #include <reg52.h>
- #include "typedef.h"
- #include "device_init.h"
- #include "ds18b20.h"
- code u8 float_tab[16] = {0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};//小數(shù)表
- code u8 DisCode[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0xff, 0xbf};
- u8 DisNum[4] = {0x0a, 0x0a, 0x00, 0x00};
- u8 DisPosition = 0;
- /************************************************
- * 函數(shù)名稱:dynamic_display
- * 輸 入:
- * 輸 出:
- * 功能描述:
- *************************************************/
- void dynamic_display(void)
- {
- static u8 DisPinOn = 0x01;
- DisPinOn <<= 1;
- if(DisPinOn == 0x10)
- {
- DisPosition = 0;
- DisPinOn = 0x01;
- }
- DIS_DAT = 0xff;
- DIS_POS = DisPinOn;
- DIS_DAT = DisCode[DisNum[DisPosition++]];
- if(DisPinOn == 0x04)
- DIS_DAT &= 0x7f;
- }
- /************************************************
- * 函數(shù)名稱:set_temp_data
- * 輸 入:
- * 輸 出:
- * 功能描述:
- *************************************************/
- void set_temp_data(void)
- {
- u16 TempData;
- float Temp;
- u8 Negative;
- s8 i;
- TempData = ds18b20_get_temp(); //度溫度數(shù)據(jù)
- /* 小于零 */
- if(TempData & 0xf000)
- {
- TempData = ~TempData + 1;
- TempData &= 0x0fff;
- Negative = 1;
- }
- /* 大于零 */
- else
- {
- Negative = 0;
- }
- Temp = (TempData >> 4) * 10; //溫度讀數(shù)乘以精度(0.0625),顯示小數(shù)點一位,所以乘以10
- Temp = Temp + float_tab[(TempData & 0x000f)] + 0.5; //加上小數(shù)部分,四舍五入所以加0.5
- TempData = Temp;
- for(i=3; i>=0; i--)
- {
- DisNum[i] = TempData % 10;
- TempData /= 10;
- }
- for(i=0; i<2; i++)
- {
- if(DisNum[i] != 0)
- {
- break;
- }
- else
- {
- DisNum[i] = 0x0a; //前面為0不顯示
- }
- }
- /* 顯示負號 */
- if(Negative == 1)
- {
- for(i=2; i>=0; i--)
- {
- if(DisNum[i] == 0x0a)
- {
- DisNum[i] = 0x0b; //'-'
- break;
- }
- }
- }
- }
復制代碼
|