MCU - ds18b20 - Code

Publisher:雅致人生Latest update time:2018-06-25 Source: eefocusKeywords:MCU  ds18b20 Reading articles on mobile phones Scan QR code
Read articles on your mobile phone anytime, anywhere
  1. #include     

  2. #include "../delay/delay.h"    

  3. #include "lcd.h"    

  4.     

  5. /*====================================================   

  6.                  Determine write command/data function   

  7. =====================================================*/    

  8. void lcd_write(unsigned char byte, unsigned char flag)    

  9. {    

  10.     if(flag)    

  11.     {    

  12.         RS = 1; //Select data register    

  13.     }    

  14.     else    

  15.     {    

  16.         RS = 0; //Select instruction register    

  17.     }    

  18.         

  19.     RW = 0; //write    

  20.     E = 1; //Select LCD    

  21.     LCDPORT = byte;    

  22.     delay_us(5); //stable    

  23.     E = 0; //Disable LCD    

  24. }    

  25.     

  26. /*====================================================   

  27.                     LCD initialization function   

  28. =====================================================*/    

  29. void lcd_init()    

  30. {    

  31.     delay_ms(15);    

  32.     lcd_write(0x38,LCD_WRITE_COM); //Display 8-bit data interface, two-line display, 5*7 dot matrix characters    

  33.     delay_ms(5);    

  34.     lcd_write(0x38,LCD_WRITE_COM);    

  35.     delay_ms(5);    

  36.     lcd_write(0x38,LCD_WRITE_COM);    

  37.     delay_ms(5);    

  38.     lcd_write(0x38,LCD_WRITE_COM);    

  39.     delay_ms(5);    

  40.     lcd_write(0x08,LCD_WRITE_COM); //Turn off the display and the blinking of the cursor    

  41.     delay_ms(5);    

  42.     lcd_write(0x01,LCD_WRITE_COM);    //清屏    

  43.     delay_ms(5);    

  44.     lcd_write(0x06,LCD_WRITE_COM); //Set the pointer mode, the picture does not shift    

  45.     delay_ms(5);    

  46.     lcd_write(0x0c,LCD_WRITE_COM); //Turn on the display    

  47.     delay_ms(5);    

  48. }    

  49.     

  50. /*====================================================================================   

  51.                                  Write character function   

  52. 函数原型:void lcd_dis_byte(unsigned char x, unsigned char y, unsigned char byte);   

  53. Note: x is the row (1-2), y is the column (1-8).   

  54. =====================================================================================*/    

  55. void lcd_dis_byte(unsigned char x, unsigned char y, unsigned char byte)    

  56. {    

  57.     unsigned char add;    

  58.         

  59.     if(((0 == x) || (x > 2)) || ((0 == y) || (y > 16)))    

  60.     {    

  61.         return ;    

  62.     }    

  63.         

  64.     add = 0x80 + (x - 1) * 0x40 + (y - 1);    

  65.         

  66.     lcd_write(add,LCD_WRITE_COM);            

  67.     lcd_write(byte,LCD_WRITE_DATA);    

  68. }    

  69.     

  70. /*====================================================================================   

  71.                                   Write String Function   

  72. Function prototype: void lcd_dis_str(unsigned char x, unsigned char y, unsigned char *disdata);   

  73. Note: x is the row (1-2), y is the column (1-8).   

  74. =====================================================================================*/    

  75. void lcd_dis_str(unsigned char x, unsigned char y, unsigned charchar *disdata)    

  76. {    

  77.     unsigned char add;    

  78.         

  79.     if(((0 == x) || (x > 2)) || ((0 == y) || (y > 16)))    

  80.     {    

  81.         return ;    

  82.     }    

  83.         

  84.     add = 0x80 + (x - 1) * 0x40 + (y - 1);    

  85.     lcd_write(add,LCD_WRITE_COM);    

  86.         

  87.     while(*disdata != '\0')    

  88.     {           

  89.         lcd_write(*disdata,LCD_WRITE_DATA);    

  90.         disdata++;    

  91.     }    

  92. }    

  93.     

  94. #if 0    

  95. /*===========================================================================   

  96.                                 Time display function   

  97. ============================================================================*/    

  98. void lcd_dis_time()    

  99. {    

  100.     lcd_write(0x80 + 4,LCD_WRITE_COM);    

  101.     lcd_write((hour / 10) + 0x30,LCD_WRITE_DATA);    

  102.     lcd_write((hour % 10) + 0x30,LCD_WRITE_DATA);    

  103.     lcd_write((min / 10) + 0x30,LCD_WRITE_DATA);    

  104.     lcd_write((min % 10) + 0x30,LCD_WRITE_DATA);    

  105.     lcd_write((sec / 10) + 0x30,LCD_WRITE_DATA);    

  106.     lcd_write((sec % 10) + 0x30,LCD_WRITE_DATA);    

  107. }    

  108. #endif    

  109.   

  110. ds18b20.c  

  111.   

  112. [objc] view plain copy View the code snippet derived from my code snippet on CODE  

  113. #include     

  114. #include     

  115. #include     

  116. #include "./lcd/lcd.h"    

  117. #include "./delay/delay.h"    

  118.     

  119. sbit ds = P1^0;    

  120.     

  121. bit ack = 0;    

  122.     

  123. /*=================================================================   

  124.                             Reset DS18B20   

  125. ==================================================================*/    

  126. void ds_reset()    

  127. {    

  128.     ds = 1;    

  129.     ds = 0;    

  130.     delay_us(200);    

  131.     delay_us(100);        //480-960us,800us    

  132.     ds = 1;               //free ds    

  133.     delay_us(30);    

  134.     if(0 == ds)    

  135.     {    

  136.         ack = 1;    

  137.     }    

  138.     else    

  139.     {    

  140.         ack = 0;    

  141.     }    

  142.         

  143.     delay_us(200);    

  144.     delay_us(100);    

  145. }    

  146.     

  147. /*=================================================================   

  148.                        Write a byte to the DS18B20   

  149. ==================================================================*/    

  150. void ds_send_byte(unsigned char byte)    

  151. {    

  152.     unsigned char i;    

  153.         

  154.     for(i = 0; i < 8; i++)    

  155.     {    

  156.         ds = 0;    

  157.             

  158.         _nop_();    

  159.         _nop_();    

  160.             

  161.         ds = byte & 0x01;    

  162.         byte >>= 1;    

  163.             

  164.         delay_us(30);    

  165.             

  166.         ds = 1;    

  167.     }    

  168.         

  169.     delay_us(30);    

  170. }    

  171.     

  172. bit ds_read_bit()    

  173. {    

  174.     bit temp;    

  175.         

  176.     ds = 1;    

  177.     ds = 0;    

  178.         

  179.     _nop_();    

  180.     _nop_();    

  181.         

  182.     ds = 1;    

  183.     temp = ds;    

  184.     delay_us(30);    

  185.         

  186.     return temp;    

  187. }    

  188.     

  189. unsigned char ds_read_byte()    

  190. {    

  191.     unsigned char i;    

  192.     unsigned char j;    

  193.     unsigned char k;    

  194.         

  195.     for(i = 0; i < 8; i++)    

  196.     {    

  197.         j = ds_read_bit();    

  198.         k = (j << 7) | (k >> 1);    

  199.     }    

  200.         

  201.     return k;    

  202. }    

  203.     

  204. void main()    

  205. {    

  206.     unsigned char a;    

  207.     unsigned char disbuf[20];    

  208.     

  209.     unsigned int temp;      

  210.     unsigned int b;     

  211.         

  212.     float temperature;    

  213.         

  214.     lcd_init();    

  215.         

  216.     while(1)    

  217.     {    

  218.         ds_reset();    

  219.         ds_send_byte(0xcc);    

  220.         ds_send_byte(0x44);    

  221.             

  222.         ds_reset();    

  223.         ds_send_byte(0xcc);    

  224.         ds_send_byte(0xbe);    

  225.             

  226.         a = ds_read_byte();    

  227.         b = ds_read_byte();    

  228.         

  229.         temp = (b << 8) | a;    

  230.         temperature = (float)temp * 0.0625;    

  231.     

  232.         sprintf(disbuf,"Temp is %7.3f",temperature);    

  233.         lcd_dis_str(1,1,disbuf);            

  234.     }    

  235. }    


Keywords:MCU  ds18b20 Reference address:MCU - ds18b20 - Code

Previous article:51 single chip microcomputer controls LCD1602 module
Next article:Microcontroller - infrared remote control - code

Latest Microcontroller Articles
Change More Related Popular Components

EEWorld
subscription
account

EEWorld
service
account

Automotive
development
circle

About Us Customer Service Contact Information Datasheet Sitemap LatestNews


Room 1530, 15th Floor, Building B, No.18 Zhongguancun Street, Haidian District, Beijing, Postal Code: 100190 China Telephone: 008610 8235 0740

Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号