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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

直流馬達pid調速液晶顯示單片機源程序

[復制鏈接]
跳轉到指定樓層
樓主



全部資料下載地址:
直流馬達pid調速液晶顯示.zip (68.64 KB, 下載次數: 81)


單片機源程序:
  1. #include "12864Serial.h"
  2. #include "PWM.h"
  3. uint data h_count=0,freq10=0,Speed=0,Speed1=0;  //h_count高頻脈沖個數        (高)
  4. uint data num1=0,num2=0,num3=0,num4=0;
  5. //float data p=4.0,i=0.9,d=1.0;
  6. float xdata p=3.0,i=20,d=3.0;        //P:3  I:20    D:3

  7. static data ErrorNum=0.0,en=0.0,en1=0.0,en2=0.0;
  8. static int data output=0;
  9. float data pwm;        
  10. uint temp40,temp50,temp60;

  11. bit Flag=0;
  12. uint data config=5,error=0,input=0,adjust=20;
  13. long int data duty=50;
  14. uint data TempConfig=0;                 //定義暫時的一個轉速,P、I、D參數
  15. float xdata TempP=0,TempI=0,TempD=0; //在退出參數調整界面時將這些暫時的數據賦給真實的值
  16. uchar xdata ConfigTable[3]=0;        //設定參數數組
  17. uchar xdata ErrorTable[3]=0;        //誤差參數數組
  18. uchar xdata SpeedTable[6]=0;        //速度參數數組
  19. uchar xdata InputTable[3]=0;    //輸入參數數組
  20. uchar xdata DutyTable[4]=0;     //占空比參數數組
  21. uchar xdata AdjustTable[3]=0;        //調整參數數組
  22. uchar xdata PTable[3]=0;                //P參數數組
  23. uchar xdata ITable[3]=0;                //I參數數組
  24. uchar xdata DTable[3]=0;            //D參數數組

  25. uchar xdata PTable1[3]=0;
  26. uchar xdata ITable1[4]=0;
  27. uchar xdata DTable1[3]=0;



  28. //定義控制板的按鍵值

  29. sbit SW1= P3^1;
  30. sbit SW= P3^4;
  31. sbit K2= P3^5;
  32. sbit K3= P3^6;
  33. sbit K4= P3^7;



  34. sbit D0  = P1^0;
  35. sbit D1  = P1^1;
  36. sbit D2  = P1^2;
  37. sbit D3  = P1^3;
  38. sbit D4  = P1^4;
  39. sbit D5  = P1^5;
  40. sbit D6  = P1^6;
  41. sbit D7  = P1^7;





  42. unsigned char KeyScan(void);
  43. void delay(unsigned int ms)
  44. {
  45.           unsigned int De_Cnt;
  46.           while( (ms--) != 0)
  47.            {
  48.             for(De_Cnt = 0; De_Cnt < 950; De_Cnt++);
  49.            }            
  50. }

  51. //****************************************************
  52. //****************高頻測量定時計數器初始化***********  高頻的測量方法較準確
  53. void init_port()
  54. {        
  55.         TMOD=0x11;                //T1計時工作方式1
  56.         IT0=1;             //INT0下降沿觸發

  57.         IT1=1;                     //INT1下降沿觸發
  58.         EX1=1;                           //外部中斷1打開

  59.         TH1=0xb1;
  60.         TL1=0xe0;                 //定時初值的計算:50ms*20=1s
  61.         EA=1;                       //全局中斷允許
  62.         ET1=1;                       //T1中斷允許
  63.     TH0=0;                           //清零
  64.     TL0=0;                           //清零
  65.          
  66.     ET0=1;                            //定時器0中斷允許
  67.         TR0=0;                          //關T0中斷
  68.         TR1=0;                          //關T1中斷
  69. }  
  70. //******************高頻率測量*****************
  71. void hight_frequency()
  72. {
  73.         h_count=0;              //脈沖計數初值為0,
  74.         EX0=1;                      //INT0中斷允許,開始計數
  75.         TR1=1;                      //啟動定時器1
  76.         while(EX0);              //等待INT0中斷關閉
  77.         TR1=0;                      //關T1中斷
  78.         h_count=(h_count-1)*50;   //得實際頻率
  79.         Speed=h_count/334;   //此處采用200線編碼器
  80.         if((Speed>300)||(Speed<0))
  81.                 Speed=0;
  82.         
  83.         SpeedTable[0]=0x30+(Speed/100);           //百位
  84.         SpeedTable[1]=0x30+(Speed%100/10);            //十位
  85.         SpeedTable[2]=0x30+(Speed%10);               //個位
  86.         SpeedTable[3]=0x20;         
  87.         
  88. }

  89. void display()
  90. {



  91.         //顯示設定的速度值
  92.         ConfigTable[0]=(0x30+(config/100));
  93.         ConfigTable[1]=(0x30+(config%100/10));
  94.         ConfigTable[2]=(0x30+(config%10));


  95.         LCD_Write_String(0,0,"Set     Sp");
  96.         LCD_Write_Com(0x80+3);
  97.         LCD_Write_Data(':');
  98.         LCD_Write_Data(ConfigTable[0]);
  99.         LCD_Write_Data(ConfigTable[1]);
  100.         LCD_Write_Data(ConfigTable[2]);

  101.         //顯示實際測得的速度
  102.         LCD_Write_Com(0x80+10);
  103.         LCD_Write_Data(':');
  104.         LCD_Write_Data(SpeedTable[0]);
  105.         LCD_Write_Data(SpeedTable[1]);
  106.         LCD_Write_Data(SpeedTable[2]);        
  107.                                                                           

  108.          LCD_Write_String(0,1,"Err      Da");
  109.                  //顯示設定值與實測值的誤差
  110.         if(config>Speed)
  111.         {
  112.                 error=config-Speed;
  113.                 ErrorTable[0]=(0x30+(error/100));
  114.                 ErrorTable[1]=(0x30+(error%100/10));
  115.                 ErrorTable[2]=(0x30+(error%10));

  116.                 LCD_Write_Com(0xC0+3);
  117.                 LCD_Write_Data(':');
  118.                 LCD_Write_Data('-');
  119.                 LCD_Write_Data(ErrorTable[0]);
  120.                 LCD_Write_Data(ErrorTable[1]);
  121.                 LCD_Write_Data(ErrorTable[2]);

  122.         }

  123.         else if((Speed>config)||(Speed==config))
  124.         {
  125.                 error=Speed-config;
  126.                 ErrorTable[0]=(0x30+(error/100));
  127.                 ErrorTable[1]=(0x30+(error%100/10));
  128.                 ErrorTable[2]=(0x30+(error%10));

  129.                 LCD_Write_Com(0xC0+3);
  130.                 LCD_Write_Data(':');
  131.                 LCD_Write_Data('+');
  132.                 LCD_Write_Data(ErrorTable[0]);
  133.                 LCD_Write_Data(ErrorTable[1]);
  134.                 LCD_Write_Data(ErrorTable[2]);

  135.         }


  136.                 //顯示調整參數數據
  137.         if((Speed>Speed1)||(Speed==Speed1))
  138.         {
  139.                 adjust=Speed-Speed1;
  140.             AdjustTable[0]=(0x30+(adjust/100));
  141.                 AdjustTable[1]=(0x30+(adjust%100/10));
  142.                 AdjustTable[2]=(0x30+(adjust%10));

  143.                 LCD_Write_Com(0xC0+11);
  144.                 LCD_Write_Data(':');
  145.                 LCD_Write_Data('+');
  146.                 LCD_Write_Data(AdjustTable[0]);
  147.                 LCD_Write_Data(AdjustTable[1]);
  148.                 LCD_Write_Data(AdjustTable[2]);
  149.         }

  150.         else  if(Speed1>Speed)
  151.         {
  152.                 adjust=Speed1-Speed;
  153.             AdjustTable[0]=(0x30+(error/100));
  154.                 AdjustTable[1]=(0x30+(error%100/10));
  155.                 AdjustTable[2]=(0x30+(error%10));

  156.                 LCD_Write_Com(0xC0+11);
  157.                 LCD_Write_Data(':');
  158.                 LCD_Write_Data('-');
  159.                 LCD_Write_Data(AdjustTable[0]);
  160.                 LCD_Write_Data(AdjustTable[1]);
  161.                 LCD_Write_Data(AdjustTable[2]);

  162.         }
復制代碼


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:300054 發表于 2019-6-25 20:50 | 只看該作者
有沒有protues仿真圖
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品一区二区三区在线观看 | 日韩精品一区二区三区中文在线 | 免费黄色成人 | 成人影院一区二区三区 | 久久国产精品-国产精品 | 欧美男人天堂 | 久久国产精品72免费观看 | 一道本在线 | 亚洲色欲色欲www | 色吧综合网 | 日韩欧美亚洲 | 国产欧美精品 | 天天影视网天天综合色在线播放 | 国产成人精品综合 | 国产在线精品一区 | 蜜桃传媒一区二区 | 欧美一级免费 | 日韩精品在线一区二区 | 日韩av.com | 久久久久久免费观看 | 亚洲国产成人在线 | 亚洲乱码一区二区 | 亚洲视频中文 | 玖玖视频网 | 成人福利在线 | 亚洲高清在线观看 | 国产亚洲网站 | 亚洲精品一二三区 | 欧美一区二区三区在线看 | 最新国产精品视频 | 色.com| 精品免费国产一区二区三区四区 | 一区二区三区韩国 | 国产精品免费观看视频 | 亚洲一区综合 | 日本激情视频在线播放 | 日韩精品在线视频 | 成人午夜激情 | 午夜精品一区二区三区在线视频 | 国产精品永久免费视频 | 99久久久国产精品免费消防器 |