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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2152|回復: 1
收起左側

溫度控制課程設計

[復制鏈接]
ID:193753 發表于 2017-4-26 11:12 | 顯示全部樓層 |閱讀模式
  1. #include<reg52.h>
  2. #include<serial.h>
  3. #include<math.h>
  4. #include <intrins.h>
  5. #define uchar unsigned char
  6. #define uint  unsigned int

  7. #define target 65                                                        //設定溫度目標值
  8. int aa=0,bb=0;                                    // aa,bb是用于顯示時間的變量
  9. signed long  error=0,d_error=0,dd_error=0;        //相當于公式中的e(k),e(k-1),e(k-2);
  10. int k=14,ti=5;td=16,det_t,pwm,m=0;
  11. //unsigned char YSJS=0;
  12. float t;


  13. uint tmpvalue=0, value;   //tmpvalue是暫時值 value是最終溫度值
  14. int high,low;
  15. sbit P23=P2^3;
  16. sbit P22=P2^2;
  17. sbit DQ = P2^1;                 //P2.1作為連接DS18B20的I/O口
  18. sbit p0=P1^0;
  19. sbit p1=P1^1;
  20. sbit p2=P1^2;
  21. sbit p3=P1^3;                  //P1.3和P1.4作為升溫電路的控制端
  22. sbit p4=P1^4;                                                                                   
  23. sbit p5=P1^5;        //P1.5~P1.7控制八個七段數碼管的亮滅
  24. sbit p6=P1^6;
  25. sbit p7=P1^7;


  26.                

  27. void delayms(int o)   //用于數碼管顯示的延時
  28. {
  29.     unsigned char a1,b1,c1;
  30.         int x=o;
  31.         for(;o>0;o--)
  32.     for(c1=4;c1>0;c1--)
  33.         for(b1=21;b1>0;b1--)
  34.             for(a1=14;a1>0;a1--);
  35.                         }
  36. void init()                 //定時器初始化
  37. {       
  38.         TMOD=0x21;
  39.         TH0=(65536-50000)/256;
  40.         TL0=(65536-50000)%256;
  41.         EA=1;
  42.         ET0=1;
  43.         TR0=1;       
  44. }

  45. /***************八段管顯示碼***************/

  46. code uchar LEDmap[]  ={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
  47. code uchar BITaddr[] ={0x0f, 0x2f, 0x4f, 0x6f, 0x8f, 0xaf, 0xdf, 0xef};                          //數碼管位選地址
  48. uchar code LEDmap1[] ={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};        //帶小數點數字編碼

  49. /***************ds18b20的程序***************/

  50. void delay(unsigned int i)
  51. {
  52.         while(i--);
  53. }
  54. void Init_DS18B20(void)
  55. {
  56.         unsigned char x=0;
  57.         DQ = 1; //DQ復位
  58.         delay(8); //稍做延時
  59.         DQ = 0; //單片機將DQ拉低
  60.         delay(80); //精確延時 大于 480us
  61.         DQ = 1; //拉高總線
  62.         delay(14);
  63.         x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
  64.         delay(20);
  65. }

  66. //讀一個字節
  67. int ReadOneChar()
  68. {
  69.         unsigned char i=0;
  70.         unsigned char dat = 0;
  71.         for (i=8;i>0;i--)
  72.                 {
  73.                         DQ = 0; // 給脈沖信號
  74.                         dat>>=1;
  75.                         DQ = 1; // 給脈沖信號
  76.                         if(DQ)
  77.                         dat|=0x80;
  78.                         delay(4);
  79.                 }
  80.         return(dat);
  81. }

  82. //寫一個字節
  83. void WriteOneChar(unsigned char dat)
  84. {
  85.         unsigned char i=0;
  86.         for (i=8; i>0; i--)
  87.                 {
  88.                         DQ = 0;
  89.                         DQ = dat&0x01;
  90.                         delay(5);
  91.                         DQ = 1;
  92.                         dat>>=1;
  93.                 }
  94. }

  95. //DS18B20程序讀取溫度
  96. void ReadTemperature()
  97. {
  98.         Init_DS18B20();
  99.         WriteOneChar(0xCC); // 跳過讀序號列號的操作
  100.         WriteOneChar(0x44); // 啟動溫度轉換
  101.         Init_DS18B20();
  102.         WriteOneChar(0xCC); //跳過讀序號列號的操作
  103.         WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
  104.         low=ReadOneChar();
  105.         high=ReadOneChar();
  106.         tmpvalue = high;
  107.         tmpvalue =(tmpvalue<<8);
  108.         tmpvalue=tmpvalue | low;
  109.         value=tmpvalue*0.0625;
  110.         t=tmpvalue*0.625;
  111. }               
  112. /***************主函數****************/

  113. void main()
  114. {  
  115.    int i=0;       
  116.    init();                 //初始化子程序
  117.    uart_init();
  118.     P23 = 1;
  119.    P22 = 1;
  120.    delayms(9500);
  121.    P23 = 0;
  122.    P22 = 0;
  123.    while(1)
  124.                    {
  125.                                                
  126.                    if((bb%3)==0)                  //每三秒掃描一次 ,采樣周期3s
  127.                                 {                       
  128.                                     dd_error=d_error;
  129.                                         d_error=error;               
  130.                                         error = (signed long)(target-value);//求e(k)             //求e(k-1)            //求e(k-2)                                                                                                                                                         
  131.                                         det_t=k*(error-d_error)+(k*3/ti)*error+(k*td/3)*(error-2*d_error+dd_error);                //增量公式           */
  132.       // det_t=20*(error-d_error)+0.15*error+10*(error-2*d_error+dd_error);                //增量公式           */


  133.                                         pwm=det_t;
  134.                                         if((error>10)||(pwm>60))pwm=60;       
  135.                                 }                                                                                               
  136.                                         ReadTemperature();                                                               
  137.                                         p5=0;p6=0;p7=0;P0=LEDmap[bb%10];delayms(1);                           //在數碼管上顯示時間
  138.                                         p5=1;p6=0;p7=0;P0=LEDmap[bb%100/10];delayms(1);                  
  139.                                         p5=0;p6=1;p7=0;P0=LEDmap[bb%1000/100];delayms(1);
  140.                                         p5=1;p6=1;p7=0;P0=LEDmap[bb/1000];delayms(1);                   //
  141.                                         p5=0;p6=0;p7=1;P0=LEDmap[(int)t%10];delayms(1);                   //溫度小數顯示
  142.                                         p5=1;p6=0;p7=1;P0=LEDmap1[value%10];delayms(1);                   //溫度個位及小數點顯示
  143.                                         p5=0;p6=1;p7=1;P0=LEDmap[value%100/10];delayms(1);           //溫度十位顯示                                                                                                                                                                               
  144.                                 if(i++>100)
  145.                         {
  146.                             Uart_SendChar(0x5a);                          
  147.                                         Uart_SendChar(value%100/10);
  148.                             Uart_SendChar(value%10);
  149.                             Uart_SendChar((int)t%10);
  150.                             Uart_SendChar(0);
  151.                             i=0;
  152.                         }               

  153.        
  154.                 }
  155. }                 

  156. void timer0()          interrupt 1
  157. {
  158.         TH0=(65536-50000)/256;
  159.         TL0=(65536-50000)%256;
  160.         aa++;
  161.         if(aa==20){aa=0;bb++;}        //計時1s
  162.         if(m<pwm){p3=1;p4=1;}        //電機啟動,加熱
  163.         if((m>=(pwm))||(value>=target)){p3=0;p4=0;} //電機關閉,停止加熱
  164.         if(m==60)m=0;                                                               
  165.          m++;               
  166. }
復制代碼

從硬件電路開始學習,然后編寫程序對加熱杯內的水溫進行控制。能夠完成水溫在
65攝氏度的穩定性實驗,并計算了超調和穩態誤差。
升溫速率可以為1--4/分鐘,分階段升溫編制信號采樣程序,轉換顯示以及在數碼管上時鐘顯示(秒表)。達到設定溫度穩定后加入擾動,控制加熱算法,使其快速達到溫度設定值。

回復

使用道具 舉報

ID:190190 發表于 2017-5-5 12:04 | 顯示全部樓層
有圖嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩国产在线观看 | 久久精品欧美一区二区三区不卡 | 久草在线中文888 | 国产成人免费在线 | 黄色在线免费观看视频 | 国产精品久久 | 成人在线不卡 | 国产精品成人久久久久 | 亚洲激精日韩激精欧美精品 | 亚洲欧美日韩精品久久亚洲区 | 黑人精品欧美一区二区蜜桃 | 欧美一二三四成人免费视频 | 91久久久久久久久 | 久草视频观看 | 久久精品电影 | 免费在线观看一区二区 | 夜夜草天天草 | 精品视频一区二区在线观看 | 日本不卡免费新一二三区 | 久久精品国产免费高清 | 一区二区中文 | 一级网站 | 国产一级视频在线观看 | 国内av在线 | 国产98色在线 | 日韩 | 综合亚洲视频 | 99久视频| 亚洲成人一区二区三区 | 精品婷婷| 欧美日韩精品中文字幕 | 伊人久久综合 | 99成人免费视频 | 丁香六月伊人 | 欧美高清视频一区 | 九九综合 | 伊人久久精品 | 欧美aⅴ | 我要看黄色录像一级片 | 国产精品美女一区二区三区 | 欧美日韩在线免费 | 日韩在线第一 |