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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

希望大佬們能幫我改一下單片機溫控程序 本人不才 很難查找 謝謝大家 求幫助

[復制鏈接]
跳轉到指定樓層
樓主
ID:707525 發表于 2020-4-1 09:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本設計的功能是pid溫控
這個程序數組哪里有問題   在編譯的時候會出現文件打不開的警告   
  1. #include <reg52.h>
  2. #include "ds18b20ce.h"
  3. #include "delay.h"
  4. #include "jipan.h"
  5. sbit P10=P1^0;
  6. sbit led0=P1^4;
  7. sbit beep=P1^5;
  8. unsigned char flag=0;
  9. unsigned int set_temper;
  10. unsigned int temper;
  11. unsigned int a;
  12. unsigned int b;
  13. unsigned int c,tp,tp2;
  14. unsigned int Ep,Ed,rout=0;
  15. unsigned char kp,ki,kd;
  16. unsigned char high_time,low_time=50;
  17. unsigned char count=0;
  18. int  d[4];
  19. void compare_temper(void);
  20. unsigned int pid_com(void);
  21. void main(void)
  22. {
  23. TMOD=0x01;
  24. TH0=(65536-20000)/256;
  25. TL0=(65536-20000)%256;
  26. EA=1;
  27. EX0=1;
  28. ET0=1;
  29. IT0=0;
  30. TR0=1;
  31. kp=10;
  32. ki=8;
  33. kd=6;
  34. while(1)
  35. {
  36. if(flag)
  37. {
  38. key_jian();
  39. set_temper=(d[0]*100+d[1]*10+d[2])*10+d[3];
  40. }
  41. else
  42. {
  43. tp=UpDataDS18B20();
  44. display();
  45. temper=tp*10+tp2;
  46. }
  47. }
  48. }
  49. unsigned int pid_com(void)
  50. {
  51. unsigned int n;
  52. a=(set_temper-temper)*100;
  53. Ep=kp*(a-b);
  54. Ed=kd*(a-2*b+c);
  55. n=Ep+ki*a+Ed;
  56. c=b;
  57. b=a;
  58. return n;
  59. }
  60. //PWM????????
  61. void compare_temper(void)
  62. {
  63. if(set_temper>temper)
  64. {
  65. beep=1;
  66. if(set_temper-temper>20)
  67. {
  68. high_time=100;
  69. low_time=0;
  70. }
  71. else
  72. {
  73. rout=pid_com();
  74. high_time=(unsigned char)(rout/80);
  75. if(high_time>=100)
  76. {
  77. high_time=100;
  78. }
  79. low_time=100-high_time;
  80. }
  81. }
  82. else if(set_temper<=temper)
  83. {
  84. if(temper-set_temper>0)
  85. {
  86. high_time=0;
  87. low_time=100;
  88. beep=0;
  89. }
  90. else
  91. {
  92. rout=pid_com();
  93. high_time=(unsigned char)(rout/100);
  94. if(high_time>=100)
  95. {
  96. high_time=0;
  97. }
  98. low_time=100-high_time;
  99. }
  100. }
  101. }
  102. void int0 ()
  103. interrupt 0
  104. {
  105. flag=~flag;
  106. }
  107. //?????T0?ж??????
  108. void timer_t0()
  109. interrupt 1
  110. {
  111. TH0=(65536-30000)/256;
  112. TL0=(65536-30000)%256;
  113. count++;
  114. led0=1;
  115. if(count>100)
  116. {
  117. count=0;
  118. }
  119. if(count<high_time)
  120. {
  121. P10=0;
  122. }
  123. else
  124. {
  125. P10=1;
  126. }
  127. if(count==0)
  128. {
  129. led0=0;
  130. compare_temper();
  131. }
  132. }
  133. //DS18B20?????,DS18B20????
  134. #include"ds18b20ce.h"
  135. #include"delay.h"
  136. #include<reg52.h>
  137. #define DQ_HIGH()DQ=1
  138. #define DQ_LOW() DQ=0
  139. sbit DQ = P1^1;
  140. bit DS18B20Init(void)
  141. {
  142. bit flag;
  143. DQ_LOW();
  144. delay(80);
  145. DQ_HIGH();
  146. delay(7);
  147. if(DQ==0)
  148. {
  149. flag=1;
  150. }
  151. else
  152. {
  153. flag=0;
  154. }
  155. delay(20);
  156. return flag;
  157. }
  158. void WriteDS18B20(unsigned char ch)
  159. {
  160. unsigned char i;
  161. for(i=0;i<8;i++)
  162. {
  163. if(ch&0x01)
  164. {
  165. DQ_LOW();
  166. delay(1);
  167. DQ_HIGH();
  168. delay(5);
  169. }
  170. else
  171. {
  172. DQ_LOW();
  173. delay(7);
  174. DQ_HIGH();
  175. }
  176. ch>>=1;
  177. }
  178. }
  179. unsigned char ReadDS18B20(void)
  180. {
  181. unsigned char i,ReValue;
  182. for(i=0;i<8;i++)
  183. {
  184. DQ_LOW();
  185. delay(0);
  186. DQ_HIGH();
  187. ReValue>>=1;
  188. if(DQ==1)
  189. {
  190. ReValue|=0x80;
  191. }
  192. else
  193. {
  194. ReValue&=0x7f;
  195. }
  196. delay(2);
  197. }
  198. return ReValue;
  199. }
  200. unsigned char UpDataDS18B20(void)
  201. {
  202. unsigned char Temp_H,Temp_L;
  203. DS18B20Init();
  204. WriteDS18B20(0xcc);
  205. WriteDS18B20(0x44);
  206. delay(800);
  207. DS18B20Init();
  208. WriteDS18B20(0xcc);
  209. WriteDS18B20(0xbe);
  210. Temp_L=ReadDS18B20();
  211. Temp_H=ReadDS18B20();
  212. tp2=Temp_L&0x0f;
  213. tp2=tp2*6.25/10;
  214. Temp_L>>=4;
  215. Temp_H<<=4;
  216. Temp_L|=Temp_H;
  217. return Temp_L;
  218. }
  219. //??????????????????????????
  220. #include"jipan.h"
  221. #include"delay.h"
  222. #include"ds18b20ce.h"
  223. #include<reg52.h>
  224. unsigned char tp2;
  225. unsigned int tp;
  226. sbit k1=P3^0;//?????
  227. sbit k2=P3^1;//?????
  228. sbit k3=P3^2;//??????????
  229. unsigned char num1,num2,n=0;
  230. unsigned char b[4]={0,5,0,0};
  231. unsigned char code smg_du1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  232. unsigned char code smg_du2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
  233. unsigned char code smg_we[]={0x01,0x02,0x04,0x08};
  234. void key_jian()
  235. {
  236. unsigned char i;
  237. if((k1==1)&&(k2==1))
  238. {
  239. for(i=0;i<4;i++)
  240. {
  241. P2=smg_we[i];
  242. n=b[i];
  243. if(i==2)
  244. {
  245. P0=smg_du2[n];
  246. }
  247. else
  248. {
  249. P0=smg_du1[n];
  250. }
  251. delay_50us(15);
  252. }
  253. }
  254. if(k1==0)
  255. {
  256. delay_50us(200);
  257. if(k1==0)
  258. {
  259. num1++;
  260. if(num1==10)num1=0;
  261. while(!k1);
  262. }
  263. delay_50us(200);
  264. while(!k1);
  265. }
  266. else
  267. {
  268. P0=smg_du1[num1];
  269. switch(num2)
  270. {
  271. case 0:b[0]=num1;
  272. break;
  273. case 1:b[1]=num1;
  274. break;
  275. case 2:b[2]=num1;
  276. break;
  277. case 3:b[3]=num1;
  278. break;
  279. }
  280. }
  281. if(k2==0)
  282. {
  283. delay_50us(200);
  284. if(k2==0)
  285. {
  286. num2++;
  287. num1=0;
  288. if(num2==4)num2=0;
  289. while(!k2);
  290. }
  291. delay_50us(200);
  292. while(!k2);
  293. }
  294. else
  295. {
  296. P2=smg_we[num2];
  297. }
  298. }
  299. void display(void)
  300. {
  301. if((tp/100)==0)
  302. {
  303. P2=0x00;
  304. }
  305. else
  306. {
  307. P2=smg_we[0];
  308. P0=smg_du1[tp/100];
  309. }
  310. delay_50us(20);
  311. if((((tp%100)/10)==0)&&((tp/100)==0))
  312. {
  313. P2=0x00;
  314. }else
  315. {
  316. P2=smg_we[1];
  317. P0=smg_du1[(tp%100)/10];
  318. }
  319. delay_50us(20);
  320. P2=smg_we[2];
  321. P0=smg_du2[tp%100%10];
  322. delay_50us(20);
  323. P2=smg_we[3];
  324. P0=smg_du1[tp2];
  325. delay_50us(20);
  326. }
  327. //???????????????
  328. #include"delay.h"
  329. void delay_50us(uint?t)
  330. {
  331. unsigned char j;
  332. for(;t>0;t--)
  333. for(j=19;j>0;j--);
  334. }
  335. void delay(uint us)
  336. {
  337. while(us--);
  338. }
復制代碼

仿真圖.7z

22.99 KB, 下載次數: 5, 下載積分: 黑幣 -5

proteus文件

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

使用道具 舉報

沙發
ID:619594 發表于 2020-4-2 14:10 | 只看該作者
你好!
就發了這么多程序,就不說點什么嗎!
1、把你所要實現的功能要求說清楚
2、現在的程序存在的問題是什么?
3、驗收的時候直接看仿真嗎?還是要做實物?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲经典一区 | 精品一区二区三区免费视频 | 九九国产 | 国产高清在线精品 | 国产精品久久久久久久久久 | 国产一级一级国产 | 亚洲精品3 | 久久精品一区二区 | 国产精品视频播放 | 亚洲欧美日韩电影 | 成人精品国产一区二区4080 | 久草免费在线视频 | 国产成人精品一区二区三区网站观看 | 亚洲乱码一区二区 | 亚洲午夜精品一区二区三区 | 久久精品色欧美aⅴ一区二区 | 亚洲午夜电影 | 欧美日韩亚洲二区 | 日本天堂一区 | 日韩理论电影在线观看 | 国产精品美女久久久久久久久久久 | 91精品国产综合久久国产大片 | 欧美日一区 | 欧美精品中文字幕久久二区 | 午夜亚洲 | 亚州一区二区三区 | 在线一区二区三区 | 国产高清免费视频 | 国产精品高清一区二区三区 | 久久久久久久久久久久一区二区 | 视频一区二区在线观看 | 91精品国产91久久久久游泳池 | 台湾a级理论片在线观看 | 色婷婷亚洲国产女人的天堂 | 成人免费网视频 | 户外露出一区二区三区 | 欧美精品在线免费 | 精品伊人久久 | 国产乱性| 亚洲欧洲一区二区 | 日一区二区 |