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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

1602屏電烙鐵控制的單片機源碼 EC11旋轉調溫

  [復制鏈接]
跳轉到指定樓層
樓主
ID:55815 發表于 2018-6-6 15:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
EC11旋轉調溫電烙鐵制作資料

單片機源程序如下:
  1. /******************************************************************
  2. 本程序只供學習使用,未經作者許可,不得用于其它任何用途
  3. 程序結構參考 安徽師范大學  Lyzhangxiang的EasyHW OS結構設計
  4. Main.C  file
  5. 作者:bg8wj
  6. 版本:V1.0
  7. Copyright(C) bg8wj
  8. /*******************************************************************/
  9. #include "ioconfig.h"
  10. #include "includes.h"
  11. #include "datacomm.h"

  12. /***********************按鍵定義*************************************************/
  13. sbit key0=P1^0;
  14. //sbit key2=P1^1;
  15. //sbit key3=P3^3;




  16. #define uint unsigned int
  17. #define uchar unsigned char
  18. unsigned char status=0;  //按鍵功能選擇定義(bai0,shi1,ge0
  19. unsigned char ge,shi,bai=2;



  20. void Init_INT0()
  21. {
  22. IT0 = 1;                                                   
  23. EX0 = 1;                                             
  24. EA  = 1;         
  25.   
  26. }

  27. void ISR0()  interrupt 0   
  28. {   
  29.     if(!status==0){     //防止空轉
  30.          if((P3&0x06) == 0x02)   
  31.    {   
  32.      DelayMs(1);   
  33.      if((P3&0x06) == 0x02)   
  34.        if(set_temper==500)  //最大值
  35.        {   
  36.          set_temper=500;   
  37.         }   
  38.         else   
  39.         {   
  40.            set_temper++;   
  41.          }   
  42.          
  43.    }                                                                                                
  44.    else   
  45.    {   
  46.      DelayMs(1);   
  47.      if((P3&0x06) == 0x00)   
  48.       if(set_temper==200)   // 最小值
  49.        {   
  50.             set_temper=200;   
  51.         }   
  52.         else   
  53.         {   
  54.            set_temper--;   
  55.          }   
  56.         
  57.    }   

  58. }
  59.    

  60. }      
  61.    
  62. /*****************************按鍵功能函數*************************************/
  63. void key_1()     //選擇變量函數
  64. {
  65. key0=1;
  66. if(key0==0)
  67.   DelayMs(10);                                                                                                                                                                                                                                
  68. {
  69.   if(key0==0)
  70.   {
  71.    if(++status>1)status=0; //1bai,2shi,3ge
  72.   }      
  73.   while(key0==0);
  74. }
  75. }


  76. /************************************************
  77.               PID函數
  78. *************************************************/
  79. void PIDInit (struct PID *pp)
  80. {
  81.   memset ( pp,0,sizeof(struct PID));
  82. }
  83. /************************************************
  84.               增量控制PID函數體
  85. 51單片機最不擅長浮點數計算,轉換成int型計算
  86. *************************************************/
  87. unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint )
  88. {
  89.   unsigned int dError,Error,pError;
  90.   //增量法計算公式:
  91.   //Pdt=Kp*[E(t)-E(t-1)]+Ki*E(t)+Kd*[E(t)-2*E(t-1)+E(t-2)]
  92.   Error = set_temper - NextPoint;       // 偏差E(t)
  93.   pError=Error-pp->LastError;         //E(t)-E(t-1)
  94.   dError=Error-2*pp->LastError+pp->PrevError; //E(t)-2*E(t-1)+E(t-2)
  95.   pp->PrevError = pp->LastError;
  96.   pp->LastError = Error;
  97.   return (
  98.             pp->Proportion * pError        //比例
  99.             + pp->Integral *Error  //積分項
  100.             + pp->Derivative * dError          // 微分項
  101.                         );  
  102. }

  103. /************************************************
  104.                                 PID函數初始化
  105. *************************************************/
  106. void PIDBEGIN()
  107. {
  108.   PIDInit(&spid); // Initialize Structure
  109.   spid.Proportion = 10; // Set PID Coefficients
  110.   spid.Integral = 5;
  111.   spid.Derivative =4;
  112. }
  113. /************************************************
  114.                          實時溫度讀取函數
  115. 從DS18b20中讀取實時溫度
  116. 返回值放大10倍便于PID計算
  117. *************************************************/
  118. int ReadTemperature(void)
  119. {
  120.         unsigned char TPL=0;
  121.         unsigned char TPH=0;
  122.         unsigned int temperture=0;

  123.         //EA = 0;                 
  124.         Init_DS18B20();
  125.         WriteOneChar(0xCC); //跳過讀序號列號的操作
  126.         WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
  127.         TPL=ReadOneChar();        //讀溫度低字節
  128.         TPH=ReadOneChar();        //讀溫度高字節

  129.         //啟動下一次溫度轉換
  130.         Init_DS18B20();
  131.         WriteOneChar(0xCC); // 跳過讀序號列號的操作
  132.         WriteOneChar(0x44); // 啟動溫度轉換
  133.          //temperture=(TPH*256+TPL)*0.0625   //真實溫度值 范圍(+125,-55)
  134.         if(TPH&0xfc)
  135.          {
  136.            tp_flag=1;    //負溫度標記
  137.            temperture=((TPH<<8)|TPL);
  138.            temperture=((~temperture)+1);
  139.            temperture*=0.625+0.5;
  140.          }
  141.         else
  142.          {
  143.            tp_flag=0;
  144.            //temperture=((TPH<<8)|TPL)*0.0625 //溫度輸出值范圍(125.00,-55.00)
  145.            temperture=((TPH<<8)|TPL)*0.625+0.5;   //溫度值放大10(+1250.00,-550.00)
  146.          }                                                                        //         +0.5四舍五入 精度只到小數后一位
  147.         return(temperture);         
  148. }
  149. /************************************************
  150.                                   lcd1602顯示函數
  151. *************************************************/
  152. void xianshi(void)
  153. {
  154.     LCD_Write_String(0,0,"NOW TMP:");
  155.         LCD_Write_String(0,1,"SET TMP:");
  156. }
  157. /************************************************
  158.                         lcd1602顯示實時溫度
  159. *************************************************/
  160. void view(unsigned int tmp)
  161. {
  162.         LCD_Write_Char(15,0,'C');
  163.         LCD_Write_Char(14,0,0xdf);//攝氏溫度符號
  164.         LCD_Write_Char(13,0,zhi[tmp%10]);//小數點后第1位
  165.         LCD_Write_Char(12,0,'.');                 
  166.         LCD_Write_Char(11,0,zhi[tmp%100/10]);//        個位
  167.         LCD_Write_Char(10,0,zhi[tmp/100]);         //十位
  168.         if(0==tmp/1000)LCD_Write_Char(9,0,' ');//百位 如果為零顯示空格
  169.         else
  170.          LCD_Write_Char(9,0,zhi[tmp/1000]);
  171.         if(1==tp_flag)LCD_Write_Char(8,0,'-');//正負溫度符號顯示 負溫度顯示- 0上顯示空格
  172.          else
  173.          LCD_Write_Char(8,0,' ');
  174. }
  175. /***********************************************************
  176.              PID溫度控制做動函數
  177. ***********************************************************/
  178. void compare_temper()                 //PID溫度控制輸出函數
  179. {
  180.   unsigned char i;
  181.   
  182.   if(set_temper>temper)
  183.    {
  184.     if(set_temper-temper>50)//如果控制目標溫度溫與實時溫度差大于5度,(放大10倍)是50
  185.      {
  186.       
  187.            PWM0_set(10); //PWM 輸出高電平占空比最大。即全速加溫
  188.            PWM1_set(10);
  189.      }
  190.         else
  191.     {
  192.      for(i=0;i<10;i++) //5度范圍內PID增量控制,10次周期 即PID積分式中T=10
  193.      {
  194.       rin=ReadTemperature();//PID輸入實時溫度采樣值
  195.       rout = PIDCalc ( &spid,rin ); // PID增量輸出
  196.      }//PID增量輸出范圍(0-255)配合pwm取值范圍
  197.      
  198.          if(rout>=240)rout=240;        //保障PWM輸入值10-240 防止pwm出現失調。stc單片機特性。
  199.          if(rout<=20)rout=20;
  200.          
  201.          PWM0_set(255-rout);
  202.          PWM1_set(255-rout);
  203.          
  204.     }
  205.    }
  206.   else if(set_temper<=temper) //目標溫度小于實時溫度pwm輸出低電平最高占空比,關閉加熱。
  207.    {
  208.      PWM0_set(250);
  209.          PWM1_set(250);
  210.    }
  211. }
  212. /************************************************
  213.                         系統初始化函數
  214. *************************************************/
  215. void Sys_Init()                                                               
  216. {
  217. PWM_init();
  218. PIDBEGIN();
  219. LCD_Init();
  220. Init_DS18B20();
  221. LCD_Clear();
  222. //InitUart1();
  223. }
  224. /*************************************************
  225.                   主函數
  226. **************************************************/
  227. void main(void)
  228. {         
  229. Init_INT0();
  230. Sys_Init();                //系統初始化
  231.          xianshi();                        //顯示字符        
  232. PWM0_set(250);                //初始化PWM兩路輸出最高低電平占空比,不要加熱 p1.3
  233. PWM1_set(250);    //p1.4
  234. delay500ms();                //延時稍等芯片初始化
  235. while(1)
  236.   {  
  237.                 key_1();
  238.                 {
  239.       
  240.                 if(status==1){
  241.                                 bai=(set_temper/100);
  242.                                 shi=(set_temper%100/10);
  243.         ge=(set_temper%10);
  244.         }
  245.           }
  246. ……………………

  247. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
EC11-LCD1602顯示.zip (118.65 KB, 下載次數: 227)


評分

參與人數 2黑幣 +55 收起 理由
youyou1979 + 5 贊一個!如有PMW代碼更棒
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:284488 發表于 2018-6-7 08:43 | 只看該作者
好東西,感謝分享。有電路圗可一并分享嗎?
回復

使用道具 舉報

板凳
ID:404223 發表于 2018-9-29 22:34 | 只看該作者
如有PMW代碼更棒
回復

使用道具 舉報

地板
ID:258210 發表于 2018-10-23 09:59 | 只看該作者
樓主可以分享一下電路圖嗎?
回復

使用道具 舉報

5#
ID:281113 發表于 2018-12-19 09:57 | 只看該作者
學習一下
回復

使用道具 舉報

6#
ID:547681 發表于 2019-5-26 17:14 | 只看該作者
學習一下  如有PMW代碼更棒
回復

使用道具 舉報

7#
ID:251347 發表于 2019-9-23 13:56 | 只看該作者
有用    先看看
回復

使用道具 舉報

8#
ID:47634 發表于 2020-6-30 10:27 | 只看該作者
這個很好,值得學習
回復

使用道具 舉報

9#
ID:766282 發表于 2024-4-19 15:24 來自手機 | 只看該作者
正在學習編碼器,謝謝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区电影在线观看 | 高清视频一区二区三区 | 午夜爽爽爽男女免费观看 | 国产午夜精品一区二区三区四区 | 一区二区三区在线 | 欧 | 国产视频黄色 | 国产目拍亚洲精品99久久精品 | 成人av网页 | 欧洲免费视频 | 日韩av第一页| 美国a级毛片免费视频 | 国产精品久久久久久久久免费樱桃 | 一区二区免费在线 | 国产一区免费 | 日本欧美视频 | 99精品在线 | 欧美激情久久久久久 | 日韩一区二区成人 | 羞羞视频免费观看 | 日韩一级免费大片 | 欧美极品在线观看 | 伊人网99 | 欧美大片久久久 | 在线免费观看毛片 | 欧美精品第一页 | 91av视频 | 久久www免费人成看片高清 | 欧美精品1区2区 | 成人伊人 | 久久国产免费 | 国产精品久久久久久久久久久免费看 | 欧美自拍日韩 | 日韩精品一区二区三区中文在线 | 欧美老少妇一级特黄一片 | 9999在线视频 | 亚洲精品免费在线观看 | 国产欧美精品一区 | 日韩 欧美 二区 | 国产精品日本一区二区不卡视频 | 中国一级大毛片 | 欧美综合在线视频 |