xiaozhiyong 发表于 2009-3-13 13:22:50

确实好使,谢谢啦,希望更多的人看到这份资料...

tyff 发表于 2009-3-13 16:39:44

不错 记号 18B20

fsclub 发表于 2009-3-27 17:14:42

好使.我试了!

hhrfjz 发表于 2009-3-30 17:30:01

TO: feiyang007 不正

我又来了,我是菜鸟,不明白这三个宏定义:
------------------------------------------------------------------
#define CLR_DIR_1WIRE    DDRC&=~BIT(2)   //只要修改这里的参数就可以了!呵呵!
#define SET_DIR_1WIRE    DDRC|=BIT(2)      //里面什么都不用该!
#define CLR_OP_1WIRE   PORTC&=~BIT(2)
#define SET_OP_1WIRE   PORTC|=BIT(2)
------------------------------------------

这个是对单总线占用你单片机的I/O口的一个宏定义。
我用的是 PC2 口。
第一个的意思是让PC2口设置为输入状态。
第二个的意思是让PC2口设置为输出状态。
第三个的意思是让PC2口下拉为低电平。
第四个的意思是让PC2口上拉为高电平。

如果你要更换I/O口你只需要修改一下 DDRX、PORTX 和BIT(X)就可以了。

不知道我说清楚了没有.

ml07077 发表于 2009-3-31 15:29:16

请问hhrfjz ---
小数如何处理。谢!

barnaby 发表于 2009-4-12 18:40:40

出口参数wmh是显示的高位,wml使显示的低位????
为什么呢
什么迹象表明出口参数是wmh 和 wml

barnaby 发表于 2009-4-12 20:34:22

其中的 init_f = SREG;   
SEI();

是什么意思,请教大侠

ximitiejiang 发表于 2009-4-13 10:41:29

感谢分享!

janor 发表于 2009-4-14 12:22:09

mark

1860 发表于 2009-4-15 21:01:05

顶一个

hedgehog 发表于 2009-4-15 21:21:09

唉,最近买DS18B20都不好买,缺货啊~

talangtingyu 发表于 2009-4-20 09:21:10

不好意思,我是新手来的,请问有无详细的实例,具体如何操作,谢谢!

fsclub 发表于 2009-4-20 09:59:21

楼上,这要怎么操作啊?
你要温度就去GETTEMP,全局就是WML和WMH就是你要的。

talangtingyu 发表于 2009-4-20 11:14:54

void gettemp()                   //读取温度值
这个函数不用带返回值 吗?

talangtingyu 发表于 2009-4-21 07:58:19

想请教下各位,为什么我这样用却不能成功的,我的液晶显示程序没有问题的,我只是在我原来写好的液晶程序中加入了下while(1)
          {
             gettemp();
             for(num=20;num>0;num--)
               {
               write_dat(wmh);

       }
但却不能读出18B20的数据,请各位指教,谢谢!
#include<avr/io.h>//编译环境为WINAVR,8M晶振
#include<util/delay.h>
#define uchar unsigned char
#define uint unsigned int
#include "delay.h"
#include "18B20.h"
uchar table[]={"I LOVE CHY"};
void write_com(uchar com)//写命令函数
{       _delay_ms(5);
      
       PORTC&=~(1<<PC3);
      
           PORTA=com;
       _delay_ms(5);
           PORTC|=(1<<PC2);
           _delay_ms(5);
           PORTC&=~(1<<PC2);

}
void write_dat(uchar dat)//写数据函数
{       _delay_ms(5);
       PORTC|=(1<<PC3);//RS设置为高电平,写数据
           PORTA=dat;//将数据送到数据端口A
       _delay_ms(5);
           PORTC|=(1<<PC2);
           _delay_ms(5);//
           PORTC&=~(1<<PC2);
}
   int main(void)
{ uchar num;
      
          DDRA=0xff;
          DDRC|=(1<<PC3)|(1<<PC2);
          PORTC&=~(1<<PC2);
          write_com(0x01);
          write_com(0x38);
             _delay_ms(5);
          write_com(0x0e);//显示光标
         _delay_ms(5);
      write_com(0x0f);
      _delay_ms(5);
                   write_com(0x80);
          while(1)
          {
             gettemp();
             for(num=20;num>0;num--)
               {
               write_dat(wmh);

       }
}

a105 发表于 2009-4-22 02:28:49

mark

barnaby 发表于 2009-4-25 13:17:54

在主函数中还要初始化吗?
是不是直接用:

个位温度=wml;
十位温度=wmh;

就可以了?是这样的吗

biansf2001 发表于 2009-4-25 16:48:54

你把gettemp函数定义为uint多好啊,直接返回,省得加2个全局变量

Lee. 发表于 2009-4-25 20:34:30

再学习下!

wkxu 发表于 2009-4-28 20:10:04

mark

zsy777 发表于 2009-4-28 23:30:42

MARK

lihao266 发表于 2009-5-22 20:19:14

多谢LZ!好用。

machi518 发表于 2009-6-10 10:59:35

谢谢!

jackielau 发表于 2009-6-10 14:09:21

程序只能在未优化的情况下工作,建议楼主修改一下延时函数,使其在优化时调用函数库中_delay_us(),这样可使其通用工作!

zhao_yun 发表于 2009-6-10 22:03:52

avr比51延时就是好。

tomy 发表于 2009-6-10 22:14:09

谢谢楼主分享

yangyb 发表于 2009-6-11 09:15:05

谢谢!收藏,要用时再仔细看。

ml07077 发表于 2009-6-14 18:34:24

void init_1820()
{
    SET_DIR_1WIRE;                //设置PC2 为输出
    SET_OP_1WIRE;   
    CLR_OP_1WIRE;
    delay_nus(480);    //480us以上
    SET_OP_1WIRE;
    CLR_DIR_1WIRE;
    delay_nus(20);   //15~60us
    while(CHECK_IP_1WIRE);
    SET_DIR_1WIRE;
    SET_OP_1WIRE;
    delay_nus(140);   //60~240us
}
void write_1820(unsigned char x)
{   
   unsigned char m;
    for(m=0;m<8;m++)
    {
       CLR_OP_1WIRE;
       if(x&1)//(x&(1<<m))    //写数据了,先写低位的!
       SET_OP_1WIRE;
       else
       {CLR_OP_1WIRE;}
       delay_nus(40);   //15~60us
       SET_OP_1WIRE;
      x>>=1;
    }
   SET_OP_1WIRE;
}
unsigned char read_1820()
{      
    unsigned char temp,k,n;
    temp=0;
    for(n=0;n<8;n++)
       {
      CLR_OP_1WIRE;
      SET_OP_1WIRE;
      CLR_DIR_1WIRE;
      ttemp>>=1;
      k=(CHECK_IP_1WIRE);    //读数据,从低位开始
      if(k)
      temp|=0x80;//(1<<n);
      else
      temp&=0x7f;//~(1<<n);
      delay_nus(50); //60~120us      
      SET_DIR_1WIRE;
   }
   return (temp);
}   
小改一下可省60多个字节。

ennyandson 发表于 2009-6-18 22:01:03

mark

onebobo126com 发表于 2009-6-20 10:00:16

MAK

onebobo126com 发表于 2009-6-20 10:03:05

以前自己玩了一下没成,有时间再试试

guangan854214 发表于 2009-6-23 11:26:32

谢谢
记号

snail0204 发表于 2009-6-23 13:28:40

mark

lf8013 发表于 2009-6-24 12:37:52

都是强人!!!

wanghengzhi 发表于 2009-6-27 22:12:39

记号!

huangjian1344 发表于 2009-8-20 13:53:33

谢谢,记下号!

fandy 发表于 2009-8-20 17:25:02

3q

xiongcy 发表于 2009-8-20 18:02:19

18b20,先MARK了。。

LMCHEN 发表于 2009-8-20 19:17:16

我很菜,加之刚学C,看了LZ的佳作,有以下几点还没明白:
1,void gettemp()这个函数用了VOID不是说明这个函数没有返回值吗?
2, wml, wmh是子函数里面的变量,函数调用后书上不是说此变量开辟的存储空间不是会覆盖吗,
   那怎么还能把值返回合调用函数呢?

以上两点疑惑请各们帮忙解答下,万分感谢!!!

T_sunny_boy 发表于 2009-8-23 17:24:06

谢谢

shizt 发表于 2009-9-7 16:30:37

mark

hpdell 发表于 2009-9-8 19:10:21

好东东。高人!!!!!顶!!!!!!!!!!!

aohuahua 发表于 2009-10-9 20:04:43

MARK,好东西`

coolfish 发表于 2009-10-9 22:00:16

记号一下,前几天还在迷茫不知道怎么用这个东东了

QQ373466062 发表于 2009-10-10 00:17:22

一直想弄个1602+18B20    先Mark

hzpyj 发表于 2009-10-10 12:27:56

mark

aohuahua 发表于 2009-10-10 22:56:20

MARK

Stitch 发表于 2009-10-11 00:07:55

M

jone_zplay 发表于 2009-10-11 00:54:43

顶!

ggyyll8683 发表于 2009-10-11 07:48:21

mark

bcfai123 发表于 2009-10-11 10:01:36

mark

worldff 发表于 2009-10-11 11:08:17

mark

67122997 发表于 2009-10-27 14:23:38

做个记号

dugutianma 发表于 2009-11-2 10:32:11

mark

wkxu 发表于 2009-11-3 00:42:32

mark

penguin 发表于 2009-11-3 23:47:42

围观一下

dingwei 发表于 2009-11-4 04:12:32

18B20记号

lizhihuanok 发表于 2009-11-10 08:57:08

mark

xiaoluo2009 发表于 2009-11-20 16:00:20

好东西,我刚好也在调试18b20

chenchen1103 发表于 2009-11-23 02:06:05

mark

dingwei 发表于 2009-11-23 13:49:06

18b20
CRC校验函数
记号

chen0610 发表于 2009-11-29 09:49:54

请问各位能精确到0.1摄氏度吗??

ainet 发表于 2009-12-8 18:56:48

ds18b20 的精度为0.5度,不能到0.1度

kangkang 发表于 2009-12-10 16:49:40

顶一下!

icevel 发表于 2009-12-10 23:30:09

支持个!mark

allenjwb 发表于 2009-12-11 07:13:03

mark

fuanzwg 发表于 2009-12-11 07:18:37

mark

sonyex678 发表于 2009-12-11 10:49:08

mark~~

yanwuxu 发表于 2009-12-11 11:13:38

【10楼】 btpig
积分:101
派别:
等级:------
来自:
很菜的问一句,用示波器怎么调延时。。谢谢

调用你自己的延时程序使某个端口输出高低电平,然后用示波器测试就好了!

fengye2009 发表于 2009-12-12 20:58:58

mark

up2dream 发表于 2010-1-15 14:20:28

MARK

smartzou 发表于 2010-1-15 17:51:39

mark

beer 发表于 2010-1-21 20:34:26

mark

stevencao 发表于 2010-1-21 21:52:33

mark

luojiyin 发表于 2010-3-6 21:38:20

mark

huang137 发表于 2010-3-7 11:56:44

关于18B20我也来谈点体会,从51开始就接触18B20,也用18B20做过一些关于温度检测的产品,总的来说18B20使用比较方便,2-3条线解决硬件连接,节省单片机引脚之源,内部转换温度值,节省单片机内部或外部之源,但是18B20有个致命的弱点,就是温度转换时间过长,从大家写的程序来看,一般发出转换指令后,延时等待转换完成,在去读取温度值,这样的做法无疑浪费单片机处理事件的时间,而且如果说每秒要刷新一次温度的话,单片机基本没什么时间在去处理其它事件,关于这部分的程序上的改进大家可以考虑定时器中断,外部循环只发出转换指令,发出转换指令后,把定时器中断打开,设置时间为转换时间,并把外部循环发转换温度指令关闭,在去处理其它事件,中断产生后,关中断防止连续中断,发读温度值,读回温度值后,在开放外部循环的发转换温度指令,这样做的目的是大大节省单片机对18B20操作所需要的时间,对于整个操作不影响程序其它事件的处理,尤其对扫描方式下的显示过程不会出现显示停止现象。
   在就是,18B20在网上基本99%的都是跳过ROM,很少有匹配ROM的文章,所以我觉得谈论18B20的ROM以外的过程实在是没有什么意义了,18B20可以值得讨论的地方估计就是匹配ROM这块了

sodohe 发表于 2010-3-7 16:27:14

好,18B20的时序的确很烦人,谢谢LZ的资料,这回要好好学习一下了

xunke 发表于 2010-3-7 16:52:47

回复【楼主位】hhrfjz ---
-----------------------------------------------------------------------
我的18B20比实际的高出约2度,不知问题在那?

CAI2010 发表于 2010-3-13 18:45:46

我的也是8M晶振,为什么看不到显示呢?

xinjie1023 发表于 2010-3-17 16:07:36

好东东

electricit 发表于 2010-4-18 01:26:56

果然厉害呀

RF2010 发表于 2010-4-18 10:49:28

NRF24L01无线数传模块(13RMB为人民服务)
http://item.taobao.com/auction/item_detail.htm?item_num_id=5029339086

sangreal 发表于 2010-4-20 20:19:04

好,mark

gdmfq 发表于 2010-4-20 23:01:48

mark

charley 发表于 2010-4-21 08:25:22

mark

hongyancl 发表于 2010-4-21 08:46:46

回复【楼主位】hhrfjz ---
-----------------------------------------------------------------------

ddddd

wangxiaoacc 发表于 2010-4-21 20:28:53

谢谢楼主,请教一下,我用你的头文件。在while(CHECK_IP_1WIRE);这个语句停住了,就是说没有读到这个引脚低电平,我把这句注释了,程序顺利过去了。温度也读出来了。这个语句有必要吗?

thinki 发表于 2010-4-22 00:36:26

MARK

electricit 发表于 2010-4-22 07:44:51

while(CHECK_IP_1WIRE); 我加了个超时处理,防止程序死掉了

wangxiaoacc 发表于 2010-4-22 09:07:46

非要等到这个信号吗?我看了网站上其他程序。有的就用它判断一下初始化是否成功,不成功也继续读温度。

10086RainEr 发表于 2010-4-22 15:37:24

棒棒!

haowei236 发表于 2010-4-22 18:59:34

MARK

yutian_ouravr 发表于 2010-4-22 19:28:42

不错啊,恭喜楼主,顶一个。

yejinbing 发表于 2010-4-26 21:00:13

多谢了

xunpianzhen 发表于 2010-5-8 21:53:38

谢过楼主。参考了。。。太好使了。

522yt 发表于 2010-6-19 21:58:58

谢谢啊,我正在调这个东西!

icefier 发表于 2010-6-19 22:47:34

小顶个

zengyi703 发表于 2010-6-19 23:46:06

mark

wangshaosh 发表于 2010-6-20 18:06:57

~~~

slzzmcu 发表于 2010-6-20 18:16:42

Mark
页: 1 [2] 3
查看完整版本: DS18B20头文件!绝对好使!还使用方便!M16 8M 的!