4715|7

2641

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

分享今天的收获,8962接18B20 [复制链接]

代码如下,经调试运行稳定(显示稳定和空调的显示稳定一致 ),特别提醒必须加上拉电阻,我就是在这个问题上耽搁了2个小时:

#include "inc/hw_types.h"
#include "18b20.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "inc/hw_memmap.h"

//#define  LCD_CTL_PERIPH  SYSCTL_PERIPH_GPIOB       //定义控制管脚
#define  LCD_CTL_PORT    GPIO_PORTB_BASE
#define  DQ_PIN          GPIO_PIN_3           //
#define  DQ_0            GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_3,0x00)
#define  DQ_1            GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_3,0XFF)
#define  DQ_OUT          GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE,GPIO_PIN_3);
#define  DQ_IN           GPIOPinTypeGPIOInput(GPIO_PORTB_BASE,GPIO_PIN_3);
char presence,flag;

//延时函数
void us_delay(unsigned int num)
{
  while( --num );
}

////初始化ds1820
char Init_DS18B20(void)
{
     tBoolean dat; //定义位变量
     DQ_OUT;     //重设为输出
     DQ_1;       
     us_delay(50);   
     DQ_0;
     us_delay(2000);
     DQ_1;
     us_delay(50);
     DQ_IN;       //设置DQ为输入状态
     dat=GPIOPinRead(LCD_CTL_PORT,DQ_PIN);  //读取DQ口状态值
     if(dat) 
        presence = 1;                                            //如果=0则初始化成功 =1则初始化失败
     else 
        presence = 0;                                             //如果=0则初始化成功 =1则初始化失败
     us_delay(1000);
     DQ_OUT;     //重设为输出
     DQ_1;                                                                   //写1
     return(presence); //返回信号,0=presence,1= no presence
}

//读一个字节
unsigned char ReadOneChar(void)
{
unsigned char i = 0;
unsigned char dat = 0,ss;
for (i = 8; i > 0; i--)
  {
    DQ_0;//DQ写0
    dat >>= 1;//右移一位数
    DQ_1;
    DQ_IN;   //设置为输入//DQ设置为输入
    ss=GPIOPinRead(LCD_CTL_PORT,DQ_PIN);//读取DQ值
    if(ss)                        //假如读取值为高,这dat些1
      dat |= 0x80;
    us_delay(100);
    DQ_OUT;//重设为输出
    DQ_1;   //写1
  }
  return (dat);//返回dat
}

//写一个字节
WriteOneChar(char dat)//写一个字节
{
  unsigned char i = 0,tem;
  for (i = 8; i > 0; i--)
  {
    DQ_0;
    tem= dat&0x01;//取最低位
    if(tem)//如果为1,这写DQ为1,否则为0
      DQ_1;
    else
      DQ_0;
    us_delay(100);
    DQ_1;
    dat>>=1;
  }
}

float Read_Temperature(void)
{
   unsigned char temp_data[2];
   unsigned short temp;
   Init_DS18B20();
   if(1==presence)      
   {
     flag=0x01;
   }
   else
   {
     flag=0x00;
     WriteOneChar(0xCC);  // 跳过读序号列号的操作
     WriteOneChar(0x44);  // 启动温度转换
     us_delay(600);
     Init_DS18B20();                       //再次初始化18b20
     WriteOneChar(0xCC);  //跳过读序号列号的操作
     WriteOneChar(0xBE);  //读取温度寄存器
     temp_data[0]=ReadOneChar();   //温度低8位
     temp_data[1]=ReadOneChar();   //温度高8位
     temp=temp_data[1];
     temp<<=8;
     temp+=temp_data[0];
     if(temp_data[1]&0xf8)
     {
       temp=~temp_data[1]+1;
       temp=-(temp*256+temp_data[0])*0.0625;
     }
     else
       temp=(temp_data[1]*256+temp_data[0])*0.0625;
   }
    return(temp);
}

最新回复

谢谢分享  详情 回复 发表于 2011-1-28 09:08
 
点赞 关注

回复
举报

2804

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
手下了,过几天用我的板子试一下!~
 
个人签名QQ:1625345502
 

回复

545

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
谢谢分享
 
 
 

回复

5015

帖子

12

TA的资源

裸片初长成(初级)

4
 
哈哈,大哥把驱动写好了,我偷走了哈
 
 
 

回复

918

帖子

0

TA的资源

纯净的硅(中级)

5
 

回复 楼主 fengzhang2002 的帖子

顶!
 
 
 

回复

15

帖子

1

TA的资源

一粒金砂(初级)

6
 
用的是什么LCD,还没想明白LCD的驱动怎么搞,有的话给分享一下。
 
 
 

回复

327

帖子

0

TA的资源

纯净的硅(高级)

7
 

多谢分享!18B20的确很准...

不知道是分享还是误导,我也说一下18B20吧。读一个字节的时隙总是找不准,于是我就每间隔1微秒读一次,连续读四次。这四次的值取逻辑与(任何一次读时被18B20拉低则低,否则为高)的结果作为最后结果,读数就稳定了。代码是这样的(CortexM0滴):

uint8_t ds18b20Read(void){
    uint32_t i, ret = 0;
    uint8_t a,b,c,d;
    for(i = 0; i < 8; i ++){
        GPIOSetDir(3, 0, 1);
        GPIOSetValue(3, 0, 0);
        sleepUs(1);
        GPIOSetValue(3, 0, 1);
        GPIOSetDir(3, 0, 0);
        sleepUs(1);
        a = GPIOGetValue(3, 0);
        sleepUs(1);
        b = GPIOGetValue(3, 0);
        sleepUs(1);
        c = GPIOGetValue(3, 0);
        sleepUs(1);
        d = GPIOGetValue(3, 0);
        if(a & b & c & d){
            ret |= 0x100;
        }
        sleepUs(40);
        ret = ret >> 1;
    }
    return ret;
}

[ 本帖最后由 elulis 于 2011-1-25 20:02 编辑 ]
 
个人签名Python全文搜索引擎:<url>http://code.google.com/p/ming-search/</url>
 
 

回复

349

帖子

0

TA的资源

一粒金砂(中级)

8
 
谢谢分享
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表