2723|1

2

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

DS18B20采集温度 [复制链接]

 

请大侠门看看,写得不好,只显示已个数字,这个是我试验的程序,就是调试不出来,那些地方错误请大侠门指出来,我学习学习,刚学单片机,希望得到大侠门的帮助

问题:只显示一个数字,图片在后面,请大侠门分析分析

 

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit DQ=P3^7;
uchar code table[]={"0123456789"};
uchar rom[4][8]={0x28,0x30,0xc5,0xb8,0x00,0x00,0x00,0x8e,
     0x28,0x31,0xc5,0xb8,0x00,0x00,0x00,0xb9,
     0x28,0x32,0xc5,0xb8,0x00,0x00,0x00,0xe0,
     0x28,0x33,0xc5,0xb8,0x00,0x00,0x00,0xd7,};
sbit rs=P2^0;
sbit rw=P2^1;
sbit lcden=P2^2;
uchar c;
void delay1602(uint z)
{
 uint x,y;
 for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}

void write_com(uchar com)//写命令
{
 rs=0;
 lcden=0;
 P0=com;
 delay1602(5);
 lcden=1;
 delay1602(5);
 lcden=0;
}

void write_date(uchar date)
{
 rs=1;
 lcden=0;
 P0=date;
 delay1602(5);
 lcden=1;
 delay1602(5);
 lcden=0;
}

void init_lcd()
{
 lcden=0;
 rw=0;
 write_com(0x38);
 write_com(0x0c);
 write_com(0x06);
 write_com(0x01);
 write_com(0x80);
}
void delay_18b20(uchar count)
{
 while(count--);
}
void init_18b20()
{
 uchar x=0;
 DQ=1;
 delay_18b20(8);
 DQ=0;
 delay_18b20(80);
 DQ=1;
 delay_18b20(14);
 x=DQ;
 delay_18b20(20);
}
uchar read_18b20()
{
 uchar i=0;
 uchar date=0;
 for (i=8;i>0;i--)
  {
    DQ=0;
    date>>=1;
    DQ=1;
    if(DQ)
    date=date|0x80;
    delay_18b20(4);
  }
  return(date);
}
void write_18b20(uchar date)
{
 uchar i;
 for(i=8;i>0;i--)
 {
  DQ=0;
  date=date&0x01;
  delay_18b20(5);
  DQ=1;
  date>>=1;
 }
}
void read_temp()
{
 uchar temp,num,a,b,temp_value,shi,ge,xiaoshu;
 uint value;
 init_18b20();
 delay1602(5);
 write_18b20(0xcc);
 write_18b20(0x44);
 delay1602(5);
 for(temp=4;temp>0;temp--)
 {
  init_18b20();
  delay1602(5);
  write_18b20(0x55); 
  for(num=8;num>0;num--)
   write_18b20(rom[1][num]);
 write_18b20(0xbe);  
 a=read_18b20();
 b=read_18b20();
 value=b;
 value<<=8;
 value=value|a;
 temp_value=value*0.0625;
 value=temp_value*10+0.5;
 shi=value/100;
 ge=value/10%10;
 xiaoshu=value%10;
 write_com(0x80);
 write_date(table[shi]);
 write_com(0x80+1+c);
 write_date(table[ge]);
 write_com(0x80+2+c);
 write_date(table[xiaoshu]);
 c=c+3;
 delay1602(10);
 }
 c=0;
}
void main()
{
 init_lcd();
 while(1)
 {
  read_temp();
  delay1602(10);      
 }
}

未命名.jpg (89.01 KB, 下载次数: 2)

未命名.jpg
点赞 关注
 

回复
举报

2

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
write_18b20(rom[1][num]);
原来应该是:write_18b20(rom[temp][num]);
是我调试修改过
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表