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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4865|回復: 0
打印 上一主題 下一主題
收起左側(cè)

實現(xiàn)穩(wěn)定的單片機ds1820一線多點測溫系統(tǒng),C51源碼,12864液晶顯示溫度值

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:187303 發(fā)表于 2017-4-7 22:59 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
美國DALAS公司的溫度傳感器ds1820芯片具有高靈敏度、易用性、編程布線簡單等優(yōu)點,被應用到工控行業(yè)的各種產(chǎn)品中。
本C51源碼能夠?qū)崿F(xiàn)穩(wěn)定的一線多點測溫系統(tǒng),液晶顯示溫度值。結(jié)合硬件的通信即可實現(xiàn)遠程多點測溫。本c51的ds1820的c語言驅(qū)動程序通過實踐使用,程序效率高、穩(wěn)定準確,可直接使用。
且本原碼包括了FYD12864液晶顯示源碼,為FYD12864液晶初使用者提供了一個實例。


  1. //DS1820 C51 子程序
  2. //這里以11.0592M晶振為例,不同的晶體速度可能需要調(diào)整延時的時間
  3. #include<reg52.h>
  4. #include<lcd.h>
  5. #include <absacc.h>
  6. /////////////**********先為液晶初始化函數(shù)變量聲明**********///////////
  7. void WRD(uchar DATA);  //寫lcd數(shù)據(jù)子函數(shù)聲明
  8. void WRI(uchar com) ; //寫lcd指令子函數(shù)聲明
  9. void RD(uchar INDATA) ; //讀lcd數(shù)據(jù)子函數(shù)聲明
  10. void CHEBF();  //讀lcdBF子函數(shù)聲明
  11. void lcdinitialdat() ;  //寫lcd數(shù)據(jù)初始化聲明
  12. void delaylong(int n) ; //延遲聲明
  13. void delay(void);
  14. void locatecursor(uchar H,uchar L);  //定位游標,行H,列L (最大可到四行八列)
  15. uchar bdata state;
  16. sbit BF=state^7;
  17. uchar idata DDRAM;      //設定DDRAM地址第一行80~87,第二行90~97,
  18.                         //第三行為88-8F,第四行為98-9F
  19. uchar idata basfuncset ;    /*0X30基本指令,8位數(shù)據(jù) 0X34   擴充指令,8位數(shù)據(jù)*/
  20. uchar idata shiftcursorr=0X14;//游標移位:為14H時,游標右移
  21. uchar idata shiftcursorl=0X10;  //游標移位:為10H時,游標左移                          
  22.                       //18H時為顯示左移(在一三行之間或二四行之間),游標跟移;
  23.                                                          //1CH時為顯示右移,游標跟移
  24. uchar idata page;     //頁號
  25. ////////////////////////////////////////////////////////////////////////////////////////////
  26. sbit DQ =P1^1;//根據(jù)實際情況定義端口
  27. typedef unsigned int uint;
  28. void tmdelay(uchar useconds) ;
  29. uchar tm_initial(void) ;
  30. void read_char(void) ;
  31. void write_char(char val) ;
  32. void Read_Temperature(uchar no) ;
  33. uchar temdate[2][2]=
  34. {0,0,  //NO1溫度值的低字節(jié)和高字節(jié)
  35. 0,0}; //NO2溫度值的低字節(jié)和高字節(jié)
  36. uchar tempkey[2][8]=
  37. {0X28,0X8F,0XF3,0X85,0,0,0,0X60, //NO1
  38. 0X28,0X52,0XA4,0X85,0,0,0,0X2A}; //NO2

  39. uchar dy=0;
  40. uchar value = 0;
  41. uchar temint=0;
  42. uint temdot=0;
  43. //////////////////////////////////////////////main staet////////////////////////////////////////////////

  44. main()
  45. {  uchar k=0;
  46.    delaylong(500) ; /////此處必須延時300ms以上,500時為約大于1秒
  47.         //delaylong(350) ; //779ms
  48.   lcdinitialdat() ;//寫lcd數(shù)據(jù)初始化
  49.   delay() ;
  50.   while(1)
  51.   {k=0;
  52.   while(k<2)
  53.   {temint=0;temdot=0;
  54.   Read_Temperature(k);
  55.   locatecursor(k+1,1);  //從第2行首列顯示
  56.   WRD('T');WRD('E');   WRD('M');WRD(0X30+k);WRD(':');
  57.   temint=((temdate[k][1]<<4)|(temdate[k][0]>>4));
  58.   temdot=temdate[k][0]&0X0F;
  59.   temdot=temdot*625;
  60.   temint+=temdot/10000;
  61.   WRD(0X30+temint/100);WRD(0X30+temint%100/10);WRD(0X30+temint%10);
  62.   WRD('.');
  63.   WRD(0X30+(temdot%10000/1000));WRD(0X30+temdot%1000/100);
  64.   WRD(0X30+(temdot%100/10));WRD(0X30+temdot%10);
  65.   k++;
  66.   }
  67.   }

  68. }//end main

  69. ///////////////////////////////////////////////end main/////////////////////////////////////////////
  70. //延時
  71. void tmdelay(uchar useconds)
  72. {
  73. while(useconds>0)useconds--;
  74. }  
  75. /*tmdelay(1) ;//16.28us//增加一個就加6.5us
  76.   tmdelay(2) ;//22.78us
  77.   tmdelay(3) ;//29.30us
  78.   tmdelay(4) ;//35.81us
  79.   tmdelay(70) ;//465.49
  80.   tmdelay(74) ;//491.54
  81.   tmdelay(80) ;//530.60
  82.   tmdelay(115)  ;//150us */


  83. //復位
  84. uchar tm_initial(void) ///對的
  85. {
  86. uchar answer=1;
  87. NOANSWE:
  88. DQ = 0; //pull DQ line low
  89. tmdelay(74); // leave it low for 490us
  90. DQ = 1; // allow line to return high
  91. tmdelay(12); // wait >60us for answer pulse
  92. if(DQ==1) {answer=1;goto NOANSWE;}
  93. else if(DQ==0)answer=0;
  94. //locatecursor(1,5);
  95. //WRD(0X30+answer);
  96. tmdelay(40) ;//>250us
  97. DQ=1;
  98. return(answer); //0表示有DS18B20應答,1表示沒有應答
  99. }

  100. //從 1-wire 總線上讀取一個字節(jié)
  101. void read_char(void)
  102. {
  103. uchar i;
  104. value=0;
  105. for (i=8;i>0;i--)
  106. {
  107. value>>=1;
  108. DQ = 1;
  109. dy++;dy++;
  110. DQ = 0; // pull DQ low
  111. dy++;dy++;dy++;dy++;dy++; // wait 1-15us for data in bus
  112. DQ=1; dy++; //pull high
  113. //tmdelay(1);
  114. if(DQ==1)
  115. {value|=0x80;
  116. }else{;}
  117. tmdelay(18) ;//>120us
  118. }
  119. //return(value);
  120. }

  121. //向 1-WIRE 總線上寫一個字節(jié)
  122. void write_char(uchar val)
  123. {
  124. uchar i;
  125. locatecursor(3,1);
  126. for (i=8; i>0; i--) // writes uchar, one bit at a time
  127. {
  128. //DQ = 1;
  129. //tmdelay(1);
  130. DQ = 0; // pull DQ low to start timeslot
  131. tmdelay(1);
  132. if(val&0X01==1)
  133. {DQ = 1;tmdelay(12); }
  134. else {DQ=0;tmdelay(12); DQ=1;tmdelay(1); }
  135. //tmdelay(10); // hold value for remainder of timeslot

  136. val=val>>1;
  137. }
  138. DQ = 1;
  139. tmdelay(1);
  140. }

  141. ///////讀DS18B20的64bit的KEY

  142. //讀取溫度
  143. void Read_Temperature(uchar no)
  144. {
  145. uchar j=0;
  146. value=0;
  147. if(tm_initial()==1)  goto noanswer;
  148. write_char(0X55); // 匹配 ROM
  149. //寫暫存存儲器(4EH)、讀暫存存儲器(BEH)、復制暫存存儲器(48H)、溫度變換(44H)、重
  150. //新調(diào)出EERAM(B8H)和讀電源供電方式(B4H)命令
  151. while(j<8)
  152. {
  153. write_char(tempkey[no][j]);
  154. j++;
  155. }
  156. write_char(0x44); // Start Conversion
  157. delaylong(355) ; //>780ms// 延時一段時間,等待AD轉(zhuǎn)換結(jié)束,默認12位則>750ms
  158. if(tm_initial()==1)  goto noanswer;
  159. write_char(0X55); // 匹配 ROM
  160. j=0;
  161. while(j<8)
  162. {
  163. write_char(tempkey[no][j]);
  164. j++;
  165. }
  166. write_char(0xBE); // Read Scratch Pad
  167. read_char(); //first temperatue low
  168. temdate[no][0]=value;
  169. read_char(); //then temperatue high
  170. temdate[no][1]=value;
  171. //tm_initial();
  172. //write_char(0xCC); //Skip ROM

  173. //return temp.x/2;
  174. noanswer:;
  175. } //////////////////////////end Read_Temperature(void) ////////////////////



  176. ///////////////////////////

  177. /***************************現(xiàn)為各液晶子函數(shù)體******************/////
  178. void WRD(uchar DATA)  //寫lcd數(shù)據(jù)子函數(shù)
  179. {
  180.   CHEBF();
  181.   ADWRD=DATA;
  182.   ADWRD=DATA;

  183. }
  184. void WRI(uchar com)  //寫lcd指令子函數(shù)
  185. {
  186.   CHEBF();
  187.   ADWRI=com;
  188.   ADWRI=com;

  189. }

  190. void CHEBF()    //讀lcdBF子函數(shù)
  191. {
  192. state=ADRI;
  193. while(BF)
  194. {
  195.   state=ADRI;
  196. }
  197. }
  198. void lcdinitialdat()   //寫lcd數(shù)據(jù)初始化
  199. {
  200.   WRI(0X30) ;      //RE=0基本指令設定
  201.   delay();
  202.   WRI(0X30) ;      //延遲39us
  203.   delay();
  204.   WRI(stadis2);   //游標開,反白允許
  205.   //WRI(0X0E);   //游標開,反白不允許
  206.   //WRI(stadis1);  //游標關(guān),反白不允許
  207.   delay(); //延遲39us
  208.   WRI(clrdis)  ;  //清除顯示
  209.   delay(); //延遲39us
  210.   WRI(inpointcursorup);  //AC+1
  211.   delay(); //延遲39us
  212.   

  213. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

下載:
C51源碼能夠?qū)崿F(xiàn)穩(wěn)定的一線多點測溫系統(tǒng),液晶顯示溫度值.rar (259.6 KB, 下載次數(shù): 57)

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年人黄色小视频 | 暖暖成人免费视频 | 99re6在线视频精品免费 | av二区三区 | 久久在线 | 午夜影院在线观看 | 天堂久| 一二三四在线视频观看社区 | 欧美激情在线播放 | 精品日韩一区 | 性色网站 | 国产在线视频三区 | 伊伊综合网| 中文字幕一区二区三区不卡 | 欧美精品一区二区三区在线 | 青青草亚洲 | 欧美激情综合 | 成人区精品 | 国产精品999| 激情av在线 | 久久国产高清 | 中午字幕在线观看 | 日韩av免费看 | 欧美一区二区精品 | 欧美精品综合 | 国产精品久久久久久二区 | 亚洲国产精品一区二区第一页 | 欧美日韩国产高清 | 亚洲一区二区视频 | 亚洲精品国产成人 | 亚洲一区二区在线 | 国产成人精品午夜视频免费 | 日韩国产一区二区三区 | 777zyz色资源站在线观看 | 日韩av免费看 | 天天操天天射天天舔 | 久久99精品久久久水蜜桃 | 91精品国产色综合久久不卡蜜臀 | 国产精品久久亚洲 | 日韩一区二区在线视频 | 欧美精品久久久久久 |