找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1798|回复: 0
打印 上一主题 下一主题
收起左侧

单片机温度传感器检测

[复制链接]
跳转到指定楼层
楼主


  1. #include<reg51.h>   
  2. #include<intrins.h>
  3. unsigned char code digit[10]={"0123456789"};   
  4. unsigned char code Str[]={"Test by DS18B20"};  
  5. unsigned char code Error[]={"Error!Check!"};   
  6. unsigned char code Temp[]={"Temp:"};         
  7. unsigned char code Cent[]={"Cent"};            
  8. sbit RS=P2^0;        
  9. sbit RW=P2^1;         
  10. sbit E=P2^2;         
  11. sbit BF=P0^7;        
  12. void delay1ms()
  13. {
  14.    unsigned char i,j;        
  15.          for(i=0;i<10;i++)
  16.           for(j=0;j<33;j++)
  17.            ;                 
  18. }
  19. void delaynms(unsigned char n)
  20. {
  21.    unsigned char i;
  22.         for(i=0;i<n;i++)
  23.            delay1ms();
  24. }
  25. bit BusyTest(void)
  26.   {
  27.     bit result;
  28.         RS=0;      
  29.     RW=1;
  30.     E=1;      
  31.     _nop_();  
  32.     _nop_();
  33.     _nop_();
  34.     _nop_();  
  35.     result=BF;
  36.    E=0;        
  37.    return result;
  38.   }
  39. void WriteInstruction (unsigned char dictate)
  40. {   
  41.     while(BusyTest()==1);
  42.          RS=0;               
  43.          RW=0;   
  44.          E=0;               

  45.          _nop_();
  46.          _nop_();              
  47.          P0=dictate;         
  48.          _nop_();
  49.          _nop_();
  50.          _nop_();
  51.          _nop_();            
  52.          E=1;                  
  53.          _nop_();
  54.          _nop_();
  55.          _nop_();
  56.          _nop_();              
  57.           E=0;                  
  58. }
  59. void WriteAddress(unsigned char x)
  60. {
  61.      WriteInstruction(x|0x80);
  62. }
  63. void WriteData(unsigned char y)
  64. {
  65.     while(BusyTest()==1);  
  66.           RS=1;         
  67.           RW=0;
  68.           E=0;            
  69.           P0=y;         
  70.           _nop_();
  71.           _nop_();
  72.            _nop_();
  73.      _nop_();      
  74.           E=1;         
  75.           _nop_();
  76.           _nop_();
  77.           _nop_();
  78.          _nop_();      
  79.          E=0;         
  80. }
  81. void LcdInitiate(void)
  82. {
  83.     delaynms(15);              
  84.     WriteInstruction(0x38);     
  85.         delaynms(5);              
  86.     WriteInstruction(0x38);
  87.         delaynms(5);              
  88.         WriteInstruction(0x38);   
  89.         delaynms(5);               
  90.         WriteInstruction(0x0c);   
  91.         delaynms(5);              
  92.         WriteInstruction(0x06);   
  93.         delaynms(5);               
  94.         WriteInstruction(0x01);     
  95.         delaynms(5);         

  96. }

  97. sbit DQ=P1^7;
  98. unsigned char time;  
  99. bit Init_DS18B20(void)        
  100. {
  101. bit flag;      
  102. DQ = 1;        
  103. for(time=0;time<2;time++)

  104. DQ = 0;         
  105. for(time=0;time<200;time++      
  106. DQ = 1;         
  107.   for(time=0;time<10;time++)

  108. flag=DQ;           
  109. for(time=0;time<200;time++)
  110. return (flag);    //·μ»Ø¼ì2a3é1|±êÖ¾
  111. }
  112. unsigned char ReadOneChar(void)
  113. {
  114.                 unsigned char i=0;        
  115.                 unsigned char dat;
  116.                 for (i=0;i<8;i++)
  117.                  {
  118.                   
  119.                    DQ =1;      
  120.                    _nop_();         
  121.                    DQ = 0;     
  122.                         dat>>=1;
  123.                    _nop_();                     
  124.                    DQ = 1;   ¸
  125.                    for(time=0;time<2;time++)

  126.                    if(DQ==1)
  127.                       dat|=0x80;
  128.                         else
  129.                                 dat|=0x00;
  130.                   
  131.                    for(time=0;time<8;time++)
  132.                              
  133.             }                           
  134.          return(dat);   
  135. }

  136. WriteOneChar(unsigned char dat)
  137. {
  138.         unsigned char i=0;
  139.         for (i=0; i<8; i++)
  140.                  {
  141.                   DQ =1;      
  142.                   _nop_();            
  143.                   DQ=0;              
  144.                   DQ=dat&0x01;           
  145.                  for(time=0;time<10;time++)        
  146.                   
  147.                   DQ=1;                  
  148.                   for(time=0;time<1;time++)
  149.                         
  150.                   dat>>=1;   
  151.                  }
  152.           for(time=0;time<4;time++)
  153.                      
  154. }   
  155. void display_error(void)
  156. {
  157.        unsigned char i;
  158.                       WriteAddress(0x00);  
  159.                            i = 0;              
  160.                                 while(Error[i] != '\0')
  161.                                 {                                                
  162.                                         WriteData(Error[i]);
  163.                                         i++;              
  164.                                         delaynms(100);      
  165.                                 }        
  166.                                 while(1)            
  167.                                 
  168. }
  169. void display_explain(void)
  170. {
  171.        unsigned char i;
  172.                       WriteAddress(0x00);  
  173.                            i = 0;              
  174.                                 while(Str[i] != '\0')  
  175.                                 {                                                
  176.                                         WriteData(Str[i]);
  177.                                         i++;              
  178.                                         delaynms(100);        
  179.                                 }        
  180. }  
  181. void display_symbol(void)
  182. {
  183.        unsigned char i;
  184.                       WriteAddress(0x40);  
  185.                            i = 0;              
  186.                                 while(Temp[i] != '\0')  
  187.                                 {                                                
  188.                                         WriteData(Temp[i]);  
  189.                                         i++;              
  190.                                         delaynms(50);        
  191.                                 }        
  192. }
  193. void         display_dot(void)
  194. {         
  195.          WriteAddress(0x49);                    
  196.          WriteData('.');   
  197.          delaynms(50);            
  198. }
  199. void         display_cent(void)
  200. {
  201.            unsigned char i;   
  202.                       WriteAddress(0x4c);               
  203.                            i = 0;                  
  204.                                 while(Cent[i] != '\0')     
  205.                                 {                                       
  206.                                         WriteData(Cent[i]);  
  207.                                         i++;               
  208.                                         delaynms(50);      
  209.                                 }        
  210. }
  211. void display_temp1(unsigned char x)
  212. {
  213. unsigned char j,k,l;   
  214.         j=x/100;            
  215.         k=(x%100)/10;   
  216.         l=x%10;              
  217.         WriteAddress(0x46);  
  218.         WriteData(digit[j]);  
  219.         WriteData(digit[k]);  
  220.         WriteData(digit[l]);   
  221.         delaynms(50);         
  222. }
  223.   void display_temp2(unsigned char x)
  224. {
  225.          WriteAddress(0x4a);   
  226.         WriteData(digit[x]);   
  227.         delaynms(50);        
  228. }
  229. void ReadyReadTemp(void)
  230. {
  231.       Init_DS18B20();  
  232.                 WriteOneChar(0xCC);
  233.                 WriteOneChar(0x44);         
  234.            for(time=0;time<100;time++)
  235.                
  236.                 Init_DS18B20();   
  237.                 WriteOneChar(0xCC);
  238.                 WriteOneChar(0xBE);        
  239. }

  240. void main(void)
  241. {         
  242.           unsigned char TL;     
  243.      unsigned char TH;   
  244.      unsigned char TN;      
  245.           unsigned char TD;      
  246.           LcdInitiate();         
  247.            delaynms(5);               
  248.                 if(Init_DS18B20()==1)
  249.             display_error();
  250.                 display_explain();
  251.            display_symbol();  
  252.       display_dot();      
  253.       display_cent();      
  254.    while(1)              
  255.          {        
  256.                 ReadyReadTemp();    ¸
  257.            TL=ReadOneChar();  
  258.                 TH=ReadOneChar();
  259.                 TN=TH*16+TL/16;   
  260.                                        
  261.            TD=(TL%16)*10/16;  
  262.                                  
  263.            display_temp1(TN);   
  264.            display_temp2(TD);  
  265.       delaynms(10);               
  266.     }        
  267.                           
  268. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表