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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

帶有存儲器功能的數(shù)字溫度計-DS1624技術(shù)應(yīng)用

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:898981 發(fā)表于 2021-4-9 15:44 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
1. DS1624基本原理
   DS1624是美國DALLAS公司生產(chǎn)的集成了測量系統(tǒng)和存儲器于一體的芯片。數(shù)字接口電路簡單,與I2C總線兼容,且可以使用一片控制器控制多達(dá)8片的DS1624。其數(shù)字溫度輸出達(dá)13位,精度為0.03125℃。DS1624可工作在最低2.7V電壓下,適用于低功耗應(yīng)用系統(tǒng)。
1). DS1624基本特性
  ◆ 無需外圍元件即可測量溫度
◆ 測量范圍為-55℃~+125℃,精度為0.03125℃
◆ 測量溫度的結(jié)果以13位數(shù)字量(兩字節(jié)傳輸)給出
◆ 測量溫度的典型轉(zhuǎn)換時間為1秒        
◆ 集成了256字節(jié)的E2PROM非易性存儲器
◆ 數(shù)據(jù)的讀出和寫入通過一個2-線(I2C)串行接口完成
◆采用8腳DIP或SOIC封裝
DS1624在測量溫度時使用了獨(dú)有的在線溫度測量技術(shù)。它通過在一個由對溫度高度敏感的振蕩器決定的計數(shù)周期內(nèi)對溫度低敏感的振蕩器時鐘脈沖的計數(shù)值的計算來測量溫度。DS1624在計數(shù)器中預(yù)置了一個初值,它相當(dāng)于-55℃。如果計數(shù)周期結(jié)束之前計數(shù)器達(dá)到0,已預(yù)置了此初值的溫度寄存器中的數(shù)字就會增加,從而表明溫度高于-55℃。
與此同時,計數(shù)器斜坡累加電路被重新預(yù)置一個值,然后計數(shù)器重新對時鐘計數(shù),直到計數(shù)值為0。
通過改變增加的每1℃內(nèi)的計數(shù)器的計數(shù),斜坡累加電路可以補(bǔ)償振蕩器的非線性誤差,以提高精度,任意溫度下計數(shù)器的值和每一斜坡累加電路的值對應(yīng)的計數(shù)次數(shù)須為已知。
  DS1624通過這些計算可以得到0.03125℃的精度,溫度輸出為13位,在發(fā)出讀溫度值請求后還會輸出兩位補(bǔ)償值。表2給出了所測的溫度和輸出數(shù)據(jù)的關(guān)系。這些數(shù)據(jù)可通過2線制串行口連續(xù)輸出,MSB在前,LSB在后。
由于數(shù)據(jù)在總線上傳輸時MSB在前,所以DS1624讀出的數(shù)據(jù)可以是一個字節(jié)(分辨率為1℃),也可以是兩個字節(jié),第二個字節(jié)包含的最低位為0.03125℃。
  1. #include <AT89X52.H>
  2. #include <INTRINS.H>
  3. unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7,
  4. 0xef,0xdf,0xbf,0x7f};
  5. unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f,
  6. 0x66,0x6d,0x7d,0x07,
  7. 0x7f,0x6f,0x77,0x7c,
  8. 0x39,0x5e,0x79,0x71,0x00};
  9.  
  10. unsigned char code dotcode[32]={0,3,6,9,12,16,19,22,
  11. 25,28,31,34,38,41,44,48,
  12. 50,53,56,59,63,66,69,72,
  13. 75,78,81,84,88,91,94,97};
  14. sbit SDA=P1^6;
  15. sbit SCL=P1^7;
  16.  
  17. unsigned char displaybuffer[8]={0,1,2,3,4,5,6,7};
  18. unsigned char eepromdata[8];
  19. unsigned char temperdata[2];
  20.  
  21. unsigned char timecount;
  22. unsigned char displaycount;
  23.  
  24. bit secondflag=0;
  25. unsigned char secondcount=0;
  26. unsigned char retn;
  27. unsigned int result;
  28. unsigned char x;
  29. unsigned int k;
  30. unsigned int ks;
  31.  
  32. void delay(void);
  33. void delay10ms(void);
  34. void i_start(void);
  35. void i_stop(void);
  36. void i_init(void);
  37. void i_ack(void);
  38. bit i_clock(void);
  39. bit i_send(unsigned char i_data);
  40. unsigned char i_receive(void);
  41. bit start_temperature_T(void);
  42. bit read_temperature_T(unsigned char *p);
  43. void delay(void)
  44. {
  45. _nop_();
  46. _nop_();
  47. _nop_();
  48. _nop_();
  49. _nop_();
  50. _nop_();
  51. }
  52.  
  53. void delay10ms(void)
  54. {
  55. unsigned int i;
  56. for(i=0;i<1000;i++)
  57. {
  58. delay();
  59. }
  60. }
  61.  
  62. void i_start(void)
  63. {
  64. SCL=1;
  65. delay();
  66. SDA=0;
  67. delay();
  68. SCL=0;
  69. delay();
  70. }
  71.  
  72. void i_stop(void)
  73. {
  74. SDA=0;
  75. delay();
  76. SCL=1;
  77. delay();
  78. SDA=1;
  79. delay();
  80. SCL=0;
  81. delay();
  82. }
  83. void i_init(void)
  84. {
  85. SCL=0;
  86. i_stop();
  87. }
  88.  
  89. void i_ack(void)
  90. {
  91. SDA=0;
  92. i_clock();
  93. SDA=1;
  94. }
  95.  
  96. bit i_clock(void)
  97. {
  98. bit sample;
  99.  
  100. SCL=1;
  101. delay();
  102. sample=SDA;
  103. _nop_();
  104. _nop_();
  105. SCL=0;
  106. delay();
  107. return(sample);
  108. }
  109.  
  110. bit i_send(unsigned char i_data)
  111. {
  112. unsigned char i;
  113.  
  114. for(i=0;i<8;i++)
  115. {
  116. SDA=(bit)(i_data & 0x80);
  117. i_data=i_data<<1;
  118. i_clock();
  119. }
  120. SDA=1;
  121. return(~i_clock());
  122. }
  123. unsigned char i_receive(void)
  124. {
  125. unsigned char i_data=0;
  126. unsigned char i;
  127.  
  128. for(i=0;i<8;i++)
  129. {
  130. i_data*=2;
  131. if(i_clock()) i_data++;
  132. }
  133. return(i_data);
  134. }
  135.  
  136. bit start_temperature_T(void)
  137. {
  138. i_start();
  139. if(i_send(0x90))
  140. {
  141. if(i_send(0xee))
  142. {
  143. i_stop();
  144. delay();
  145. return(1);
  146. }
  147. else
  148. {
  149. i_stop();
  150. delay();
  151. return(0);
  152. }
  153. }
  154. else
  155. {
  156. i_stop();
  157. delay();
  158. return(0);
  159. }
  160. }
  161.  
  162. bit read_temperature_T(unsigned char *p)
  163. {
  164. i_start();
  165. if(i_send(0x90))
  166. {
  167. if(i_send(0xaa))
  168. {
  169. i_start();
  170. if(i_send(0x91))
  171. {
  172. *(p+1)=i_receive();
  173. i_ack();
  174. *p=i_receive();
  175. i_stop();
  176. delay();
  177. return(1);
  178. }
  179. else
  180. {
  181. i_stop();
  182. delay();
  183. return(0);
  184. }
  185. }
  186. else
  187. {
  188. i_stop();
  189. delay();
  190. return(0);
  191. }
  192. }
  193. else
  194. {
  195. i_stop();
  196. delay();
  197. return(0);
  198. }
  199. }
  200.  
  201. void main(void)
  202. {
  203. P1=0xff;
  204. timecount=0;
  205. displaycount=0;
  206. TMOD=0x21;
  207. TH1=0x06;
  208. TL1=0x06;
  209. TR1=1;
  210. ET1=1;
  211. ET0=1;
  212. EA=1;
  213.  
  214. if(start_temperature_T()) //向DS1624發(fā)送啟動A/D溫度轉(zhuǎn)換命令,成功則啟動T0定時1s。
  215. {
  216. secondflag=0;
  217. secondcount=0;
  218. TH0=55536/256;
  219. TL0=55536%256;
  220. TR0=1;
  221. }
  222. while(1)
  223. {
  224. if(secondflag==1)
  225. {
  226. secondflag=0;
  227. TR0=0;
  228. if(read_temperature_T(temperdata)) //T0定時1s時間到,讀取DS1624的溫度值
  229. {
  230. for(x=0;x<8;x++)
  231. {
  232. displaybuffer[x]=16;
  233. }
  234. x=2;
  235. result=temperdata[1]; //將讀取的溫度值進(jìn)行數(shù)據(jù)處理,并送到顯示緩沖區(qū)
  236. while(result/10)
  237. {
  238. displaybuffer[x]=result%10;
  239. result=result/10;
  240. x++;
  241. }
  242. displaybuffer[x]=result;
  243. result=temperdata[0];
  244. result=result>>3;
  245. displaybuffer[0]=(dotcode[result])%10;
  246. displaybuffer[1]=(dotcode[result])/10;
  247. if(start_temperature_T()) //溫度值數(shù)據(jù)處理完畢,重新啟動DS1624開始溫度轉(zhuǎn)換
  248. {
  249. secondflag=0;
  250. secondcount=0;
  251. TH0=55536/256;
  252. TL0=55536%256;
  253. TR0=1;
  254. }
  255. }
  256. }
  257. }
  258. }
  259. void t0(void) interrupt 1 using 0 //T0用于定時1s時間到
  260. {
  261. secondcount++;
  262. if(secondcount==100)
  263. {
  264. secondcount=0;
  265. secondflag=1;
  266. }
  267. TH0=55536/256;
  268. TL0=55536%256;
  269. }
  270. void t1(void) interrupt 3 using 0 //T1定時1ms用數(shù)碼管的動態(tài)刷新
  271. {
  272. timecount++;
  273. if(timecount==4) //T1定時1ms到
  274. {
  275. timecount=0;
  276. if (displaycount==5)
  277. {
  278. P0=(displaycode[displaybuffer[7-displaycount]] | 0x80); //在該位同時還要顯示小數(shù)點(diǎn)
  279. }
  280. else
  281. {
  282. P0=displaycode[displaybuffer[7-displaycount]];
  283. }
  284. P2=displaybit[displaycount];
  285. displaycount++;
  286. if(displaycount==8)
  287. {
  288. displaycount=0;
  289. }
  290. }
  291. }
復(fù)制代碼


22222.jpg (51.51 KB, 下載次數(shù): 50)

22222.jpg

111111111.jpg (22.92 KB, 下載次數(shù): 53)

111111111.jpg

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:328014 發(fā)表于 2021-4-14 22:46 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報

板凳
ID:47286 發(fā)表于 2021-4-15 01:21 來自手機(jī) | 只看該作者
是每3度一級嗎 范圍太大了吧
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产情侣一区 | 亚洲精品2区 | 妞干网福利视频 | 亚洲精品观看 | 成人欧美一区二区三区视频xxx | 亚洲一区二区三区免费在线观看 | 97久久久久久久久 | 久久精品a | 日韩一区二区三区在线 | 成年人黄色免费视频 | 国产伦一区二区三区视频 | 国产精品99久久久久久宅男 | 成人在线视频免费观看 | 一级黄色片在线免费观看 | 一二区视频 | 做a视频| 日本在线中文 | 日本久久一区二区三区 | 美日韩免费视频 | 免费在线视频a | 一级黄色片毛片 | 最新国产精品精品视频 | 亚洲另类春色偷拍在线观看 | 欧美在线不卡 | 蜜桃视频在线观看www社区 | 免费国产视频 | 你懂的在线视频播放 | 91精品久久久久久久久中文字幕 | 作爱视频免费看 | 国产一区二区在线播放 | 在线视频一区二区三区 | 91精品久久久久久久久 | 亚洲精品一区二三区不卡 | 日韩欧美中文 | 精品国产91亚洲一区二区三区www | 牛牛热在线视频 | 99精品久久 | 国产色99| 二区高清 | 精品久久国产 | 久草在线青青草 |