/*
*******************************************************************************
* 文件名:main.c
* 描 述:温度传感器DS18B20示例
* 备 注:控制DS18B20测量温度并将温度值显示到液晶上
*******************************************************************************
*/
#include #include "stdint.h" extern bit startDs18b20(); extern bit getDs18b20Temperature(int * temp); extern void initLcd1602(); extern void lcd1602ShowStr(uint8_t x, uint8_t y, uint8_t * str); extern uint8_t getIntPart(int16_t temp); extern uint8_t getDecPart(int16_t temp); bit flag1s = 0; //1s定时标志 uint8_t T0RH = 0, T0RL = 0; void ConfigTimer0(uint16_t ms); uint8_t IntToString(uint8_t * str, int16_t dat); void main() { bit res; int16_t temp; //读取到的当前温度值 uint8_t intT, decT; //温度值的整数和小数部分 uint8_t len; uint8_t str[12]; EA = 1; //开总中断 ConfigTimer0(10); //T0定时10ms startDs18b20(); //启动DS18B20 initLcd1602(); //初始化液晶 while (1) { if (flag1s) { //每秒更新一次温度(软实时) flag1s = 0; res = getDs18b20Temperature(&temp); //启动转换后至少要再等750ms之后读取当前温度 if (res) { //读取成功时,刷新当前温度显示 intT = getIntPart(temp); //分离出温度值整数部分 decT = getDecPart(temp); //分离出温度值小数部分 len = IntToString(str, intT); //整数部分转换为字符串 str[len++] = '.'; //添加小数点 str[len++] = decT + '0'; //十进制小数位再转换为ASCII字符 while (len < 6) { //用空格补齐到6个字符长度 str[len++] = ' '; } str[len] = '