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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于單片機溫度控制系統的課設 有源代碼和仿真文件

[復制鏈接]
跳轉到指定樓層
樓主
做了兩周的課程設計,是關于溫度控制系統的
附件里有源代碼,和仿真文件,
第一次做,也在圖書館里查詢了一些資料
解決了一些問題
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. unsigned char code digit[10]={"0123456789"};
  4. unsigned char code D1[]={"Temp:       C"};
  5. unsigned char code Error[]={"Error!Check!"};
  6. unsigned char code D2[]={"Motor: "};
  7. unsigned char code TS1[]={"COOL DOWN!"};
  8. unsigned char code TS2[]={" STOP! "};
  9. unsigned char code TS3[]={"HOT UP!"};
  10. sbit LED_RED=P2^3;
  11. sbit LED_GREEN=P2^4;
  12. sbit P1_0=P1^0;
  13. sbit P1_1=P1^1;
  14. unsigned char cwFlag;
  15. sbit RS=P2^0;
  16. sbit RW=P2^1;
  17. sbit E=P2^2;
  18. sbit BF=P0^7;
  19. void delay(unsigned int m)
  20. {
  21. unsigned int i,j;
  22. for(i=m;i>0;i--)
  23. for(j=110;j>0;j--);
  24. }
  25. bit BusyTest(void)
  26. {
  27. bit result;
  28. RS=0;
  29. RW=1;
  30. E=1;
  31. _nop_();
  32. _nop_();
  33. _nop_();
  34. _nop_();
  35. result=BF;
  36. E=0;
  37. return result;
  38. }
  39. void WriteInstruction(unsigned char dictate)
  40. {
  41. while(BusyTest()==1);
  42. RS=0;
  43. RW=0;
  44. E=0;
  45. _nop_();
  46. _nop_();
  47. P0=dictate;
  48. _nop_();
  49. _nop_();
  50. _nop_();
  51. _nop_();
  52. E=1;
  53. _nop_();
  54. _nop_();
  55. _nop_();
  56. _nop_();
  57. E=0;
  58. }
  59. void WriteAddress(unsigned char x)
  60. {
  61. WriteInstruction(x|0x80);
  62. }
  63. void WriteData(unsigned char y)
  64. {
  65. while(BusyTest()==1);
  66. RS=1;
  67. RW=0;
  68. E=0;
  69. P0=y;
  70. _nop_();
  71. _nop_();
  72. _nop_();
  73. _nop_();
  74. E=1;
  75. _nop_();
  76. _nop_();
  77. _nop_();
  78. _nop_();
  79. E=0;
  80. }
  81. void LcdInitiate(void)
  82. {
  83. delay(15);
  84. WriteInstruction(0x38);
  85. delay(5);
  86. WriteInstruction(0x38);
  87. delay(5);
  88. WriteInstruction(0x38);
  89. delay(5);
  90. WriteInstruction(0x0c);
  91. delay(5);
  92. WriteInstruction(0x06);
  93. delay(5);
  94. WriteInstruction(0x01);
  95. delay(5);
  96. }
  97. sbit DQ=P3^3;
  98. unsigned char time;
  99. bit Init_DS18B20(void)
  100. {
  101. bit flag;
  102. DQ=1;
  103. for(time=0;time<2;time++);
  104. DQ=0;
  105. for(time=0;time<200;time++);
  106. DQ=1;
  107. for(time=0;time<10;time++);
  108. flag=DQ;
  109. for(time=0;time<200;time++);
  110. return(flag);
  111. }
  112. unsigned char ReadOneChar(void)
  113. {
  114. unsigned char i=0;
  115. unsigned char dat=0;
  116. for(i=0;i<8;i++)
  117. {
  118. DQ=1;
  119. _nop_();
  120. DQ=0;
  121. dat>>=1;
  122. _nop_();
  123. DQ=1;
  124. for(time=0;time<2;time++);
  125. if(DQ==1)
  126. dat|=0x80;
  127. else
  128. dat|=0x00;
  129. for(time=0;time<8;time++);
  130. }
  131. return(dat);
  132. }
  133. WriteOneChar(unsigned char dat)
  134. {
  135. unsigned char i=0;
  136. for(i=0;i<8;i++)
  137. {
  138. DQ=1;
  139. _nop_();
  140. DQ=0;
  141. DQ=dat&0x01;
  142. for(time=0;time<10;time++);
  143. DQ=1;
  144. for(time=0;time<1;time++);
  145. dat>>=1;
  146. }
  147. for(time=0;time<4;time++);
  148. return(dat);
  149. }
  150. void red(void)
  151. {
  152. LED_RED=0;
  153. delay(200);
  154. LED_RED=1;
  155. delay(200);
  156. }
  157. void green(void)
  158. {
  159. LED_GREEN=0;
  160. delay(200);
  161. LED_GREEN=1;
  162. delay(200);
  163. }
  164. void display_error(void)
  165. {
  166. unsigned char i;
  167. WriteAddress(0x00);
  168. i=0;
  169. while(Error[i]!='\0')
  170. {
  171. WriteData(Error[i]);
  172. i++;
  173. delay(100);
  174. }
  175. while(1);
  176. }
  177. void display_explain(void)
  178. {
  179. unsigned char i;
  180. WriteAddress(0x00);
  181. i=0;
  182. while(Error[i]!='\0')
  183. {
  184. WriteData(D1[i]);
  185. i++;
  186. delay(100);
  187. }
  188. }
  189. void display_symbol(void)
  190. {
  191. unsigned char i;
  192. WriteAddress(0x40);
  193. i=0;
  194. while(D2[i]!='\0')
  195. {
  196. WriteData(D2[i]);
  197. i++;
  198. delay(50);
  199. }
  200. }
  201. void display_dot(void)
  202. {
  203. WriteAddress(0x09);
  204. WriteData('.');
  205. delay(50);
  206. }
  207. void display_du(void)
  208. {
  209. WriteAddress(0x0C);
  210. WriteData(0xDF);
  211. delay(50);
  212. }
  213. void display_temp1(unsigned char x)
  214. {
  215. unsigned char j,k,l;
  216. j=x/100;
  217. k=(x%100)/10;
  218. l=x%10;
  219. WriteAddress(0x06);
  220. WriteData(digit[j]);
  221. WriteData(digit[k]);
  222. WriteData(digit[l]);
  223. delay(50);
  224. }
  225. void display_temp2(unsigned char x)
  226. {
  227. WriteAddress(0x0A);
  228. WriteData(digit[x]);
  229. delay(50);
  230. }
  231. void display_TS1(void)
  232. {
  233. unsigned char i;
  234. WriteAddress(0x46);
  235. i=0;
  236. while(TS1[i]!='\0')
  237. {
  238. WriteData(TS1[i]);
  239. i++;
  240. delay(50);
  241. }
  242. }
  243. void display_TS2(void)
  244. {
  245. unsigned char i;
  246. WriteAddress(0x46);
  247. i=0;
  248. while(TS2[i]!='\0')
  249. {
  250. WriteData(TS2[i]);
  251. i++;
  252. delay(50);
  253. }
  254. }
  255. void display_TS3(void)
  256. {
  257. unsigned char i;
  258. WriteAddress(0x46);
  259. i=0;
  260. while(TS3[i]!='\0')
  261. {
  262. WriteData(TS3[i]);
  263. i++;
  264. delay(50);
  265. }
  266. }
  267. void ReadyReadTemp(void)
  268. {
  269. Init_DS18B20();
  270. WriteOneChar(0xCC);
  271. WriteOneChar(0x44);
  272. for(time=0;time<100;time++);
  273. Init_DS18B20();
  274. WriteOneChar(0xCC);
  275. WriteOneChar(0xBE);
  276. }
  277. void main(void)
  278. {
  279. unsigned char TL;
  280. unsigned char TH;
  281. unsigned char TN;
  282. unsigned char TD;
  283. LcdInitiate();
  284. delay(5);
  285. if(Init_DS18B20()==1)
  286. display_error();
  287. display_explain();
  288. display_symbol();
  289. display_dot();
  290. display_du();
  291. while(1)
  292. {
  293. ReadyReadTemp();
  294. TL=ReadOneChar();
  295. TH=ReadOneChar();
  296. TN=TH*16+TL/16;
  297. TD=(TL%16)*10/16;
  298. display_temp1(TN);
  299. display_temp2(TD);
  300. delay(10);
  301. if(TN>30)
  302. {
  303. P1_0=1;P1_1=0;
  304. display_TS1();
  305. green();
  306. }
  307. if((TN<=30)&(TN>=25))
  308. {
  309. P1_0=1;P1_1=1;
  310. display_TS2();
  311. EA=0;
  312. }
  313. if(TN<25)
  314. {
  315. P1_0=0;P1_1=1;
  316. display_TS3();
  317. red();
  318. }
  319. }
  320. }

復制代碼

所有資料51hei提供下載:
課程設計.zip (18.28 KB, 下載次數: 166)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:431155 發表于 2018-11-22 14:04 | 只看該作者
很好,非常實用的一個網站
回復

使用道具 舉報

板凳
ID:431155 發表于 2018-11-22 14:06 | 只看該作者
很好,網站很實用
回復

使用道具 舉報

地板
ID:432699 發表于 2018-12-7 21:24 | 只看該作者
很好 非常實用
回復

使用道具 舉報

5#
ID:1035250 發表于 2022-6-21 00:26 來自手機 | 只看該作者
那個繼電器是起升溫降溫的嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久吹潮 | 成人国内精品久久久久一区 | 欧美中文一区 | 久久久久精 | 天天干亚洲 | 欧美精品久久久 | 夜夜骑综合 | 国产99免费视频 | 亚洲综合视频一区 | 在线免费国产视频 | 天堂一区二区三区 | 小草久久久久久久久爱六 | 在线视频中文字幕 | 日韩不卡在线 | 国产剧情一区 | 永久www成人看片 | 91精品国产日韩91久久久久久 | 秋霞在线一区 | 国产成人在线一区 | 欧美一区二区三区在线视频 | 日韩视频中文字幕 | 美女久久久久久久久 | 97高清国语自产拍 | 瑞克和莫蒂第五季在线观看 | 国产亚洲精品精品国产亚洲综合 | 在线观看中文字幕 | 天天拍天天射 | 一区二区日韩 | 国产真实精品久久二三区 | 欧洲一级毛片 | 天天天天操 | 波多野结衣亚洲 | 99精品免费久久久久久久久日本 | 精品免费国产一区二区三区四区 | 色www精品视频在线观看 | 欧美日韩国产精品一区 | 精品欧美一区免费观看α√ | 国产美女视频 | 日韩欧美三区 | 91久久精品日日躁夜夜躁欧美 | av大片在线观看 |