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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)模擬微波爐的控制器 ds18b20數(shù)據(jù)時不時跳一下

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:250518 發(fā)表于 2018-3-4 20:13 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 迷失朋友 于 2018-3-4 20:48 編輯

我自己做一個模擬微波爐的控制器,大概就是用ds18b20提供的溫度控制步進(jìn)電機(jī),怎么我用ds18b20測溫數(shù)據(jù)時不時跳一下然后又正常。有沒有人幫我看一下,可以回復(fù),也可以加我qq904784778。 微波爐.rar (28.5 KB, 下載次數(shù): 43)


單片機(jī)源程序如下:
  1. #include <reg51.h>
  2. #define  uint unsigned int
  3. #define  uchar unsigned char
  4. uchar codevalue[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //七段數(shù)碼管顯示碼,顯示0~9
  5. uint tt=20;    // 為了計時一秒,定時器一次中斷為50ms,20*50ms=1s
  6. uint tmax=30;     //火力上限
  7. uint check=0;
  8. uint m;
  9. int count_s=0;    //時間
  10. sbit P10=P1^0;                //引腳定義
  11. sbit P11=P1^1;
  12. sbit P12=P1^2;
  13. sbit P13=P1^3;
  14. sbit P14=P1^4;
  15. sbit P15=P1^5;
  16. sbit P16=P1^6;
  17. sbit P17=P1^7;
  18. sbit P20=P2^0;
  19. sbit P21=P2^1;
  20. sbit P22=P2^2;
  21. sbit P23=P2^3;
  22. sbit P24=P2^4;
  23. sbit P25=P2^5;
  24. sbit P26=P2^6;
  25. sbit P30=P3^0;
  26. sbit P31=P3^1;
  27. sbit P32=P3^2;
  28. sbit P33=P3^3;
  29. sbit P34=P3^4;
  30. sbit P35=P3^5;
  31. sbit P36=P3^6;
  32. sbit P37=P3^7;
  33. sbit DQ=P2^7;   //定義DS18B20總線I/O
  34. sbit DP=P0^7;

  35. void Delay(uint i)//延時
  36. {
  37. while( i-- );
  38. }

  39. void T_initalize()
  40. {
  41.         EA=1;            //開中斷
  42.         ET0=1;
  43.         ET1=1;           //定時器 中斷允許
  44.         TMOD=0x11;       //定時器T0 定時   方式一
  45.         TH0=0x3c;
  46.         TL0=0xaf;         //12M 晶振,65536-15536=50000,50000us*20=1000000us=1s
  47. }

  48. void Init_DS18B20(void)//初始化DS18B20
  49. {
  50.   uchar x=0;
  51.   DQ=1;
  52.   Delay(8);    //稍做延時
  53.   DQ=0;         //單片機(jī)將DQ拉低
  54.   Delay(80);   //精確延時,大于480us
  55.   DQ=1;         //拉高總線
  56.   Delay(14);
  57.   x=DQ;           //稍做延時后,如果x=0則初始化成功,x=1則初始化失敗
  58.   Delay(20);
  59. }

  60. uchar Readonechar(void)//讀一個字節(jié)
  61. {
  62.   uchar i=0;
  63.   uchar dat=0;
  64.   for (i=8;i>0;i--)
  65.   {
  66.     DQ=0;     // 給脈沖信號
  67.     dat>>=1;
  68.     DQ=1;     // 給脈沖信號
  69.     if(DQ)
  70.     dat|=0x80;
  71.     Delay(4);
  72.   }
  73.   Delay(500);
  74.   return(dat);
  75. }

  76. void Writeonechar(uchar dat)//寫一個字節(jié)
  77. {
  78.   uchar i=0;
  79.   for (i=8; i>0; i--)
  80.   {
  81.     DQ=0;
  82.     DQ=dat&0x01;
  83.     Delay(10);
  84.     DQ=1;
  85.     dat>>=1;
  86.   }
  87. }

  88. void Tmperature_change(void) //發(fā)送溫度轉(zhuǎn)換命令
  89. {
  90.   Init_DS18B20();
  91.   Writeonechar(0xCC);  //跳過讀序號列號的操作
  92.   Writeonechar(0x44);  //啟動溫度轉(zhuǎn)換
  93. }

  94. uint Read_temperature(void)//讀取溫度
  95. {
  96.   uchar a=0;
  97.   uchar b=0;
  98.   uint t=0;
  99.   Tmperature_change();
  100.   Init_DS18B20();
  101.   Writeonechar(0xCC);  //跳過讀序號列號的操作
  102.   Writeonechar(0xBE);  //讀取溫度寄存器
  103.   a=Readonechar();     //讀低8位
  104.   b=Readonechar();    //讀高8位
  105.   t=b;
  106.   t<<=8;
  107.   t=t|a;
  108.   t=t*0.0625;
  109.   return(t);
  110. }

  111. void Display_temperature()//顯示溫度
  112. {
  113. uint f,g,h,i;
  114. i=Read_temperature();  //獲取溫度值
  115. f=i/100;               //百位
  116. g=i%100/10;            //十位
  117. h=i%10;                //個位
  118. m=i;
  119. P24=1,P25=1,P26=1;
  120. P0=codevalue[h];   //顯示個位  
  121. P24=1,P25=1,P26=0;      
  122. Delay(160);  
  123. P24=1,P25=1,P26=1;
  124. P0=codevalue[g];    //顯示十位
  125. P24=1;P25=0;P26=1;
  126. Delay(160);
  127. P24=1,P25=1,P26=1;
  128. P0=codevalue[f];    //顯示百位
  129. P24=0,P25=1,P26=1;
  130. Delay(160);
  131. P24=1,P25=1,P26=1;
  132. }

  133. void Display_time()//顯示時間
  134. {
  135. uint a,b,c,d;
  136. a=count_s/600;             //取分的十位
  137. b=(count_s/60)%10;         //取分的個位                                 
  138. c=(count_s%60)/10;         //取秒的十位
  139. d=(count_s%60)%10;                  //取秒的個位
  140. P20=1,P21=1,P22=1,P23=1;
  141. P0=codevalue[d];           //顯示秒的個位
  142. P20=1,P21=1,P22=1,P23=0;
  143. Delay(150);
  144. P20=1,P21=1,P22=1,P23=1;
  145. P0=codevalue[c];           //顯示秒的十位
  146. P20=1,P21=1,P22=0,P23=1;
  147. Delay(160);
  148. P20=1,P21=1,P22=1,P23=1;
  149. P0=codevalue[b];           //顯示分的個位
  150. P20=1,P21=0,P22=1,P23=1;
  151. Delay(160);
  152. P20=1,P21=1,P22=1,P23=1;
  153. P0=codevalue[a];           //顯示分的十位
  154. P20=0,P21=1,P22=1,P23=0;
  155. Delay(160);
  156. P20=1,P21=1,P22=1,P23=1;
  157. }

  158. void Display_initalize()
  159. {
  160. P2=0xff;
  161. P0=0x40;
  162. P20=0,P21=1,P22=1,P23=1,P24=1,P25=1,P26=1;
  163. Delay(120);
  164. P2=0xff;
  165. P0=0x40;
  166. P20=1,P21=0,P22=1,P23=1,P24=1,P25=1,P26=1;
  167. Delay(120);
  168. P2=0xff;
  169. P0=0x40;
  170. P20=1,P21=1,P22=0,P23=1,P24=1,P25=1,P26=1;
  171. Delay(120);
  172. P2=0xff;
  173. P0=0x40;
  174. P20=1,P21=1,P22=1,P23=0,P24=1,P25=1,P26=1;
  175. Delay(120);
  176. P2=0xff;
  177. P0=0x40;
  178. P20=0,P21=1,P22=1,P23=1,P24=0,P25=1,P26=1;
  179. Delay(120);
  180. P2=0xff;
  181. P0=0x40;
  182. P20=0,P21=1,P22=1,P23=1,P24=1,P25=0,P26=1;
  183. Delay(120);
  184. P2=0xff;
  185. P0=0x40;
  186. P20=0,P21=1,P22=1,P23=1,P24=1,P25=1,P26=0;
  187. Delay(120);
  188. P2=0xff;
  189. }

  190. void Motor()//電機(jī)
  191. {
  192. if(check==1)
  193. {
  194. P33=1,P34=0,P35=0,P36=0;
  195. Delay(100);
  196. P33=0,P34=1,P35=0,P36=0;
  197. Delay(100);
  198. P33=0,P34=0,P35=1,P36=0;
  199. Delay(100);
  200. P33=0,P34=0,P35=0,P36=1;
  201. Delay(100);
  202. }
  203. }

  204. void Temperature_check()//溫度檢測
  205. {if(check==1)
  206. {
  207. if(m<=tmax)
  208. P17=0;
  209. if(m>tmax)
  210. P17=1;
  211. }
  212. }

  213. void Key_scan()//鍵位掃描
  214. {   
  215.         if(!P10)
  216.         {
  217.          Delay(150);
  218.                 if(!P10)
  219.                 count_s+=60;      //時間+1分
  220.         if (count_s>6000)
  221.             count_s=0;
  222.         }
  223.         
  224.     if(!P11)
  225.         {
  226.          Delay(150);
  227.                 if(!P11)
  228.                 count_s-=60;       //時間-1分
  229.         if (count_s<0)
  230.             count_s=0;
  231.         }

  232.         if(!P12)
  233.         {
  234.          Delay(150);
  235.                 if(!P12)
  236.                 tmax=50;      //小火
  237.         }

  238.         if(!P13)
  239.         {
  240.          Delay(150);
  241.                 if(!P13)
  242.             tmax=80;      //中火

  243.         }

  244.         if(!P14)
  245.         {
  246.          Delay(150);
  247.                 if(!P14)
  248.                 tmax=120;    //大火

  249.         }

  250.         if(!P15)
  251.         {
  252.          Delay(150);
  253.                 if(!P15)
  254.                 {
  255.                  P22=1;
  256.          if(count_s==0)          //如果沒有設(shè)定時間,不加熱,定時器不工作
  257.             TR0=0;
  258.          else                    //如果已經(jīng)設(shè)定時間,則開始計時,開始加熱
  259.                     {                  
  260.             T_initalize();
  261.             TR0=1;
  262.             check=1;
  263.             P17=0;
  264.             }
  265.                 }

  266.         }

  267.         if(!P16)               //停止加熱,終止定時器
  268.         {
  269.          Delay(150);
  270.                 if(!P16)
  271.                 {P17=1;
  272.                  TR0=0;
  273.          check=0;
  274.                 }
  275.         }
  276. }

  277. void t0() interrupt 1//定時
  278. {        
  279.     TR0=0;
  280.     TH0=0x3c;
  281.         TL0=0xaf;
  282.     tt--;
  283.         if (tt==0)
  284.                 {tt=20;
  285.                 count_s--;  //時間-1S
  286.         if (count_s==0)  //如果定時已到
  287.             {
  288.                          P17=1;      //停止加熱,定時器終止
  289.              TR0=0;
  290.                          check=0;
  291.              P37=0;
  292.                          Delay(500);
  293.                          P37=1;
  294.                          P37=0;
  295.                          Delay(500);
  296.                          P37=1;
  297.                          P37=0;
  298.                          Delay(500);
  299.                          P37=1;
  300.             }
  301.         else
  302.             TR0=1;        //繼續(xù)定時
  303.                 }
  304.     else
  305.         TR0=1;
  306.            
  307. }

  308. void main()
  309. {
  310. uint j;
  311. P37=0;
  312. Delay(500);
  313. P37=1;
  314. Read_temperature();
  315. for(j=0;j<100;j++)
  316. {
  317. Display_initalize();
  318. }

  319. while(1)
  320. {
  321. Key_scan();
  322. Display_temperature();
  323. Display_time();
  324. Temperature_check();
  325. }
  326. }
復(fù)制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:96682 發(fā)表于 2018-3-5 13:19 | 只看該作者
軟件仿真改改就好并非實際電路

204016kzxt66464pt77r77.png (206.36 KB, 下載次數(shù): 21)

204016kzxt66464pt77r77.png
回復(fù)

使用道具 舉報

板凳
ID:250518 發(fā)表于 2018-3-6 11:24 | 只看該作者
本帖最后由 迷失朋友 于 2018-3-6 19:18 編輯
wc86110 發(fā)表于 2018-3-5 13:19
軟件仿真改改就好并非實際電路

還是不行哦,還是會跳。
回復(fù)

使用道具 舉報

地板
ID:337139 發(fā)表于 2021-9-10 10:36 | 只看該作者
先調(diào)試DS18B20,然后再去調(diào)主程序控制部分,這樣可能會好點。
回復(fù)

使用道具 舉報

5#
ID:94031 發(fā)表于 2021-9-10 11:13 | 只看該作者
仿真的東西不要認(rèn)得太真,和實際不是一回事,有這個時間,搭電路學(xué)習(xí)更有價值。
回復(fù)

使用道具 舉報

6#
ID:844772 發(fā)表于 2021-9-10 11:34 | 只看該作者
我大致看了,因為是模擬的,所以可以排除干擾,覺得應(yīng)該是你定時中斷導(dǎo)致的問題,你在讀溫度的時候,要關(guān)中斷,讀完再開,它速度很快的,基本不影響計時。
就是加在 Readonechar(void) Writeonechar(uchar dat)兩個函數(shù)。
回復(fù)

使用道具 舉報

7#
ID:965016 發(fā)表于 2021-9-10 14:58 | 只看該作者
可能程序哪里有bug
回復(fù)

使用道具 舉報

8#
ID:517951 發(fā)表于 2021-9-11 11:27 | 只看該作者
仿真的東西還需用實物樣品來驗證,仿真通過了樣品可能還會有問題。
回復(fù)

使用道具 舉報

9#
ID:731755 發(fā)表于 2021-9-11 13:16 來自手機(jī) | 只看該作者
同意樓上的大師們,最好用實物來驗證,我買的學(xué)習(xí)板,都是在板上驗證的
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧洲高清转码区一二区 | 精品久久久久久久久久久久久久 | 中国三级黄色录像 | 日韩一级 | 精品国产一区探花在线观看 | 波多野结衣一区二区三区在线观看 | 国产精品美女久久久免费 | 欧美精品一区二区三区在线播放 | 欧美乱大交xxxxx另类电影 | 久草免费在线视频 | 国产精品一区在线观看 | 黄网站在线播放 | 国产欧美日韩在线一区 | 日本在线你懂的 | 伊人免费观看视频 | 91成人影院 | 午夜精品久久久久久久星辰影院 | 仙人掌旅馆在线观看 | 日韩在线看片 | 四虎影院在线观看免费视频 | 国产精品一区一区 | 日韩一区二区三区在线 | 91正在播放| 中文字幕视频在线观看 | 免费观看一级毛片 | 日韩一区二区三区在线播放 | 成人在线观看网址 | 一区二区三区在线看 | 亚洲一区二区三区视频 | 久久精品国产v日韩v亚洲 | 国产午夜精品视频 | 免费观看色 | 日韩免费视频一区二区 | 国产色网站 | 91精品国产综合久久婷婷香蕉 | 91伊人| 日韩欧美三级 | 久久久久国产精品一区二区 | 欧美日韩在线一区二区 | 欧洲一级毛片 | 国产乱码精品一品二品 |