为什么我的单片机用DS18B20测温度,用数码管显示时,最高位革命人永远是年轻简谱“8.”,且不能对其显示要求的

DS18B20测温8位LEDC程序:数码管显示不随温度变化,老是显示0.1“c,且不正确,求高手解答,万分感谢!_百度知道
DS18B20测温8位LEDC程序:数码管显示不随温度变化,老是显示0.1“c,且不正确,求高手解答,万分感谢!
}uchar Init_DS18B20(){
&&void Delay(uint x){
while(--x);
DQ = dat& 0x01; DQ = 1;Delay(t);reg51,0X4F,0X7F,0};Delay(t);Delay(t);30;
P2=0xDF; _nop_();
} } for (i=0;
Delay(30);Delay(t);
WriteOneByte(0x44);
P0 = 0x40;P2=0i++) {
if (Temp_Value[0] == 0x00) Temp_Value[1]++,0X7D; CurrentT = ((Temp_Value[0] & 0xf0)& Delay(8).h&
np = 0xf7,0X6F;#define uint unsigned int#define uchar unsigned charsbit DQ = P3^6; P2 = np,2,4;= 1; Delay(50000),3; Delay(t),0x22},4;i&= 1;
DQ = 1; DQ = 0;4);i++) {
DQ = 0;bit DS18B20_IS_OK = 1;
DQ = 1,0X5B;
Temp_Value[1] = ReadOneByte();
} }void Display_Temperature(){
if (Display_Digit[2] == 0)
Display_Digit[2] = 10,1;#include &lt.h& P2=0 Display_Digit[3] = CurrentT /
ng=1; for(i=0;
Temp_Value[0] = ~Temp_Value[0]+1;np=0
P2=0***************
writer,0,8;
if ( (Temp_Value[1] & 0xf8) == 0xf8) {
Temp_Value[1] = ~Temp_Value[1].w
******************&#47,0X66;#include &4) | ((Temp_Value[1] & 0x07)& Delay(90); Display_Digit[1] = CurrentT % 10;
_nop_();}void WriteOneByte(uchar dat){
DS18B20_IS_OK=1;8;uchar code DSY_CODE[] ={ 0X3F, np=0,8;
WriteOneByte(0xcc);P2=0x7f; Display_Digit[2] = CurrentT % 100 / }}void Read_Temperature(){
if(Init_DS18B20() ==1 )
DS18B20_IS_OK = 0;
P0=DSY_CODE[Display_Digit[0]],1;
np = 0}uchar ReadOneByte(){
dat &gt,0X00};
Init_DS18B20(),5; Delay(8),3; & uchar ng=0;
P0=DSY_CODE[Display_Digit[3]]; }
uchar t=150,9,0X06;
WriteOneByte(0xbe),6;
P2=0i& DQ = 1;P2=0 } Display_Digit[0] = df_Table[ Temp_Value[0] & 0x0f ],dat=0,6;
_nop_();8;
} }}void main(){ Read_Temperature();P2=0xff,0,7;
dat |= 0X80; 10;
P2=0xf7;uchar code df_Table[] = {0; if (Display_Digit[3] == 0) {
Display_Digit[3] = 10;i++) {
P0=0x39;uchar CurrentT = 0; P2=0&gt,0X6D;
P0=(DSY_CODE[Display_Digit[1]]) | 0x80;P2=0xbf,9}; DQ = 1; Delay(50000);
Temp_Value[0] = ReadOneByte(); DQ = 1,0X07;P2=0xFF;uchar Temp_Value[]={0x11;
DQ = 1;P2=0 else {
WriteOneByte(0xcc); for(i=0; Delay(t);Delay(t): while(1) {
Read_Temperature();
if(DS18B20_IS_OK)
Display_Temperature();i&uchar Display_Digit[]={0;
P0=DSY_CODE[Display_Digit[2]]; 100&#47
com/zhidao/pic//zhidao/wh%3D600%2C800/sign=05d21e71b3de9c82a630f/faf2be5d0aaa400cdcc7.hiphotos.baidu.baidu://h://h.hiphotos.baidu://h.com/zhidao/wh%3D450%2C600/sign=5b35a3fcb568c0106caaebd/faf2be5d0aaa400cdcc7.hiphotos.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http<a href="http.jpg" esrc="http
就是在计算实际温度的那个地方错了,然后再通过取余什么的得到十位,显示的温度不变,算的时候先×100变成2800,一般取温程序不会有错,比如28度,我的是因为取了温度以后对温度×100的算法不对,你看看温度换算那里吧、个位等数这个问题我也曾经出现过
其他类似问题
为您推荐:
其他1条回答
程序这个东西还是自己慢慢调吧,注意模块化调试。。呵呵
数码管显示的相关知识
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 ds18b20数码管闪烁 的文章

 

随机推荐