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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

應用51單片機實現對步進電機的控制源碼

[復制鏈接]
ID:306449 發表于 2018-4-12 11:01 | 顯示全部樓層 |閱讀模式
此程序詳細的講述了如何應用51單片機實現對步進電機的控制

單片機源程序如下:
  1. #include<reg51.h>
  2. #define NUM 9
  3. #define SMG P0
  4. #define KEY P1
  5. typedef unsigned char u8;
  6. typedef unsigned int u16;
  7. sbit A0=P2^2;              //使用LED數碼管顯示
  8. sbit A1=P2^3;
  9. sbit A2=P2^4;
  10. sbit AX=P3^2;           //綠線A相輸入定義,中斷0口的第一個功能
  11. sbit BX=P3^3;
  12. int x,y;
  13. u8  KeyValue;

  14. u16 T0_NUM;
  15. u16 Zs,JS,b;
  16. u16 Bz;
  17. u8 list[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  18. u8 dis[4];


  19. sbit FX=P2^7;     // 方向
  20. sbit SN=P2^0;     // 使能
  21. sbit MC=P2^1;     // 脈沖

  22. u8 StarOrStop;     // 啟停
  23. u8 Direct= 0;    // 正反


  24. u8 SpeedList[10] = {13,12,10,8,6,4,2,1};
  25. u8 Speed = 0;

  26. void delay(u16 time)
  27. {
  28.     while(time--);
  29. }

  30. void SMGdisPro()
  31. {
  32.     dis[0]=list[Zs/1000];
  33.     dis[1]=list[Zs%1000/100];
  34.     dis[2]=list[Zs%1000%100/10];
  35.     dis[3]=list[Zs/10];
  36. }

  37. void SMGdisplay()
  38. {
  39.     u8 i;
  40.     for(i=0;i<4;i++)
  41.     {
  42.         switch(i)
  43.         {
  44.             case(0):
  45.                 A2=0;A1=0;A0=0;
  46.                 break;
  47.             case(1):
  48.                 A2=0;A1=0;A0=1;
  49.                 break;
  50.             case(2):
  51.               A2=0;A1=1;A0=0;
  52.                 break;
  53.                         case(3):
  54.                           A2=0;A1=1;A0=1;
  55.                 break;

  56.         }
  57.         SMG=dis[3-i];
  58.         delay(50);
  59.         SMG=0x00;
  60.     }
  61. }

  62. void PID()
  63. {
  64.     if(Zs<300)
  65.         Speed++;
  66.     else if(Zs>300)
  67.         Speed--;   
  68. }


  69. void KeyFind()              //矩陣鍵盤掃描
  70. {
  71.     KEY=0x0f;
  72.     if(KEY!=0x0f)
  73.     {
  74.                 delay(2);         //消抖
  75.                 if(KEY!=0x0f)      
  76.                 {       
  77.                         //測試列
  78.                         KEY=0X0f;
  79.                         switch(KEY)
  80.                         {
  81.                                 case(0X07):        KeyValue=0;break;
  82.                                 case(0X0b):        KeyValue=1;break;
  83.                                 case(0X0d): KeyValue=2;break;
  84.                                 case(0X0e):        KeyValue=3;break;
  85.                         }
  86.                         //測試行
  87.                         KEY=0Xf0;
  88.                         switch(KEY)
  89.                         {
  90.                                 case(0X70):        KeyValue=KeyValue;break;      
  91.                                 case(0Xb0):        KeyValue=KeyValue+4;break;      
  92.                                 case(0Xd0): KeyValue=KeyValue+8;break;
  93.                                 case(0Xe0):        KeyValue=KeyValue+12;break;
  94.                         }
  95.             switch(KeyValue)
  96.             {
  97.                     case(0):
  98.                         {
  99.                           StarOrStop=StarOrStop^1;    //啟動與停止
  100.                                 SN= !SN;
  101.                  
  102.                                break;
  103.                         }
  104.                         
  105.                 case(1):
  106.                                 {
  107.                                             Direct=Direct^1;            //不同為1,相同為0
  108.                         FX= !FX;
  109.                             break;
  110.                                     }
  111.               
  112.                 case(2):
  113.                                 {       
  114.                                         Speed++;
  115.                         if(Speed>NUM)
  116.                                 Speed=NUM;
  117.                             break;
  118.                                 }                       
  119.                 case(3):
  120.                                 {Speed--;
  121.                         if(Speed< 0)
  122.                                 Speed= 0;
  123.                                        
  124.                             break;
  125.                                 }
  126.                 case(4):
  127.                         {
  128.                             Bz=1;
  129.                             break;     
  130.                         }
  131.                 case(5):
  132.                         {
  133.                             Bz=0;
  134.                             break;
  135.                         }
  136.                 case(6):
  137.                                 {
  138.                                         b=1;
  139.                                 }
  140.                
  141.                 default:
  142.                     break;
  143.             }
  144.             KEY=0Xf0;
  145.             while(KEY!=0xf0);

  146.             }
  147.     }
  148. }
  149. void T0_Init()
  150. {
  151.         TMOD = 0x01;
  152.         TH0 = (65535-100)/256;  //定時1ms
  153.         TL0 = (65535-100)%256;
  154.         EA = 1;       //中斷總開關
  155.         ET0 = 1;     //允許定時器中斷0
  156.         TR0 = 1;    //打開定時器中斷0

  157. }

  158. void zhuansu1()        //外部中斷1初始化
  159. {
  160.     IT1=1;
  161.     EX1=1;
  162.     EA=1;
  163. }


  164. void main()
  165. {
  166.         T0_Init();             // 定時器0 初始化
  167.         zhuansu1();
  168.         SN= 0;     //驅動接口使能
  169.         FX = 0;     //初始化為正轉
  170.         while(1)
  171.         {    KeyFind();              //檢測按鍵
  172. SMGdisPro();
  173. SMGdisplay();

  174.                
  175.                                                                
  176.                 }

  177. }

  178. void T0_Time() interrupt 1
  179. {                static u16 i;
  180.         TR0 = 0;
  181.         TH0 = (65535-100)/256;   
  182.         TL0 = (65535-100)%256;
  183.                 T0_NUM++;
  184.         if(T0_NUM>=SpeedList[Speed])        // 增加按鍵Speed++   減小按鍵Speed--
  185.         {
  186.                 T0_NUM=0;
  187.                 MC=!MC;               //   輸出脈沖
  188.         }
  189.                 i++;
  190.             if(i==1000)
  191.             {
  192.                     u8 m=0;
  193.                     i=0;
  194.                       if(Bz==1)
  195.                             {
  196.                                     Speed=5;
  197.                             }
  198.                        
  199.                                                            
  200.         Zs=JS*3;
  201.         JS=0;
  202.         i=0;
  203.         
  204.         if(Bz)
  205.             PID();
  206.        }
  207.                    if(b==1)
  208.                          {
  209.                                 b=0;
  210. ……………………

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

所有資料51hei提供下載:
步進電機.zip (46.82 KB, 下載次數: 37)
回復

使用道具 舉報

ID:493996 發表于 2019-3-23 22:06 | 顯示全部樓層
有沒有仿真圖
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99精品国产 | 超碰在线97国产 | 国产高清在线视频 | 中文字幕第一页在线 | 午夜精品久久久久久久久久久久久 | 国产999精品久久久久久 | av在线三级 | 羞羞视频一区二区 | 中文字幕日韩欧美 | 日韩欧美国产一区二区三区 | 凹凸日日摸日日碰夜夜 | av网址在线 | 男女激情网站免费 | 看av电影| 成人国产精品久久 | 精品视频一区二区三区在线观看 | 欧美日韩在线精品 | 伊人狠狠操 | 亚洲欧美一区二区三区情侣bbw | 日韩欧美中文字幕在线观看 | 亚洲视频 欧美视频 | 在线观看中文字幕视频 | 久久亚洲国产精品 | 亚洲第一福利视频 | h视频免费观看 | 国产免费看 | 精品久久久久久久久久久久久久久久久 | 亚洲精品一区中文字幕乱码 | 亚洲视频区 | 国产精品99999| 国产成人精品久久 | 免费亚洲视频 | 精品欧美一区二区中文字幕视频 | 欧美亚洲免费 | 国产成人精品亚洲日本在线观看 | 精品婷婷 | 国产精品99免费视频 | 久久久久国产精品一区二区 | 草草网 | 农村黄性色生活片 | 免费在线观看黄网站 |