www88988

    1. DS18B20怎样使用? 22/9796 51单片机 2017-01-20
      delay_us()我没有给出来,因为每个人用的晶振不一样,那么time的数组设置不一样。 无非就是延时用 while 和 for 都行。
    2. DS18B20怎样使用? 22/9796 51单片机 2017-01-20
      对于新手要多点耐心,我们也是由不懂学习来的。 先说电路:https://bbs.eeworld.com.cn/forum.php?mod=image&aid=280105&size=300x300&key=500780667f61ba24&nocache=yes&type=fixnone 3---VCC 1---GND 2---数据线(要加上拉电阻) 再说程序 sbit DQ=P1^7; //单片机P1.7接数据口 unsigned char time;   //设置全局变量,专门用于严格延时 //函数功能:将DS18B20传感器初始化 Init_DS18B20(void) {   DQ = 1;           //先将数据线拉高   delay_us(6); //略微延时约6微秒   DQ = 0;           //再将数据线从高拉低,要求保持480~960us   delay_us(600); //略微延时约600微秒,以向DS18B20发出一持续480~960us的低电平复位脉冲   DQ = 1;              //释放数据线(将数据线拉高)   delay_us(30);//延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)      delay_us(200); } //从DS18B20读取一个字节数据 unsigned char ReadOneChar(void) {    unsigned char i=0;    unsigned char dat; //储存读出的一个字节数据    for (i=0;i>=1;      _nop_();     //等待一个机器周期           DQ = 1;     //将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备     delay_us(6); //延时约6us,使主机在15us内采样      if(DQ==1)         dat|=0x80; //如果读到的数据是1,则将1存入dat     else      dat|=0x00;//如果读到的数据是0,则将0存入dat        //将单片机检测到的电平信号DQ存入r     delay_us(3);  //延时3us,两个读时序之间必须有大于1us的恢复期      }                      return(dat);    //返回读出的十进制数据 } //向DS18B20写入一个字节数据 WriteOneChar(unsigned char dat) { unsigned char i=0; for (i=0; i>=1;       //将dat中的各二进制位数据右移1位    }    delay_us(5); //稍作延时,给硬件一点反应时间 } // 读温度 void ReadTemperature(unsigned char *p) { unsigned char tempL=0; unsigned char tempH=0; unsigned int sdate;//测量到的温度的整数部分 unsigned char xiaoshu1;//小数第一位 unsigned char xiaoshu2;//小数第二位 unsigned char xiaoshu;//两位小数 bit  fg=1;        //温度正负标志    Init_DS18B20();     //将DS18B20初始化    WriteOneChar(0xCC); // 跳过读序号列号的操作    WriteOneChar(0x44); // 启动温度转换       delay_us(500); //温度转换需要一点时间    Init_DS18B20();     //将DS18B20初始化    WriteOneChar(0xCC); //跳过读序号列号的操作    WriteOneChar(0xBE); //读取温度寄存器,前两个分别是温度的低位和高位    tempL=ReadOneChar(); //读出温度的低位LSB    tempH=ReadOneChar(); //读出温度的高位MSB    if(tempH>0x7f)      //最高位为1时温度是负                 {                  tempL=~tempL;         //补码转换,取反加一                  tempH=~tempH+1;                        fg=0;      //读取温度为负时fg=0          }         sdate = tempL/16+tempH*16;      //整数部分         xiaoshu1 = (tempL&0x0f)*10/16; //小数第一位         xiaoshu2 = (tempL&0x0f)*100/16%10;//小数第二位         xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位         if(fg==0) *p=1;         else *p=0;         *(p+1) =  sdate/10;         *(p+2) =  sdate%10;         *(p+3) =  xiaoshu1;         *(p+4) =  xiaoshu2; } 应用 unsigned char arTemperature[5]; void main(void) {       ......      ReadTemperature(arTemperature);      ...... } 那么在数组arTemperature中就是温度。 第一个元素是 正负温度,00是零上,01 是零下 第二、三个元素是温度的整数部分2位 二是十位 三是个位 第四、五个元素是温度的小数部分2位 如: 00  02  06  08  03    就是零上 26.83度。 后期数据处理自己看着办就行了。

最近访客

< 1/1 >

统计信息

已有2人来访过

  • 芯积分:--
  • 好友:--
  • 主题:--
  • 回复:2

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言