找回密码
 立即注册

QQ登录

只需一步,快速开始

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

DS18B20.h LCD1602.h头文件下载 温度和液晶 调试ok 可直接调用

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

这2个头文件是自己原创的,函数都已经封装好了,可以在你的程序中直接调用,现在分享在51黑电子论坛,方便大家.分别实现了温度读取和液晶显示的功能.


DS18B20.h和LCD1602.h头文件下载:
DS18B20和lcd1602调试好的头文件.rar (2.36 KB, 下载次数: 130)





DS18B20.h头文件内容预览:
  1. /*DS18B20驱动程序*/
  2. //作者:詹磊                                                                                                                                  
  3. //功能:驱动DS18B20单总线温度计芯片,从中读出当前温度计所处温度,
  4. //      测量范围:-55~+125度;分辨率为0.1度(100度以下);
  5. //注意:本驱动不含CRC检测,所以不能一线挂多个器件,也不带温度报警,在之后的版本中
  6. //      再加吧
  7. //感想:对单总线器件的操作时序非常重要;程序顺序非常关键;由于温度有负数,有小数,
  8. //      所以在数据处理方面也很难控制;单片机资源有限 int float 数据类型最好少用
  9. /*******************************************************************************/
  10. #ifndef __DS18B20_H__
  11. #define __DS18B20_H__
  12. /*******************************************************************************/
  13. #include <intrins.h>
  14. #define uchar unsigned char
  15. #define        uint unsigned int
  16. #define YES  0
  17. #define NO         1
  18. /*******************************************************************************/
  19. //sbit DS18B20_DQ=P1^7;
  20. sbit DS18B20_DQ=P3^7;
  21. /*******************************************************************************/
  22. bit fu_flag;
  23. /*******************************************************************************/
  24. /***************************/
  25. //delay_us(60);延时556us   //
  26. //delay_us(3);延时43us            //
  27. //delay_us(18);延时178us   //
  28. //delay_us(30);延时286us   //
  29. /***************************/
  30. /*******************************************************************************/
  31. bit DS18B20_init()         
  32. {       
  33.         bit n;
  34.         fu_flag=0;
  35.         DS18B20_DQ=1;
  36.         delay_ms(1);                               
  37.         DS18B20_DQ=0;
  38.         delay_us(60);//延时556us
  39.         DS18B20_DQ=1;
  40.         delay_us(3);//延时43us
  41.         n=DS18B20_DQ;
  42.         delay_us(18);//延时178us       
  43.         delay_us(30);//延时286us
  44.         return n;                               
  45. }
  46. /*******************************************************************************/
  47. void W_DS18B20(uchar com)
  48. {
  49.         uchar i;
  50.         DS18B20_DQ=1;
  51.         delay_ms(1);                                       
  52.         for(i=0;i<8;i++)
  53.         {       
  54.                 DS18B20_DQ=0;
  55.                 _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  56.                 DS18B20_DQ=com&0x01;
  57.                 delay_us(3);//延时43us ;3
  58.                 _nop_();
  59.                 _nop_();
  60.                 DS18B20_DQ=1;               
  61.                 _nop_();
  62.                 com>>=1;
  63.         }
  64. }
  65. /*******************************************************************************/
  66. uchar R_DS18B20()
  67. {
  68.         uchar i,dat;
  69.         DS18B20_DQ=1;
  70.         delay_ms(1);
  71.         for(i=0;i<8;i++)
  72.         {
  73.                 DS18B20_DQ=0;
  74.                 _nop_();_nop_();_nop_(); _nop_();_nop_(); _nop_();
  75.                 dat>>=1;//这里位置很关键。最后一次是不需要移位的,所以放在if前
  76.                 DS18B20_DQ=1;
  77.                 _nop_();_nop_(); _nop_();_nop_();
  78.                 if(DS18B20_DQ==1)
  79.                         dat=dat|0x80;               
  80.                 delay_us(3);//延时43us
  81.                 _nop_();
  82.                 _nop_();
  83.                 DS18B20_DQ=1;
  84.         }
  85.         return dat;
  86. }
  87. /*******************************************************************************/
  88. uint R_temp_DS18B20()
  89. {
  90.         uint temp;
  91.         uchar l,h;
  92.         DS18B20_init();
  93.         if(DS18B20_init()==YES)
  94.         {
  95.                 W_DS18B20(0xCC);
  96.                 W_DS18B20(0x44);
  97.                 delay_ms(1);
  98.                 DS18B20_init();
  99.                 W_DS18B20(0xCC);
  100.                 W_DS18B20(0xBE);
  101.                 l=R_DS18B20();
  102.                 h=R_DS18B20();
  103.                 if((h&0xF0)==0xF0)
  104.                 {
  105.                         fu_flag=1;
  106.                         if(l==0)
  107.                         {
  108.                                 l=~l+1;
  109.                                 h=~h+1;
  110.                         }
  111.                         else
  112.                         {
  113.                                 l=~l+1;
  114.                                 h=~h;
  115.                         }
  116.                         temp=h*256+l;
  117.                 }
  118.                 else
  119.                 {
  120.                         temp=h*256+l;
  121.                         fu_flag=0;
  122.                 }
  123.         }
  124.         return temp;
  125. }
  126. /*******************************************************************************/
  127. #endif
  128. /*******************************************************************************/
  129. //                                                                 沐雨迎风设计                                                                   //
  130. //                                                                 2010/04/05                                                                           //
  131. //                                                                                                                                                           //
  132. /*******************************************************************************/
复制代码

LCD1602.h头文件:
  1. /*1602液晶驱动程序*/
  2. //作者:詹磊                                                                                                                                  
  3. //功能:能在1602液晶上显示字符串(字母和阿拉伯数字)、自定义图形(5x7点阵图形)
  4. /*******************************************************************************/
  5. #ifndef __LCD1602_H__
  6. #define __LCD1602_H__
  7. #define        uchar unsigned char
  8. #define uint unsigned int                                                                                                                                  
  9. /*******************************************************************************/
  10. /*sbit RW_LCD=P2^1;
  11. sbit RS_LCD=P2^0;
  12. sbit E_LCD=P2^2;*/
  13. sbit RW_LCD=P2^5;//开发板上对印引脚
  14. sbit RS_LCD=P2^6;
  15. sbit E_LCD=P2^7;
  16. /**********************************字符表***************************************/
  17. uchar bmp_table1[8]=
  18. {
  19.         0x0E,0X1F,0X11,0X11,0X11,0X11,0X1F,0x00,//电池标号:空
  20. //          0          1           2        3          4          5           6        7
  21. };
  22. uchar bmp_table2[8]=
  23. {
  24.         0x0E,0X1F,0X11,0X11,0X11,0X1F,0X1F,0x00,//电池标号:一格
  25. //          0          1           2        3          4          5           6        7
  26. };
  27. uchar bmp_table3[8]=
  28. {
  29.         0x0E,0X1F,0X11,0X11,0X1F,0X1F,0X1F,0x00,//电池标号:两格
  30. //          0          1           2        3          4          5           6        7
  31. };
  32. uchar bmp_table4[8]=
  33. {
  34.         0x0E,0X1F,0X11,0X1F,0X1F,0X1F,0X1F,0x00,//电池标号:三格
  35. //          0          1           2        3          4          5           6        7
  36. };
  37. uchar bmp_table5[8]=
  38. {
  39.         0x0E,0X1F,0X1F,0X1F,0X1F,0X1F,0X1F,0x00//电池标号:四格
  40. //          0          1           2        3          4          5           6        7
  41. };
  42. uchar bmp_table6[8]=
  43. {
  44.         0x04,0X08,0X10,0X1F,0X1F,0X1F,0X1F,0x00//FM标号
  45. //          0          1           2        3          4          5           6        7
  46. };
  47. uchar bmp_table7[8]=
  48. {
  49.         0x10,0X07,0X08,0X08,0X08,0X08,0X07,0x00//温度标号
  50. //          0          1           2        3          4          5           6        7
  51. };
  52. /*******************************************************************************/
  53. void delay_ms(uint z)//毫秒延时函数
  54. {
  55.         uint i,m;
  56.         for(i=z;i>0;i--)
  57.                 for(m=123;m>0;m--);
  58. }
  59. void delay_us(uint time)//微秒延时函数
  60. {
  61.         while(time--);
  62. }
  63. /*******************************************************************************/
  64. uchar R_TEST_LCD()
  65. {
  66.        
  67.         bit i;
  68.         RS_LCD=0;
  69.         RW_LCD=1;
  70.         E_LCD=1;
  71.         delay_us(1);
  72.         i=(bit)(P0&0x80);       
  73.         E_LCD=0;
  74.         RW_LCD=0;
  75.         RS_LCD=1;
  76.         return i;
  77. }
  78. /*******************************************************************************/
  79. void W_CMD_LCD(uchar cmd)
  80. {
  81.         while(R_TEST_LCD());
  82.         RS_LCD=0;
  83.         RW_LCD=0;       
  84.         P0=cmd;
  85.         E_LCD=1;
  86.         E_LCD=0;
  87.         RW_LCD=1;
  88.         RS_LCD=1;
  89. }
  90. /*******************************************************************************/
  91. void W_DAT_LCD(uchar dat)
  92. {
  93.         while(R_TEST_LCD());
  94.         RS_LCD=1;
  95.         RW_LCD=0;
  96.         P0=dat;
  97.         E_LCD=1;
  98.         E_LCD=0;
  99.         RW_LCD=1;
  100.         RS_LCD=0;
  101. }
  102. /*******************************************************************************/
  103. void position(uchar x,uchar y)//x为横坐标;y为纵坐标
  104. {
  105.         if(y==1)
  106.         {
  107.                 W_CMD_LCD(0x7F+x);       
  108.         }
  109.         else
  110.         {
  111.                 W_CMD_LCD(0xBF+x);
  112.         }
  113. }
  114. /*******************************************************************************/
  115. void printf(uchar *dat,uchar x,uchar y)//显示函数;x为横坐标;y为纵坐标
  116. {
  117.         position(x,y);//指定首字位置
  118.         while(*dat>0)//当加到头时,指针指向NULL退出循环
  119.         {       
  120.                 W_DAT_LCD(*dat);//按指针所指的地址取内容,写入LCD寄存器
  121.                 dat++;//指针++
  122.         }
  123. }
  124. /*******************************************************************************/
  125. void printf_Digital(uchar dat,uchar x,uchar y)//dat<99
  126. {
  127.         position(x,y);
  128.         W_DAT_LCD(dat/10+'0');
  129.         W_DAT_LCD(dat%10+'0');
  130. }
  131. /*******************************************************************************/
  132. void W_CGRAM(uchar *dat,uchar n)
  133. {
  134.         uchar i;
  135.         W_CMD_LCD(0x40+n*8);
  136.         for(i=0;i<8;i++)
  137.         {
  138.                 W_DAT_LCD(*dat);//按指针所指的地址取内容,写入CGRAM
  139.                 dat++;//指针++
  140.         }
  141.         dat=0;
  142. }
  143. /*******************************************************************************/
  144. void LCD_init()
  145. {
  146.         delay_ms(15);
  147.         W_CMD_LCD(0x38);
  148.         delay_ms(1);
  149.         W_CMD_LCD(0x08);
  150.         delay_ms(1);
  151.         W_CMD_LCD(0x01);
  152.         delay_ms(1);
  153.         W_CMD_LCD(0x06);
  154.         delay_ms(1);
  155.         W_CMD_LCD(0x0C);
  156.         W_CGRAM(bmp_table1,0);
  157.         W_CGRAM(bmp_table2,1);
  158.         W_CGRAM(bmp_table3,2);
  159.         W_CGRAM(bmp_table4,3);
  160.         W_CGRAM(bmp_table5,4);
  161.         W_CGRAM(bmp_table6,5);
  162.         W_CGRAM(bmp_table7,6);       
  163. }

  164. /*******************************************************************************/
  165. //                                                                沐雨迎风设                                                                           //
  166. //                                                            2012/03/16                                                                           //
  167. /*******************************************************************************/
  168. #endif
复制代码



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

使用道具 举报

沙发
ID:47286 发表于 2017-3-16 09:33 | 只看该作者
高人 没看懂 但也要膜拜一下
回复

使用道具 举报

板凳
ID:503157 发表于 2019-4-17 09:46 | 只看该作者
.\h\DS18B20.h(36): warning C206: 'delay_ms': missing function-prototype
.\h\DS18B20.h(36): error C267: 'delay_ms': requires ANSI-style prototype
这是啥意思
回复

使用道具 举报

地板
ID:567217 发表于 2019-6-19 20:20 | 只看该作者
感谢楼主
回复

使用道具 举报

5#
ID:585455 发表于 2019-7-19 11:42 | 只看该作者
感謝用心整理,資料很珍貴,謝謝。
回复

使用道具 举报

6#
ID:332895 发表于 2019-10-18 23:27 | 只看该作者
感谢,没币的也可以自己复制代码写一个
回复

使用道具 举报

7#
ID:89286 发表于 2019-10-19 18:27 | 只看该作者
thanks for sharing
回复

使用道具 举报

8#
ID:477474 发表于 2020-2-14 16:02 | 只看该作者
谢谢楼主分享,学习中!!!
回复

使用道具 举报

9#
ID:693144 发表于 2020-2-14 18:58 | 只看该作者
有帮助,感谢
回复

使用道具 举报

10#
ID:725393 发表于 2020-4-9 11:08 | 只看该作者
520heidian 发表于 2019-4-17 09:46
.\h\DS18B20.h(36): warning C206: 'delay_ms': missing function-prototype
.\h\DS18B20.h(36): error C2 ...

缺少函数原型
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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