CC2430驱动DS18B20的问题(续)

  1. 第二篇http://read.pudn.com/downloads126/sourcecode/embed/536317/DS18B20%E7%9A%84C51%E7%A8%8B%E5%BA%8F.C__.htm
  2.  
  3.  
  4. *DQ为数据口,接于P3.4  
  5. /*18b20采用三线接法,上拉5.1k电阻*/   
  6. /*晶体:11.0592M*/   
  7. #include<reg52.h>   
  8. #include<intrins.h>   
  9. #define uchar unsigned char   
  10. #define uint  unsigned int   
  11. uchar  table[10]={0xfd,0x05,0x3e,0x7a,0x63,0x5b,0x5f,0x70,0x7f,0x7b};//一位数码管   
  12. sbit dq= P3^4;   
  13. bit  flag;   
  14. uint temp;   
  15. void init_18b20 (void);   
  16. uint  read_word (void);   
  17. void write (uchar wr);   
  18. void get_temp (void);   
  19. void delay (uint us);   
  20. display_temp(uint temp1);   
  21. void delay1(uint t);   
  22. main ()   
  23. {  /*P1=0x63;  
  24. while(1);  */   
  25.    TMOD=0x20;   
  26.    PCON=0x00;   
  27.    TH1=0xfd;TL1=0xfd;   
  28.    TR1=1;   
  29.    SCON=0x50;   
  30.    EA=1;   
  31.    dq=0;   
  32.   _nop_();   
  33.   dq=1;   
  34.   init_18b20();   
  35.   get_temp();   
  36.   temp=temp;   
  37.   while(1){get_temp();display_temp(temp);   
  38.     SBUF=temp;   
  39.      while(TI==0);TI=0;}   
  40. }   
  41. void init_18b20 (void)   
  42. {  dq=1;   
  43.   _nop_();   
  44.   dq=0;   
  45.   delay(90);            //delay 530 uS   
  46.   dq=1;   
  47.   delay(6);            //delay 100 uS   
  48.   if(dq==0)   
  49.      flag=1;            //detect 1820 success!   
  50.   else   
  51.      flag=0;             //detect 1820 fail!   
  52.   delay(20);   
  53.   dq=1;   
  54. }   
  55. //   
  56. void write (uchar wr)   
  57. {   
  58.   uchar i;   
  59.   for (i=0;i<8;i++)   
  60.    {   
  61.      dq=0;   
  62.      _nop_();   
  63.      dq=wr&0x01;   
  64.      delay(5);            //delay 45 uS   
  65.      dq=1;   
  66.      wr>>=1;   
  67.    }   
  68. }   
  69. //   
  70. uint read_word (void)   
  71. {   
  72.   uchar i;   
  73.   uint u=0;   
  74.   for(i=0;i<16;i++)   
  75.    {   
  76.      dq=0;   
  77.      u>>=1;   
  78.      dq=1;   
  79.      if(dq==1)   
  80.         u|=0x8000;   
  81.      delay (4);   
  82.    }   
  83.   return(u);   
  84. }   
  85.    
  86. void get_temp (void)   
  87. {   
  88.   uint bdata tem;   
  89.   init_18b20();   
  90.   if (flag)   
  91.    { write (0xcc);            //skip rom   
  92.      write (0x44);            //temp convert   
  93.      init_18b20 ();   
  94.      write (0xcc);            //skip rom   
  95.      write (0xbe);            //read temp   
  96.      tem=read_word();            //read   
  97.      if(tem<0x8000)   
  98.        temp=tem*0.0625;            //temperature>=0   
  99.      else   
  100.        temp=tem*(-0.0625);         //temperature< 0   
  101.      }   
  102.  }   
  103. void delay (uint us)   
  104. {   
  105.   while (us--);   
  106. }   
  107. void delay1(uint t) /*****************************************延时函数*************************************/   
  108. { uint i,j;   
  109.   for(i=0;i<=t;i++) {   
  110.     for(j=0;j<=200;j++);}   
  111. }   
  112. display_temp(uchar temp1)  //显示温度   
  113. {uchar t1,t2;   
  114. t1=temp1/10;   
  115. t2=temp1%10;   
  116. P1=table[t1];   
  117. delay1(500);   
  118. P1=table[t2];   
  119. delay1(500);   
  120. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值