搜索
bottom↓
回复: 11

悬赏用51做一个5路测温,报酬可商量

[复制链接]

出0入0汤圆

发表于 2012-4-26 10:52:45 | 显示全部楼层 |阅读模式
    因项目需要,要弄一个5路测温的这么一个东西出来,PCB板、电路图、和各种硬件都是现成的,只是需要编写软件,自己学了很长时间,但还是感觉有难度,入不了这个门,所以现在来这里求助各位大哥帮忙解决这个问题,有兴趣的可以加QQ 182188600 联系(最好是西安地区),备注请写上:51单片机,事成之后又酬劳感谢,报酬可以商量!



原标题:求助....
阿莫修改的标题:悬赏用51做一个5路测温,报酬可商量

打击“标题不能说明帖子内容”,处罚250莫元  
http://www.ourdev.cn/thread-5468735-1-1.html

此贴被网友举报, 楼主扣分250莫元。
举报成功的网友获得3莫元的奖励(已经发出)。
已经由阿莫修改成合格的标题。

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-4-26 10:56:15 | 显示全部楼层
我给你个建议吧:先做出最原始、但是能实现功能的程序原型,然后对其不断改进优化。

出0入0汤圆

发表于 2012-4-26 13:14:51 | 显示全部楼层
参见:http://www.ourdev.cn/thread-5464746-1-2.html  ,还有赶紧改标题吧,否则会被扣分.

出0入0汤圆

发表于 2012-4-26 13:46:48 | 显示全部楼层
你把硬件列出来,使用的元器件列出来,硬件不同程序不同啦

出0入0汤圆

发表于 2012-4-26 13:50:07 | 显示全部楼层
悲催的楼主啊!

出0入0汤圆

发表于 2012-4-26 13:54:58 | 显示全部楼层
本帖最后由 cndavy 于 2012-4-26 13:57 编辑

下列 TMEX API 测试程序的源代码可从
ftp://ftp.dalsemi.com/pub/auto_id/public/an187.zip下载
搜索过程的‘C’程序代码实例图 4 接下页


转帖,以下没有试验,不过看来可以动态扫描DS18

uint  temp[8];
uchar snn[8][8];
uchar sensor_count;

/* 以下是对ds18b20的单总线操作子程序 11.0592MHz */
bit ds1820_init()       /* 单总线初始化,成功返回1,失败返回0 */
{
  uchar i;
  ds_1wire=0;
  for(i=0;i<57;i++);    //delay 500us
  ds_1wire=1;
  i=0;
  while(ds_1wire==1)    /* 最多延时70us,此期间若总线拉低(ds_1wire=0)则结束延时 */
  {
    i++;
    if(i>=8) return 0;
  }
  for(i=0;i<54;i++);    //delay 480us;
  if(ds_1wire==0) return 0;
  return 1;
}

void ds1820_wr(uchar dat)
{
  uchar i,j;
  bit b;
  for(i=0;i<8;i++)
  {
    ds_1wire=0;
    b=dat & 0x01;
    dat=dat>>1;
    ds_1wire=b;
    for(j=0;j<6;j++);    //delay 51us
    ds_1wire=1;
  }
}

uchar ds1820_rd(void)
{
  uchar i,j;
  uchar c;
  bit b;
  c=0;
  for(i=0;i<8;i++)
  {
    ds_1wire=0;
    c=c>>1;             //delay 4.3us
    ds_1wire=1;
    if(ds_1wire==1) c |= 0x80;
    for(j=0;j<6;j++);    //delay 59us
  }
  return c;
}

void get_temp(void)     /* 默认在750ms之前已经启动温度转换 */
{
  uchar i,j,lo,hi;
  EA=0;
  for(i=0;i<sensor_count;i++)
  {
    if(ds1820_init()==0) return;
    ds1820_wr(0x55);          /* 匹配rom命令 */
    for(j=0;j<8;j++) ds1820_wr(snn[j]);    /* 写64位序列号 */
    ds1820_wr(0xbe);          /* 读温度命令 */
    lo = ds1820_rd();         /* 读温度低字节 */
    hi = ds1820_rd();         /* 读温度高字节 */
    temp=hi*256+lo;
  }
  if(ds1820_init()==0) return;
  ds1820_wr(0xcc);          /* 跳过rom命令 */
  ds1820_wr(0x44);          /* 启动温度转换 */
  EA=1;
}

void scan_all_sensor()
{
  unsigned char i,j,c;
  unsigned char tag_old,tag_new;
  bit scan_over,b;
  unsigned char temp_sensor_addr[8];

  sensor_count=0;
  scan_over=0;
  tag_old=0;
  for(;scan_over==0;)
  {
     tag_new=0;
     //scan_start
     if(ds1820_init()==0) return;
     ds1820_wr(0xf0);              /* 搜索rom命令 */
     for (i=1;i<=64;i++)
     {
       //get c
       c=0;
       ds_1wire=0;
       j=j>>1;                     //delay 4.3us
       ds_1wire=1;
       if(ds_1wire==1) c|=0x02;
       for(j=0;j<6;j++);           //delay 51us
       ds_1wire=0;
       j=j>>1;                     //delay 4.3us
       ds_1wire=1;
       if(ds_1wire==1) c|=0x01;
       for(j=0;j<6;j++);           //delay 51us
       switch (c)
       {
       case 0x00:                /* 此位冲突 */
            if(i<tag_old)        /*  未到达标TAG_OLD,向TAG_OLD走,如果是向左则标记新的TAG_NEW*/
            {
              if ((temp_sensor_addr[(i-1)>>3] & 0x01) == 0x00) {b=0;tag_new=i;} else b=1;
            }
            if(i==tag_old) b=1;  /*  到达TAG_OLD,固定向右走  */
            if(i>tag_old)        /*  超过TAG_OLD,先选择向左走出,标记新的TAG_NEW */
            {
              b=0;
              tag_new=i;
            }
            break;
       case 0x01:                /* 此位为0 */
            b=0;
            break;
       case 0x02:                /* 此位为1 */
            b=1;
            break;
       case 0x03:                /* 无传感器 */
            scan_over=1;
            i=64;
            break;
       default: break;
       }
       temp_sensor_addr[(i-1)>>3]=temp_sensor_addr[(i-1)>>3] >> 1;
       if (b==1) temp_sensor_addr[(i-1)>>3] |= 0x80;
       //out bit b
       ds_1wire=0;
       j=j>>1;              //delay 4.3us
       ds_1wire=b;
       for(j=0;j<6;j++);    //delay 59us
       ds_1wire=1;
     }
     tag_old=tag_new;
     //reord sensor addr
     if (sensor_count<=7)
       for(j=0;j<8;j++) snn[sensor_count][j]=temp_sensor_addr[j];
     sensor_count++;
     if (tag_new==0) scan_over=1;
  }
}

出0入0汤圆

发表于 2012-4-26 14:09:06 | 显示全部楼层
cndavy 发表于 2012-4-26 13:54
下列 TMEX API 测试程序的源代码可从
ftp://ftp.dalsemi.com/pub/auto_id/public/an187.zip下载
搜索过程的 ...

  多谢共享。

有空测试一下,,,

出0入0汤圆

发表于 2012-4-26 14:26:30 | 显示全部楼层
我都提醒了,你还不改,这下惨了吧!

出0入0汤圆

发表于 2012-4-26 16:49:45 | 显示全部楼层
该从新注册个号了

出0入0汤圆

发表于 2012-4-26 19:35:41 | 显示全部楼层

出0入0汤圆

发表于 2012-4-26 19:51:01 | 显示全部楼层
悲催的楼主啊!

出0入0汤圆

发表于 2012-5-7 19:32:10 | 显示全部楼层
jetli 发表于 2012-4-26 14:09
多谢共享。

有空测试一下,,,

调试好了,回一份,好久没焊板子了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 02:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表