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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6998|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

DS18B20.h LCD1602.h頭文件下載 溫度和液晶 調(diào)試ok 可直接調(diào)用

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:140725 發(fā)表于 2017-3-16 03:04 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

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


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





DS18B20.h頭文件內(nèi)容預(yù)覽:
  1. /*DS18B20驅(qū)動程序*/
  2. //作者:詹磊                                                                                                                                  
  3. //功能:驅(qū)動DS18B20單總線溫度計芯片,從中讀出當(dāng)前溫度計所處溫度,
  4. //      測量范圍:-55~+125度;分辨率為0.1度(100度以下);
  5. //注意:本驅(qū)動不含CRC檢測,所以不能一線掛多個器件,也不帶溫度報警,在之后的版本中
  6. //      再加吧
  7. //感想:對單總線器件的操作時序非常重要;程序順序非常關(guān)鍵;由于溫度有負(fù)數(shù),有小數(shù),
  8. //      所以在數(shù)據(jù)處理方面也很難控制;單片機資源有限 int float 數(shù)據(jù)類型最好少用
  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;//這里位置很關(guān)鍵。最后一次是不需要移位的,所以放在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. //                                                                 沐雨迎風(fēng)設(shè)計                                                                   //
  130. //                                                                 2010/04/05                                                                           //
  131. //                                                                                                                                                           //
  132. /*******************************************************************************/
復(fù)制代碼

LCD1602.h頭文件:
  1. /*1602液晶驅(qū)動程序*/
  2. //作者:詹磊                                                                                                                                  
  3. //功能:能在1602液晶上顯示字符串(字母和阿拉伯?dāng)?shù)字)、自定義圖形(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;//開發(fā)板上對印引腳
  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,//電池標(biāo)號:空
  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,//電池標(biāo)號:一格
  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,//電池標(biāo)號:兩格
  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,//電池標(biāo)號:三格
  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//電池標(biāo)號:四格
  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標(biāo)號
  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//溫度標(biāo)號
  50. //          0          1           2        3          4          5           6        7
  51. };
  52. /*******************************************************************************/
  53. void delay_ms(uint z)//毫秒延時函數(shù)
  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)//微秒延時函數(shù)
  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為橫坐標(biāo);y為縱坐標(biāo)
  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)//顯示函數(shù);x為橫坐標(biāo);y為縱坐標(biāo)
  116. {
  117.         position(x,y);//指定首字位置
  118.         while(*dat>0)//當(dāng)加到頭時,指針指向NULL退出循環(huán)
  119.         {       
  120.                 W_DAT_LCD(*dat);//按指針?biāo)傅牡刂啡?nèi)容,寫入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);//按指針?biāo)傅牡刂啡?nèi)容,寫入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. //                                                                沐雨迎風(fēng)設(shè)                                                                           //
  166. //                                                            2012/03/16                                                                           //
  167. /*******************************************************************************/
  168. #endif
復(fù)制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:47286 發(fā)表于 2017-3-16 09:33 | 只看該作者
高人 沒看懂 但也要膜拜一下
回復(fù)

使用道具 舉報

板凳
ID:503157 發(fā)表于 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
這是啥意思
回復(fù)

使用道具 舉報

地板
ID:567217 發(fā)表于 2019-6-19 20:20 | 只看該作者
感謝樓主
回復(fù)

使用道具 舉報

5#
ID:585455 發(fā)表于 2019-7-19 11:42 | 只看該作者
感謝用心整理,資料很珍貴,謝謝。
回復(fù)

使用道具 舉報

6#
ID:332895 發(fā)表于 2019-10-18 23:27 | 只看該作者
感謝,沒幣的也可以自己復(fù)制代碼寫一個
回復(fù)

使用道具 舉報

7#
ID:89286 發(fā)表于 2019-10-19 18:27 | 只看該作者
thanks for sharing
回復(fù)

使用道具 舉報

8#
ID:477474 發(fā)表于 2020-2-14 16:02 | 只看該作者
謝謝樓主分享,學(xué)習(xí)中!!!
回復(fù)

使用道具 舉報

9#
ID:693144 發(fā)表于 2020-2-14 18:58 | 只看該作者
有幫助,感謝
回復(fù)

使用道具 舉報

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

缺少函數(shù)原型
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区电影在线观看 | 伊人影院在线观看 | 精品九九九 | 天天色官网 | 久久久久久天堂 | 亚洲一区二区三区四区在线观看 | 99热热99 | 午夜精品久久 | 欧美一级片免费看 | 久久亚洲二区 | 亚洲视频免费 | 精品国产一区二区三区久久狼黑人 | 国产9久| 老外黄色一级片 | 视频在线一区二区 | 中文字幕日韩欧美一区二区三区 | 国产一区二区三区免费视频 | 精品久久久久久亚洲精品 | 一级欧美一级日韩片 | 精品久久99 | 99精品欧美一区二区蜜桃免费 | 亚州无限乱码 | 日韩精品av | 在线色网 | 放个毛片看看 | 免费黄色的视频 | www.99热| 日韩一区二区三区在线 | 最近日韩中文字幕 | 激情综合五月天 | 伊人天堂网 | 亚洲综合在线播放 | 黄视频网站在线 | 欧美成ee人免费视频 | 五月激情久久 | 国产一区二区三区 | 日韩午夜精品 | 成人av网站在线观看 | 999免费视频 | 91人人看| 日韩一区二区三区在线观看 |