|
主程序如下。目前数码管显示的数据是06666,这个是不正常的。这个程序是我仿照普中的DS18B20实验来做的,预期是用DS18B20测温,数码管显示数据,保留一位小数。
目前显示不正常,我首先是检查DS18B20初始化是否有问题,所以我加了一个指示灯,发现初始化是没有问题的。
所以说现在让我疑惑的有两点,第一点就是T_value = DS18B20_Read_T()*10;//保留一位小数,
我觉得问题是出现在这里,因为这里
/*
if(T_value < 0)
{
T_value = - T_value;
temp_buf[0] = 0x40; //-
}
else
{
temp_buf[0] = 0x00; //不显示
}
*/
我无论加不加注释,数码管要点亮的首位总是显示0。我不知道为什么会这样。
第二点是这一句temp_buf[3] = duan_table[T_value%1000%100/10]; //个位+小数点,加个小数点的话应该写成temp_buf[3] = duan_table[T_value%1000%100/10] | 0x80;(用的是共阴极数码管),但是这样写的话,这一位完全不亮。
我非常疑惑,恳请诸位大神指点迷津。
#include <REGX51.H>
#include "Delay.h"
#include <intrins.h>
#include "Smg.h"
#include "DS18B20.H"
#include "LED.h"
extern duan_table[];
void main(void)
{
uchar i = 0;
int T_value;
uchar temp_buf[5];
uint DS18B20_OK = 0;
DS18B20_OK = DS18B20_Init();//DS18B20初始化
if(DS18B20_OK)
LED_OFF();
else
LED_ON();
while(1)
{
i++;
if(i%50 == 0) //每隔一段时间读取温度值,间隔时间要大于温度传感器转换时间
T_value = DS18B20_Read_T()*10;//保留一位小数
/*
if(T_value < 0)
{
T_value = - T_value;
temp_buf[0] = 0x40; //-
}
else
{
temp_buf[0] = 0x00; //不显示
}
*/
temp_buf[1] = duan_table[T_value/1000];
temp_buf[2] = duan_table[T_value%1000/100];
temp_buf[3] = duan_table[T_value%1000%100/10]; //个位+小数点
temp_buf[4] = duan_table[T_value%1000%100%10];
smg_display(temp_buf, 4);
}
}
|
|