1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 29850|回復: 19
打印 上一主題 下一主題
收起左側

單片機溫度報警器 電路圖+程序

  [復制鏈接]
跳轉到指定樓層
樓主


  1. #include <REG52.H>
  2. #include<intrins.h> //包含_nop_()函數定義的頭文件
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit RS=P2^0;
  6. sbit RW=P2^1;
  7. sbit EN=P2^2;
  8. sbit DQ=P3^3;
  9. sbit LED1=P2^3;
  10. sbit LED2=P2^6;
  11. sbit fmq=P1^6;
  12. union{
  13. uchar c[2];
  14. uint x;
  15. }temp;
  16. uint cc,cc2;
  17. float cc1;
  18. bit flag1;
  19. uchar buffer1[]={"dangerous!!"} ;
  20. uchar buffer2[]={"welcome!!!!"};
  21. uchar buffer3[]={"tem"};
  22. uchar num[6]={"+00.0"};
  23. /*void delay1us(uint z)
  24. {
  25. uchar x,y;
  26. for(x=z;x>0;x--)
  27. for(y=110;y>0;y--)
  28. {;} //500us
  29. }*/
  30. void delay500us()
  31. {
  32. unsigned char j;
  33. for(j=0;j<57;j++)
  34. {;} //500us
  35. }
  36. void beep()
  37. {
  38. fmq=0;
  39. delay500us(); /* 頻率為1kHz,500us的低電平,導通(三極管)*/
  40. fmq=1; /* 頻率為1kHz,500us的高電平,未通(三極管)*/
  41. delay500us();
  42. }
  43. //查忙函數
  44. void wait()
  45. {
  46. P0=0xff;
  47. RS=0;
  48. RW=1;
  49. EN=1;
  50. EN=0;
  51. while(P0&0x80)
  52. {
  53. EN=0;
  54. EN=1;
  55. }
  56. }
  57. void wc51com(uchar com)
  58. {
  59. wait();
  60. EN=0;
  61. RS=0;
  62. RW=0;
  63. EN=1;
  64. P0=com;
  65. EN=0;
  66. }
  67. void wc51r(uchar dat)
  68. {
  69. wait();
  70. EN=0;
  71. RS=1;
  72. RW=0;
  73. EN=1;
  74. P0=dat;
  75. EN=0;
  76. }
  77. void init()
  78. {
  79. wc51com(0x01);
  80. wc51com(0x38);
  81. wc51com(0x0c);
  82. wc51com(0x06);
  83. }
  84. /*****************************
  85. **********************************************/
  86. void delay(int useconds)
  87. {
  88. for(; useconds>0;useconds--);
  89. }
  90. uchar ow_reset(void)
  91. {
  92. uchar presence;
  93. DQ=0;//CPU把總線拉低的操作;
  94. delay(50);//拉低480微秒到960微秒
  95. DQ=1;//CPU釋放總線
  96. delay(3);//延時15——60微秒;待總線回到高電平喚醒13B20
  97. presence=DQ;//DS13B20把總線發送低電平表示復位成功;13B20完好可以工作
  98. delay(25);//延時60到240
  99. return(presence) ;
  100. }
  101. uchar read_byte(void)
  102. {
  103. uchar i;
  104. uchar value=0;
  105. for(i=8; i>0;i--)
  106. {
  107. value>>=1;
  108. DQ=0;
  109. DQ=1;
  110. delay(1);
  111. if(DQ) value|=0x80;
  112. delay(6);
  113. }
  114. return(value);
  115. }
  116. void write_byte(uchar val)
  117. {
  118. uchar i;
  119. for(i=8;i>0;i--)
  120. {
  121. DQ=0;
  122. DQ=val&0x01;
  123. delay(5);
  124. DQ=1;
  125. val=val/2;
  126. }
  127. delay(5);
  128. }
  129. void read_Temperature(void)
  130. {
  131. ow_reset();//初始化; 復位
  132. write_byte(0xCC);//溫度變化指令(最開始為0)
  133. write_byte(0xBE);//讀9個字節類容的溫度
  134. temp.c[1]=read_byte(); //讀出來顯示低位
  135. temp.c[0]=read_byte(); //讀出來顯示高位
  136. _nop_(); _nop_();_nop_();
  137. ow_reset(); //初始化
  138. write_byte(0xCC); //溫度變化指令
  139. write_byte(0x44);//讀存入到9個字節中
  140. return;
  141. }
  142. void main()
  143. {
  144. uchar k=0;
  145. uint t=0;
  146. delay(10); fmq=1;
  147. EA=0;
  148. flag1=0;
  149. init();
  150. wc51com(0x80+0x00);
  151. wc51r('m');
  152. wc51r('e');
  153. while(1)
  154. {
  155. delay(10000);
  156. read_Temperature();
  157. cc=temp.c[0]*256.0+temp.c[1];
  158. if(temp.c[0]>0xf8){flag1=1;cc=~cc+1;}else flag1=0;
  159. cc1=cc*0.0625; //得到實際的值;
  160. cc2=cc1*100;//1710
  161. if(((cc2/1000)*10+(cc2/100-(cc2/1000)*10)>=37)&((cc2/1000)*10+(cc2/100-(cc2/1000)*10)<=40))
  162. {
  163. LED2=1;
  164. LED1=0;
  165. wc51com(0x80+0x04);
  166. for(k=0;k<11;k++)
  167. {wc51r(buffer2[k]);}
  168. }
  169. else
  170. {
  171. LED2=0;
  172. LED1=1;
  173. wc51com(0x80+0x04);
  174. for(k=0;k<11;k++)
  175. {
  176. wc51r(buffer1[k]);
  177. }
  178. wc51com(0x80+0x40) ;
  179. for(k=0;k<3;k++)
  180. {
  181. wc51r(buffer3[k]);
  182. }
  183. for(t=0;t<1000;t++) //響
  184. {
  185. {
  186. beep(); //一次循環是1kHz,1MS;1000表示蜂鳴器響起來
  187. }
  188. fmq=1; //不響;
  189. delay500us();
  190. delay500us();
  191. }
  192. }
  193. num[1]=cc2/1000+0x30;//1710/100=1;
  194. if(num[1]==0x30)
  195. num[1]=0x20;
  196. num[2]=cc2/100-(cc2/1000)*10+0x30;//1710/100=17-(1*10)=7;
  197. num[4]=cc2/10-(cc2/100)*10+0x30;//1710/10=171-(17*10)=1
  198. if(flag1==1)
  199. {
  200. num[0]='-';
  201. }
  202. else
  203. num[0]='+';
  204. wc51com(0x80+0x44);
  205. for(k=0;k<5;k++)
  206. {wc51r(num[k]);}
  207. }
  208. }#include <REG52.H>
  209. #include<intrins.h> //包含_nop_()函數定義的頭文件
  210. #define uchar unsigned char
  211. #define uint unsigned int
  212. sbit RS=P2^0;
  213. sbit RW=P2^1;
  214. sbit EN=P2^2;
  215. sbit DQ=P3^3;
  216. sbit LED1=P2^3;
  217. sbit LED2=P2^6;
  218. sbit fmq=P1^6;
  219. union{
  220. uchar c[2];
  221. uint x;
  222. }temp;
  223. uint cc,cc2;
  224. float cc1;
  225. bit flag1;
  226. uchar buffer1[]={"dangerous!!"} ;
  227. uchar buffer2[]={"welcome!!!!"};
  228. uchar buffer3[]={"tem"};
  229. uchar num[6]={"+00.0"};
  230. /*void delay1us(uint z)
  231. {
  232. uchar x,y;
  233. for(x=z;x>0;x--)
  234. for(y=110;y>0;y--)
  235. {;} //500us
  236. }*/
  237. void delay500us()
  238. {
  239. unsigned char j;
  240. for(j=0;j<57;j++)
  241. {;} //500us
  242. }
  243. void beep()
  244. {
  245. fmq=0;
  246. delay500us(); /* 頻率為1kHz,500us的低電平,導通(三極管)*/
  247. fmq=1; /* 頻率為1kHz,500us的高電平,未通(三極管)*/
  248. delay500us();
  249. }
  250. //查忙函數
  251. void wait()
  252. {
  253. P0=0xff;
  254. RS=0;
  255. RW=1;
  256. EN=1;
  257. EN=0;
  258. while(P0&0x80)
  259. {
  260. EN=0;
  261. EN=1;
  262. }
  263. }
  264. void wc51com(uchar com)
  265. {
  266. wait();
  267. EN=0;
  268. RS=0;
  269. RW=0;
  270. EN=1;
  271. P0=com;
  272. EN=0;
  273. }
  274. void wc51r(uchar dat)
  275. {
  276. wait();
  277. EN=0;
  278. RS=1;
  279. RW=0;
  280. EN=1;
  281. P0=dat;
  282. EN=0;
  283. }
  284. void init()
  285. {
  286. wc51com(0x01);
  287. wc51com(0x38);
  288. wc51com(0x0c);
  289. wc51com(0x06);
  290. }
  291. /*****************************
  292. **********************************************/
  293. void delay(int useconds)
  294. {
  295. for(; useconds>0;useconds--);
  296. }
  297. uchar ow_reset(void)
  298. {
  299. uchar presence;
  300. DQ=0;//CPU把總線拉低的操作;
  301. delay(50);//拉低480微秒到960微秒
  302. DQ=1;//CPU釋放總線
  303. delay(3);//延時15——60微秒;待總線回到高電平喚醒13B20
  304. presence=DQ;//DS13B20把總線發送低電平表示復位成功;13B20完好可以工作
  305. delay(25);//延時60到240
  306. return(presence) ;
  307. }
  308. uchar read_byte(void)
  309. {
  310. uchar i;
  311. uchar value=0;
  312. for(i=8; i>0;i--)
  313. {
  314. value>>=1;
  315. DQ=0;
  316. DQ=1;
  317. delay(1);
  318. if(DQ) value|=0x80;
  319. delay(6);
  320. }
  321. return(value);
  322. }
  323. void write_byte(uchar val)
  324. {
  325. uchar i;
  326. for(i=8;i>0;i--)
  327. {
  328. DQ=0;
  329. DQ=val&0x01;
  330. delay(5);
  331. DQ=1;
  332. val=val/2;
  333. }
  334. delay(5);
  335. }
  336. void read_Temperature(void)
  337. {
  338. ow_reset();//初始化; 復位
  339. write_byte(0xCC);//溫度變化指令(最開始為0)
  340. write_byte(0xBE);//讀9個字節類容的溫度
  341. temp.c[1]=read_byte(); //讀出來顯示低位
  342. temp.c[0]=read_byte(); //讀出來顯示高位
  343. _nop_(); _nop_();_nop_();
  344. ow_reset(); //初始化
  345. write_byte(0xCC); //溫度變化指令
  346. write_byte(0x44);//讀存入到9個字節中
  347. return;
  348. }
  349. void main()
  350. {
  351. uchar k=0;
  352. uint t=0;
  353. delay(10); fmq=1;
  354. EA=0;
  355. flag1=0;
  356. init();
  357. wc51com(0x80+0x00);
  358. wc51r('m');
  359. wc51r('e');
  360. while(1)
  361. {
  362. delay(10000);
  363. read_Temperature();
  364. cc=temp.c[0]*256.0+temp.c[1];
  365. if(temp.c[0]>0xf8){flag1=1;cc=~cc+1;}else flag1=0;
  366. cc1=cc*0.0625; //得到實際的值;
  367. cc2=cc1*100;//1710
  368. if(((cc2/1000)*10+(cc2/100-(cc2/1000)*10)>=37)&((cc2/1000)*10+(cc2/100-(cc2/1000)*10)<=40))
  369. {
  370. LED2=1;
  371. LED1=0;
  372. wc51com(0x80+0x04);
  373. for(k=0;k<11;k++)
  374. {wc51r(buffer2[k]);}
  375. }
  376. else
  377. {
  378. LED2=0;
  379. LED1=1;
  380. wc51com(0x80+0x04);
  381. for(k=0;k<11;k++)
  382. {
  383. wc51r(buffer1[k]);
  384. }
  385. wc51com(0x80+0x40) ;
  386. for(k=0;k<3;k++)
  387. {
  388. wc51r(buffer3[k]);
  389. }
  390. for(t=0;t<1000;t++) //響
  391. {
  392. {
  393. beep(); //一次循環是1kHz,1MS;1000表示蜂鳴器響起來
  394. }
  395. fmq=1; //不響;
  396. delay500us();
  397. delay500us();
  398. }
  399. }
  400. num[1]=cc2/1000+0x30;//1710/100=1;
  401. if(num[1]==0x30)
  402. num[1]=0x20;
  403. num[2]=cc2/100-(cc2/1000)*10+0x30;//1710/100=17-(1*10)=7;
  404. num[4]=cc2/10-(cc2/100)*10+0x30;//1710/10=171-(17*10)=1
  405. if(flag1==1)
  406. {
  407. num[0]='-';
  408. }
  409. else
  410. num[0]='+';
  411. wc51com(0x80+0x44);
  412. for(k=0;k<5;k++)
  413. {wc51r(num[k]);}
  414. }
  415. }
復制代碼


評分

參與人數 1黑幣 +5 收起 理由
348652560 + 5 很給力!

查看全部評分

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

使用道具 舉報

沙發
ID:44267 發表于 2015-9-25 09:44 | 只看該作者
怎么有兩個頭件定義啊
回復

使用道具 舉報

板凳
ID:44267 發表于 2015-9-25 10:36 | 只看該作者
正好做一個太強了,賺點幣
回復

使用道具 舉報

地板
ID:91047 發表于 2015-9-25 18:52 | 只看該作者
大神請問一下= =
cc=temp.c[0]*256.0+temp.c[1];
if(temp.c[0]>0xf8){flag1=1;cc=~cc+1;}else flag1=0;
cc1=cc*0.0625; //得到實際的值;
cc2=cc1*100;//1710
這一段是怎么算的= =代表了什么意思
回復

使用道具 舉報

5#
ID:99710 發表于 2015-12-20 19:50 | 只看該作者
大神可以發張原理圖看看嗎?放大太模糊了
回復

使用道具 舉報

6#
ID:112184 發表于 2016-6-14 22:04 | 只看該作者
大神請問一下= =
cc=temp.c[0]*256.0+temp.c[1];
if(temp.c[0]>0xf8){flag1=1;cc=~cc+1;}else flag1=0;
cc1=cc*0.0625; //得到實際的值;
回復

使用道具 舉報

7#
ID:147836 發表于 2016-11-14 18:05 | 只看該作者
這個圖能發個清晰點點嗎
回復

使用道具 舉報

8#
ID:147840 發表于 2016-11-14 18:19 | 只看該作者

這個圖能發個清晰點點嗎謝謝分享
回復

使用道具 舉報

9#
ID:165792 發表于 2017-2-26 13:50 | 只看該作者
沒有文件下載?
回復

使用道具 舉報

10#
ID:165792 發表于 2017-3-25 07:52 來自觸屏版 | 只看該作者
學習了,不錯不錯
回復

使用道具 舉報

11#
ID:210935 發表于 2017-6-13 21:59 | 只看該作者
有圖嗎
回復

使用道具 舉報

12#
ID:211258 發表于 2017-6-15 17:40 | 只看該作者
非常好
回復

使用道具 舉報

13#
ID:212394 發表于 2017-6-19 17:38 | 只看該作者
大神,這個溫度范圍是多少啊,
回復

使用道具 舉報

14#
ID:223694 發表于 2017-10-16 10:52 | 只看該作者
樓主,能不能發一張清楚一點的圖,這個圖太模糊了,謝謝啦
回復

使用道具 舉報

15#
ID:95509 發表于 2017-10-17 11:16 | 只看該作者
學習了!
回復

使用道具 舉報

16#
ID:293770 發表于 2018-3-18 22:02 | 只看該作者
可以的
回復

使用道具 舉報

17#
ID:294610 發表于 2018-3-20 17:27 | 只看該作者
很厲害
回復

使用道具 舉報

18#
ID:321916 發表于 2018-5-4 11:07 | 只看該作者
大神,能把電路圖的文件發來么
回復

使用道具 舉報

19#
ID:507412 發表于 2019-4-8 21:48 | 只看該作者
非常給力!!!
回復

使用道具 舉報

20#
ID:777413 發表于 2020-6-15 11:41 | 只看該作者
可以發下仿真鏈接嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表