DS18B20温度显示仿真
下载所有资料包含中文资料:
温度显示.rar
(156.57 KB, 下载次数: 16)
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};//小数表
- 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;
- /************************************************
- * 函数名称: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;
- }
- /************************************************
- * 函数名称:set_temp_data
- * 输 入:
- * 输 出:
- * 功能描述:
- *************************************************/
- void set_temp_data(void)
- {
- u16 TempData;
- float Temp;
- u8 Negative;
- s8 i;
- TempData = ds18b20_get_temp(); //度温度数据
- /* 小于零 */
- if(TempData & 0xf000)
- {
- TempData = ~TempData + 1;
- TempData &= 0x0fff;
- Negative = 1;
- }
- /* 大于零 */
- else
- {
- Negative = 0;
- }
- Temp = (TempData >> 4) * 10; //温度读数乘以精度(0.0625),显示小数点一位,所以乘以10
- Temp = Temp + float_tab[(TempData & 0x000f)] + 0.5; //加上小数部分,四舍五入所以加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;
- }
- }
- }
- }
复制代码
|