久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: DS18B20.h LCD1602.h頭文件下載 溫度和液晶 調試ok 可直接調用 [打印本頁]

作者: 51hei學習技術中    時間: 2017-3-16 03:04
標題: DS18B20.h LCD1602.h頭文件下載 溫度和液晶 調試ok 可直接調用

這2個頭文件是自己原創的,函數都已經封裝好了,可以在你的程序中直接調用,現在分享在51黑電子論壇,方便大家.分別實現了溫度讀取和液晶顯示的功能.


DS18B20.h和LCD1602.h頭文件下載:
DS18B20和lcd1602調試好的頭文件.rar (2.36 KB, 下載次數: 131)





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
復制代碼




作者: dzbj    時間: 2017-3-16 09:33
高人 沒看懂 但也要膜拜一下
作者: 520heidian    時間: 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
這是啥意思
作者: 會下蛋的糯米雞    時間: 2019-6-19 20:20
感謝樓主
作者: jemery1030    時間: 2019-7-19 11:42
感謝用心整理,資料很珍貴,謝謝。
作者: Eli_    時間: 2019-10-18 23:27
感謝,沒幣的也可以自己復制代碼寫一個
作者: faridzled    時間: 2019-10-19 18:27
thanks for sharing
作者: lsqtzj    時間: 2020-2-14 16:02
謝謝樓主分享,學習中!!!
作者: create1318    時間: 2020-2-14 18:58
有幫助,感謝
作者: msh521521    時間: 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 ...

缺少函數原型




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品一区av | 91免费福利在线 | 在线看黄免费 | 国产精品777一区二区 | 久久亚洲二区 | 一级片在线视频 | 自拍偷拍小视频 | 亚洲成人精品国产 | 国产成人a亚洲精品 | 成人在线视 | 韩日一区二区三区 | 自拍视频在线观看 | 国产一区不卡 | 成人在线视频免费播放 | 中文字幕一页二页 | 五月天婷婷丁香 | 第四色狠狠 | 国产成人精品免费视频大全最热 | a在线视频| 美女国产 | 日韩a视频 | 久久久观看 | 欧美日韩中文在线 | 成人国产精品久久 | 欧美成人a∨高清免费观看 欧美日韩中 | 日韩欧美一区二区三区免费观看 | 中文字幕亚洲视频 | 亚洲高清在线观看 | 亚洲综合色网站 | 日韩中文字幕av | 午夜精品视频在线观看 | 性高湖久久久久久久久 | 久久久久亚洲精品中文字幕 | 在线观看视频91 | 国产精品爱久久久久久久 | 国产精品福利网站 | 欧洲一区二区三区 | 热久久久 | 国产精品视频免费观看 | 国产小视频在线 | 久久精品伊人 |