毕业设计2:传感器无线网络
关于STC系列51单片机的EEPROM应用

毕业设计后记

G-one posted @ 2010年6月19日 18:14 in program , 6725 阅读

由于时间加之蛮多烦人的事,好久没上来了,懒了不少呢。毕业设计的网络设计没做成,时间太紧急了,而且这个做起来还是蛮复杂的,最后不得不在这个模型基础上做修改,改成了无线温度收集的小系统

 

电池供电的那个小模块 中间黑色的小东西就是温度传感器 DS18B20 ,单总线数据输出模式

Init_DS18B20(void)//初始化ds1820
{
  
    DQ = 1;      //DQ复位
    delayus(8);    //稍做延时

    DQ = 0;      //单片机将DQ拉低
    delayus(90);  //精确延时 大于 480us

    DQ = 1;      //拉高总线
    delayus(8);

    presence = DQ;    //如果=0则初始化成功 =1则初始化失败
    delayus(100);
    DQ = 1; 
    
    return(presence); //返回信号,0=presence,1= no presence
}


ReadOneChar(void)//读一个字节
{
unsigned char i = 0;
unsigned char dat = 0;

for (i = 8; i > 0; i--)
  {
    DQ = 0;                // 给脉冲信号
    dat >>= 1;
    DQ = 1;                // 给脉冲信号

    if(DQ)
    dat |= 0x80;
    delayus(4);
  }

    return (dat);
}

WriteOneChar(unsigned char dat)//写一个字节
{
  unsigned char i = 0;
  for (i = 8; i > 0; i--)
  {
    DQ = 0;
    DQ = dat&0x01;
    delayus(5);

    DQ = 1;
    dat>>=1;
  }
}


Read_Temperature(void)//读取温度
{
  Init_DS18B20();
  if(presence!=1)         
  {
   
    WriteOneChar(0xCC);  // 跳过读序号列号的操作
    WriteOneChar(0x44);  // 启动温度转换

    Init_DS18B20();
    WriteOneChar(0xCC);  //跳过读序号列号的操作
    WriteOneChar(0xBE);  //读取温度寄存器

    NUM[0]= ReadOneChar();  //温度低8位
    NUM[1] = ReadOneChar();  //温度高8位 
  }
}

给出 DS18B20的 读写代码,若是单总线上有多个传感器那么读取温度里的 就不能跳过读取序列号操作了,毕竟要区分开数据是那个传感器的嘛,这里要说明一下的是DS18B20 每一个出场的ID号都不会一样的

毕业设计也不多说了,只讲到这里。下一篇讲一讲我最近做的一个小项目

Avatar_small
pingf 说:
2011年3月11日 13:46

跟我当年的毕设有些类似,不过我那个没整网络,而是多加了语音报警模块,
传感器你这个有点忒老了,我当时用的sht的,温湿度一体的...
顺带还用洞洞板纯手工打造了开发版和仿真器.....

Avatar_small
G-one 说:
2011年4月08日 21:46

我这都得自己出资啊~~~ 尽量容易找到,尽量便宜,我们都没仿真器......


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter