您当前的位置:五五电子网电子知识单片机-工控设备51单片机存储器功能的数字温度计-DS1624技术应用与原理分析 正文
存储器功能的数字温度计-DS1624技术应用与原理分析

存储器功能的数字温度计-DS1624技术应用与原理分析

点击数:7888 次   录入时间:03-04 11:36:41   整理:http://www.55dianzi.com   51单片机

表6 主机对DS1624读操作通信格式

2. 实验任务
 
用一片DS1624完成本地数字温度的测量,并通过8位数码管显示出测量的温度值。其硬件电路图如图4.34.4所示
3.电路原理图
带有存储器功能的数字温度计-DS1624技术应用
                     图4.34.4
4.系统板上硬件连线
(1).把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“动态数码显示”区域中的ABCDEFGH端子上。
(2).把“单片机系统”区域中的P2.0-P2.7用8芯排线连接到“动态数码显示”区域中的S1S2S3S4S5S6S7S8端子上。
(3).把DS1624芯片插入到“二线总线模块”区域中的8脚集成座上,注意芯片不插反。
(4).把“二线总线模块”区域中的PIN1 PIN2分别用导线连接到“单片机系统”区域中的P1.6和P1.7端子上。
(5).把“二线总线模块”区域中的PIN4 PIN5 PIN6分别用导线连接到“电源模块”区域中的GND端子上。
5.程序设计内容
(1)由于DS1624是I2C总线结构的串行数据传送,它只需要SDA和SCL两根线完成数据的传送过程。因此,我们在进行程序设计的时候,也得按着I2C协议来对DS1624芯片数据访问。有关I2C协议参看有关资料,这里不详述。对于AT89S51单片机本身没有I2C硬件资源,所以必须用软件来模拟I2C协议过程。
(2)要从DS1624中读取温度值,首先启动DS1624的内部温度A/D开始转换,对应着有相应的命令用来启动开始温度转换,有关DS1624的指令集参考前面的叙述。一般情况下,DS1624经过一次温度的变换,需要经过1秒钟左右的时间,所以等待1秒钟后,即可读取内部的温度值,对于读取的温度值,仍然通过DS1624的指令集来完成温度的读取。但所有有数据的传送过程必须遵循I2C协议。
6.C语言源程序
#include
#include
unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,
                                 0xef,0xdf,0xbf,0x7f};
unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,
                                    0x66,0x6d,0x7d,0x07,
                                    0x7f,0x6f,0x77,0x7c,
                                    0x39,0x5e,0x79,0x71,0x00};
unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,
                                25,28,31,34,38,41,44,48,
                                50,53,56,59,63,66,69,72,
                                75,78,81,84,88,91,94,97};
sbit SDA=P1^6;
sbit SCL=P1^7;
unsigned char displaybuffer[8]={0,1,2,3,4,5,6,7};
unsigned char eepromdata[8];
unsigned char temperdata[2];
unsigned char timecount;
unsigned char displaycount;
bit secondflag=0;
unsigned char secondcount=0;
unsigned char retn;
unsigned int result;
unsigned char x;
unsigned int k;
unsigned int ks;

void delay(void);
void delay10ms(void);
void i_start(void);
void i_stop(void);
void i_init(void);
void i_ack(void);
bit i_cLOCk(void);
bit i_send(unsigned char i_data);
unsigned char i_receive(void);

bit start_temperature_T(void);
bit read_temperature_T(unsigned char *p);

void delay(void)
{
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  _nop_();
}

void delay10ms(void)
{
  unsigned int i;
  for(i=0;i<1000;i++)
    {
      delay();
    }
}
void i_start(void)
{
  SCL=1;
  delay();
  SDA=0;
  delay();
  SCL=0;
  delay();
}
void i_stop(void)
{
  SDA=0;
  delay();
  SCL=1;
  delay();
  SDA=1;
  delay();
  SCL=0;
  delay();
}
void i_init(void)
{
  SCL=0;
  i_stop();
}
void i_ack(void)
{
  SDA=0;
  i_clock();
  SDA=1;
}
bit i_clock(void)
{
  bit sample;
  SCL=1;
  delay();
  sample=SDA;
  _nop_();
  _nop_();
  SCL=0;
  delay();
  return(sample);
}
bit i_send(unsigned char i_data)
{
  unsigned char i;
  for(i=0;i<8;i++)
    {
      SDA=(bit)(i_data & 0x80);
      i_data=i_data<<1;
      i_clock();
    }
  SDA=1;
  return(~i_clock());
}
unsigned char i_receive(void)
{
  unsigned char i_data=0;
  unsigned char i;
  for(i=0;i<8;i++)
    {
      i_data*=2;
      if(i_clock()) i_data++;
    }
  return(i_data);
}
bit start_temperature_T(void)
{
  i_start();
  if(i_send(0x90))
    {
      if(i_send(0xee))
        {
          i_stop();
          delay();
          return(1);
        }
        else
          {
            i_stop();
            delay();
            return(0);
          }

上一页  [1] [2] [3] [4]  下一页


本文关键字:技术  存储器  数字温度计  51单片机单片机-工控设备 - 51单片机