本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
附件里为整个程序:其中24c02部分跟ds18b20获取温度数据程序是正确的,就是无法实现把获取来的变化的温度数据保存进uchar Temperature[]={" "};这个数组里.
程序里:/********************************************/
//函 数:write_EPROM(uchar n)
//功 能:向EPROM写n个数据
//返回值:无
/*******************************************/
void write_EPROM(uchar n)
{
void write_EPROM(uchar n)
{
uchar j;
uchar Temperature[]={" "};
sprintf(Temperature,"%4.1u",ReadTemp()); //将温度值格式化到Temperature 中;
for(j=0;j<n;j++)
{
write_add(0xa0,Temperature[j]);
delayms(100);
SBUF=read_add(0xa0);
}
}
/*********************************************/是用来实现保存DS18B20获取来的n个温度数据的,其中Temperature[j]为我已经保存好获取来的n个温度数据的数组,但是我这里怎么也实现不了温度数据保存,在串口调试助手上得到的却是乱码,如果把上面子程序写成如下:
/********************************************/
//函 数:write_EPROM(uchar n)
//功 能:向EPROM写n个数据
//返回值:无
/*******************************************/
void write_EPROM(uchar n)
{
uchar j,date[]="hgfsghsertesagxdfhgfgngcnchndfghsretegdzgdf";
for(j=0;j<n;j++)
{
write_add(0xa0,date[j]);
delayms(100);
SBUF=read_add(0xa0);
}
}
/*********************************************
则在串口调试助手上得到的数据是:hgfsghsertesagxdfhgfgngcnchndfghsretegdzgdf,也就是说date[]数组里写什么就得到的是什么,但是得不到我获取来的温度数据为32.1形式的温度数据.
程序中DS18B20获取温度数据的子程序为:
uint ReadTemp() //读取DS18B20当前温度
{
float tt;
uchar a,b;
dsreset();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
delay_18B20(100);
dsreset();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
delay_18B20(1);
a=ReadOneChar(); //读取温度值低位
b=ReadOneChar(); //读取温度值高位
temp=b;
temp<<=8; //两个字节组合为个字节;
temp=temp|a;
tt=temp*0.0625;
temp=tt*10+0.5;
temp_data[0]=t1=temp/100;
temp_data[1]=t2=temp%100/10;
temp_data[2]=t3=14; //这里直接填入要表示的符号或数字的ASCII码就可以显示出来,点的ASCII码为46,46-32=14;
temp_data[3]=t4=temp%100%10;
temp0[0]=temp_data[0];
temp0[1]=temp_data[1];
temp0[2]=temp_data[2];
temp0[3]=temp_data[3];
return temp;
}
这里获取来的温度temp形式为十进制整型32.1形式,请问我要怎样改程序可以实现把一直变化着的温度数据保存在数组里,然后在串口读出来呀?我这几天都在调这程序,怎么也没有调出来,查资料说sprintf函数可以把整型转换为字符型,但是我这里加sprintf(Temperature,"%4.1u",ReadTemp());转换后得到的却是乱码。还请高手帮忙呀! |