dianzi_luobo 发表于 2012-4-26 10:52:45

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

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



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

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

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

XA144F 发表于 2012-4-26 10:56:15

我给你个建议吧:先做出最原始、但是能实现功能的程序原型,然后对其不断改进优化。

lryxr2507 发表于 2012-4-26 13:14:51

参见:http://www.ourdev.cn/thread-5464746-1-2.html,还有赶紧改标题吧,否则会被扣分.{:titter:}

hanhui 发表于 2012-4-26 13:46:48

你把硬件列出来,使用的元器件列出来,硬件不同程序不同啦

gongnn 发表于 2012-4-26 13:50:07

悲催的楼主啊!

cndavy 发表于 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

uinttemp;
uchar snn;
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);    /* 写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;

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=temp_sensor_addr;
   sensor_count++;
   if (tag_new==0) scan_over=1;
}
}

jetli 发表于 2012-4-26 14:09:06

cndavy 发表于 2012-4-26 13:54 static/image/common/back.gif
下列 TMEX API 测试程序的源代码可从
ftp://ftp.dalsemi.com/pub/auto_id/public/an187.zip下载
搜索过程的 ...

{:handshake:}多谢共享。

有空测试一下,,,

lryxr2507 发表于 2012-4-26 14:26:30

我都提醒了,你还不改,这下惨了吧!{:lol:}

zhenglu891028 发表于 2012-4-26 16:49:45

该从新注册个号了

raxb 发表于 2012-4-26 19:35:41

{:titter:}{:titter:}{:shy:}

niukai 发表于 2012-4-26 19:51:01

悲催的楼主啊!

cndavy 发表于 2012-5-7 19:32:10

jetli 发表于 2012-4-26 14:09 static/image/common/back.gif
多谢共享。

有空测试一下,,,

调试好了,回一份,好久没焊板子了。
页: [1]
查看完整版本: 悬赏用51做一个5路测温,报酬可商量