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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5387|回復(fù): 4
收起左側(cè)

51單片機(jī)+max6675模塊+K型熱電偶的高溫可調(diào)PID溫控系統(tǒng)源程序

[復(fù)制鏈接]
ID:512894 發(fā)表于 2019-6-17 13:36 | 顯示全部樓層 |閱讀模式
單片機(jī)源程序如下:
  1. #include <reg52.h>
  2. #include<intrins.h>
  3. #include<string.h>
  4. #include <stdio.h>
  5. #include <math.h>
  6. #define uchar unsigned char
  7. #define uint unsigned int//位定義
  8. //max6675
  9. sbit SO= P1^0;
  10. sbit CS= P1^1;
  11. sbit SCK=P1^2;
  12. //按鍵
  13. sbit key1=P1^5;                //功能鍵
  14. sbit key2=P1^6;                //+
  15. sbit key3=P1^7;                //-
  16. sbit BEEP=P1^3;                //蜂鳴器
  17. sbit RELAY=P1^4;        //繼電器
  18. //DAC0832
  19. //sbit CSDA=P3^2;
  20. //sbit wr=P3^6;

  21. //int high_limit=1250; //上限溫度,默認(rèn)值為1250
  22. int Temp_set=250;    //設(shè)定目標(biāo)溫度,默認(rèn)值為250
  23. int Temp_true;
  24. int set_status=0;
  25. uchar qian=0,bai=0,shi=0,ge=0,xiao=0;
  26. uchar smg[8];
  27. //float Kp,Ki,Kd;
  28. uchar num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰極數(shù)碼管賦值  0,1,2,3,4,5,6,7,8,9
  29. //uchar num_p[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//共陽(yáng)極數(shù)碼管帶小數(shù)點(diǎn)賦值  0,1,2,3,4,5,6,7,8,9
  30. uchar choose[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//數(shù)碼管位選
  31. //sbit dula=P2^6;        //數(shù)碼管段選,鎖存器控制信號(hào)
  32. //sbit wela=P2^7;        //數(shù)碼管位選,鎖存器控制信號(hào)
  33. uint  Re_Convert();        //熱電偶數(shù)據(jù)讀取,返回溫度
  34. //int ek=0;
  35. //int eset_statu=0;                //第K-1采樣時(shí)的偏差值,Error[-1]
  36. //int ek2=0;                        //第K-2采樣時(shí)的偏差值,Error[-2]
  37. //float LastOutput=0;        //上次PID輸出
  38. //float Output=0;                //PID的輸出
  39. //uchar high_time,low_time,count=0;                //占空比調(diào)節(jié)參數(shù)
  40. //---------------------------延時(shí)子程序---------------------------//
  41. void delay(uint z)
  42. {
  43.         uint i,j;
  44.         for(i=z;i>0;i--)
  45.                 for(j=110;j>0;j--);
  46. }
  47. void delay_50ms(uint m)
  48. {
  49.         uchar x,y;  
  50.         for(x=m;x>0;x--)
  51.                 for(y=50;y>0;y--) ;
  52. }
  53. /*********** MAX6675函數(shù)***********/
  54. uint Re_Convert() //熱電偶數(shù)據(jù)讀取,返回溫度
  55. {
  56.         long int a=0x7ff8;
  57.         long int wendu=0,wendu_1;
  58.         float wendu_2;
  59.     uint i;
  60.         CS=1;
  61.         SCK=0;
  62.         delay(200);
  63.         _nop_();
  64.         _nop_();
  65.         CS=0;
  66.         for(i=1;i<=16;i++)
  67.           {        wendu=wendu<<1;
  68.                 _nop_();
  69.                  SCK=1;
  70.                 if(SO==1){wendu=wendu|0x01;}
  71.                    else wendu=wendu|0x00;
  72.                 _nop_();
  73.                 _nop_();
  74.                 SCK=0;
  75.                 _nop_();
  76.                 _nop_();
  77.           }
  78.         wendu_1=wendu&a;
  79.         wendu_1=wendu_1>>3;
  80.         wendu_2=wendu_1*0.25;
  81.         return wendu_2;                        //返回帶兩位小數(shù)的實(shí)際溫度
  82.         //wendu=wendu_2*100;        //放大100倍轉(zhuǎn)成整型常數(shù)
  83.         //return wendu;                        //返回整型常數(shù)便于顯示小數(shù)位數(shù)字
  84. }
  85. //*************溫度顯示程序*******************//
  86. void Disp_temp_true(uint temp)//溫度顯示
  87. {
  88.           unsigned char i;
  89.         unsigned int j;
  90.         ge=temp%10; //取個(gè)數(shù)位數(shù)字
  91.         temp=temp/10;
  92.         shi=temp%10;//取十位數(shù)字
  93.         temp=temp/10;
  94.         bai=temp%10;//取百位數(shù)字
  95.         qian=temp/10;//取千位數(shù)字
  96.           smg[0]=num[qian];
  97.         smg[1]=num[bai];
  98.         smg[2]=num[shi];
  99.         smg[3]=num[ge];
  100.         /*
  101.         for(i=0; i<4; i++)
  102.         {
  103.                 P2=choose[i];  //數(shù)碼管位選
  104.                 P0=smg[i];  //送數(shù)字到段碼端口,顯示數(shù)字
  105.                 j = 10;                        //掃描間隔時(shí)間設(shè)定
  106.                 while(j--);        
  107.                 P0 = 0x00;//消隱
  108.         }
  109.         */
  110. }

  111. //*************溫度設(shè)置顯示程序*******************//
  112. void Disp_temp_set(uint set)//溫度設(shè)置顯示
  113. {
  114.          unsigned char i;
  115.         unsigned int j;
  116.         ge=set%10; //取個(gè)數(shù)位數(shù)字
  117.         set=set/10;
  118.         shi=set%10;//取十位數(shù)字
  119.         set=set/10;
  120.         bai=set%10;//取百位數(shù)字
  121.         qian=set/10;//取千位數(shù)字
  122.           smg[4]=num[qian];
  123.         smg[5]=num[bai];
  124.         smg[6]=num[shi];
  125.         smg[7]=num[ge];
  126.         /*
  127.         for(i=4; i<8; i++)
  128.         {
  129.                 P2=choose[i];  //數(shù)碼管位選
  130.                 P0=smg[i];  //送數(shù)字到段碼端口,顯示數(shù)字
  131.                 j = 10;                        //掃描間隔時(shí)間設(shè)定
  132.                 while(j--);        
  133.                 P0 = 0x00;//消隱
  134.         }
  135.         */
  136. }


  137. //*************報(bào)警子程序*******************//
  138. void Alarm()//蜂鳴器間斷
  139. {
  140.         if(Temp_true>Temp_set)
  141.         {
  142.                 int b;
  143.                 for(b=100;b>0;b--)
  144.                 {
  145.                         BEEP=1;
  146.                         delay_50ms(10);
  147.                         BEEP=0;
  148.                         delay_50ms(10);
  149.                 }
  150.         }
  151. }

  152. void compare_temper()
  153. {
  154.         uint temper=Temp_true;
  155.         if(temper>=Temp_set)                //實(shí)際溫度是否大于設(shè)置的溫度
  156.         {
  157.                 RELAY=1;
  158.         }
  159.         else if(temper<Temp_set)
  160.         {
  161.                 RELAY=0;
  162.         }
  163. }

  164. //*******按鍵子程序*******//
  165. void keyset()
  166. {
  167.         #if 1
  168.                 if(key1 == 0){
  169.                         set_status =!set_status;
  170.                 }
  171.                 if(set_status==1){
  172.                         if(key1==0)
  173.                         {
  174.                                 set_status =!set_status;
  175.                         }

  176.                         if(key2==0)
  177.                         {
  178.                                 Temp_set=Temp_set+10;
  179.                                 Disp_temp_set(Temp_set);
  180.                                 //delay_50ms(1);
  181.                                 //while(!key2);
  182.                         }

  183.                         if(key3==0)
  184.                         {
  185.                                 Temp_set=Temp_set-10;
  186.                                 Disp_temp_set(Temp_set);
  187.                                 //delay_50ms(10);
  188.                                 //while(!key3);
  189.                         }
  190.                 }
  191.         }
  192.         #else
  193.                
  194.         if(set_status==0)
  195.         {
  196.                 if(key1==0)
  197.                 {
  198.                         set_status=1;
  199.                 }
  200.         }
  201.         else{
  202.                 //while(set_status==1)
  203.                 {
  204.                         if(key1==0)
  205.                         {
  206.                                 set_status=0;
  207.                         }

  208.                         if(key2==0)
  209.                         {
  210.                                 Temp_set=Temp_set+10;
  211.                                 Disp_temp_set(Temp_set);
  212.                                 //delay_50ms(1);
  213.                                 //while(!key2);
  214.                         }

  215.                         if(key3==0)
  216.                         {
  217.                                 Temp_set=Temp_set-10;
  218.                                 Disp_temp_set(Temp_set);
  219.                                 //delay_50ms(10);
  220.                                 //while(!key3);
  221.                         }
  222.                 //}

  223.         }  
  224.         #endif
  225. }

  226. void init_sys() //系統(tǒng)初始化
  227. {
  228. IT0=1;
  229. EX0=1;
  230. ET0=1;
  231. EA=1;
  232. TMOD=1;
  233.         TH0=0xfc;
  234.         TL0=0x66;//裝初值,定時(shí)時(shí)間為1ms
  235.         ET0=1;        //打開定時(shí)器0的大門
  236.         TR0=1;
  237. P0=0xc0;

  238. }


  239. //*************主程序*******************//
  240. void main()
  241. {  
  242. //        Kp=1.2;
  243. //        Ki=3.4;
  244. //        Kd=5.6;
  245.         init_sys();
  246.         delay_50ms(1);
  247.         while(1)
  248.         {  
  249.                 Temp_true=Re_Convert();// 熱電偶數(shù)據(jù)讀取,返回溫度
  250.                 compare_temper();
  251.                 Disp_temp_true(Temp_true);
  252.                 Disp_temp_set(Temp_set);
  253.                 //if(key1==0)
  254.                 {
  255.                         keyset();
  256.                 }
  257.                 //PID();  
  258.                 Alarm();
  259.                 //delay_50ms(6);
  260.         }
  261. }

  262. void Dsqi0() interrupt 1
  263. {
  264.         long int i=0;
  265.         uchar c=0xfe;
  266.     TH0=0xfc;
  267.     TL0=0x66;
  268.         P2=0xff;
  269.         P0=smg[i];
  270.         P2=c;
  271.         c=_crol_(c,1);
  272.         i=i+1;
  273.         if(i==8)
  274.         {
  275.                 i=0;
  276.                 c=0xfe;
  277.         }                           
  278. }
復(fù)制代碼

所有資料51hei提供下載:
max6675.rar (43.63 KB, 下載次數(shù): 197)
回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2019-6-17 16:03 | 顯示全部樓層
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復(fù)

使用道具 舉報(bào)

ID:742297 發(fā)表于 2020-5-1 14:40 來(lái)自手機(jī) | 顯示全部樓層
請(qǐng)問(wèn)有對(duì)應(yīng)原理圖嗎
回復(fù)

使用道具 舉報(bào)

ID:64825 發(fā)表于 2020-10-19 09:36 | 顯示全部樓層
未包含pid程序部分
回復(fù)

使用道具 舉報(bào)

ID:462629 發(fā)表于 2021-12-28 09:53 | 顯示全部樓層
補(bǔ)全電路原理圖,源碼了嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美成人一区二区 | 久久99精品久久久久久噜噜 | 日韩精品视频在线免费观看 | 国产日韩视频 | 日本三级日产三级国产三级 | 精品福利在线 | 射欧美 | 福利在线看 | 99在线精品视频 | 国产成人精品久久 | 国产精品久久精品 | 一区二区三区四区在线视频 | 国产日韩欧美91 | 激情视频一区 | www.99热这里只有精品 | 中文字幕亚洲视频 | 亚洲国产一区二区三区四区 | 免费1区2区3区 | 两性午夜视频 | 精品福利一区二区三区 | 久久www免费人成看片高清 | 国内精品伊人久久久久网站 | 久久婷婷色 | 亚洲视频在线观看免费 | 国产一区二区三区四区hd | 国产精品视频在线播放 | 国产成人精品一区二区三区在线 | 99riav国产一区二区三区 | 欧美 日韩 国产 一区 | 亚洲有码转帖 | 久久久国产精品 | 亚洲免费精品 | 99久久亚洲| 精品国产乱码久久久久久影片 | 午夜色播| 麻豆视频在线免费观看 | 台湾a级理论片在线观看 | 中文字幕在线播放第一页 | 欧美福利视频一区 | 精品久久影院 | 色婷婷九月 |