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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機控制步進電機正反轉的程序,同時還能實現調速。

[復制鏈接]
ID:657603 發表于 2019-12-13 15:48 | 顯示全部樓層 |閱讀模式
  1. #include ”reg51.h“     
  2. #include “intrins.h”
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  6. unsigned char code FFW[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6};
  7. unsigned char code REV[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe};
  8. //unsigned char code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};
  9. //unsigned char code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};
  10. sbit  K1   = P3^2;      
  11. sbit  K2   = P3^3;      
  12. sbit  K3   = P3^4;   
  13. sbit  K4   = P3^5;   
  14. sbit  LCD_RS = P2^0;            
  15. sbit  LCD_RW = P2^1;
  16. sbit  LCD_EN = P2^2;
  17. bit  on_off=0;        
  18. bit  direction=1;      
  19. bit  rate_dr=1;        
  20. bit  snum_dr=1;      
  21. uchar code  cdis1[ ] = {"NO.0738230126 "};
  22. uchar code  cdis2[ ] = {"     2012/5/24"};
  23. uchar code  cdis3[ ] = {"    STOP        "};
  24. uchar code  cdis4[ ] = {"NUM:    RATE:   "};
  25. uchar code  cdis5[ ] = {"  RUNNING       "};
  26. uchar   m,v=0,q=0;
  27. uchar   number=0,number1=0;
  28. uchar   snum=20,snum1=20;     
  29. uchar   rate=3;            
  30. uchar   data_temp,data_temP0,data_temp2;   
  31. void delay(uint t)
  32. {                           
  33.    uchar k;
  34.    while(t--)
  35.    {
  36.      for(k=0; k<124; k++)
  37.      { }
  38.    }
  39. }
  40. void delayB(uchar x)  
  41. {
  42.    uchar i;
  43.    while(x--)
  44.    {
  45.      for (i=0; i<13; i++)
  46.      { }
  47.    }
  48. }

  49. bit lcd_busy()
  50. {                          
  51.     bit result;
  52.     LCD_RS = 0;
  53.     LCD_RW = 1;
  54.     LCD_EN = 1;
  55.     delayNOP();
  56.     result = (bit)(P0&0x80);
  57.     LCD_EN = 0;
  58.     return(result);
  59. }
  60. void lcd_wcmd(uchar cmd)
  61. {                          
  62.    while(lcd_busy());
  63.     LCD_RS = 0;
  64.     LCD_RW = 0;
  65.     LCD_EN = 0;
  66.     _nop_();
  67.     _nop_();
  68.     P0 = cmd;
  69.     delayNOP();
  70.     LCD_EN = 1;
  71.     delayNOP();
  72.     LCD_EN = 0;  
  73. }
  74. void lcd_wdat(uchar dat)
  75. {                          
  76.    while(lcd_busy());
  77.     LCD_RS = 1;
  78.     LCD_RW = 0;
  79.     LCD_EN = 0;
  80.     P0 = dat;
  81.     delayNOP();
  82.     LCD_EN = 1;
  83.     delayNOP();
  84.     LCD_EN = 0;
  85. }
  86. void lcd_init()
  87. {
  88.     delay(30);                  
  89.     lcd_wcmd(0x38);     
  90.     delay(5);
  91.     lcd_wcmd(0x38);         
  92.     delay(5);
  93.     lcd_wcmd(0x38);         
  94.     delay(5);
  95.     lcd_wcmd(0x0c);  
  96.     delay(5);
  97.     lcd_wcmd(0x06);  
  98.     delay(5);
  99.     lcd_wcmd(0x01);   
  100.     delay(5);
  101. }
  102. void lcd_pos(uchar pos)
  103. {                          
  104.   lcd_wcmd(pos | 0x80);
  105. }
  106. void  LCD_init_DIS()
  107. {            
  108.      delay(10);            
  109.      lcd_init();                     

  110.      lcd_pos(0);
  111.      m = 0;
  112.      while(cdis1[m] != '\0')
  113.       {         
  114.         lcd_wdat(cdis1[m]);
  115.         m++;
  116.       }
  117.      lcd_pos(0x40);   
  118.      m = 0;
  119.      while(cdis2[m] != '\0')
  120.       {
  121.         lcd_wdat(cdis2[m]);
  122.         m++;
  123.       }
  124.       delay(3000);      

  125.       lcd_pos(0);  
  126.       m = 0;
  127.       while(cdis3[m] != '\0')
  128.         {         
  129.           lcd_wdat(cdis3[m]);
  130.           m++;
  131.         }
  132.       lcd_pos(0x40);   
  133.       m = 0;
  134.      while(cdis4[m] != '\0')
  135.         {
  136.           lcd_wdat(cdis4[m]);
  137.           m++;
  138.         }      
  139.         for(m=0;m<2;m++)
  140.           {
  141.        lcd_pos(0x0c+m);
  142.              lcd_wdat(0x3e);
  143.     }
  144. }
  145. void  data_conv()
  146. {
  147.      data_temP0=data_temp/10;
  148.   if(data_temP0==0)
  149.   {data_temP0=0x20;}
  150.      else
  151.   {data_temP0=data_temP0+0x30;}
  152.    data_temp2=data_temp;  
  153.      data_temp2=data_temp2+0x30;
  154. }
  155. void  data_dis()
  156. {
  157.     data_temp = snum;
  158.     data_conv();
  159.        lcd_pos(0x44);
  160.        lcd_wdat(data_temP0);
  161.        lcd_pos(0x45);
  162.        lcd_wdat(data_temp2);

  163.     data_temp = rate;  
  164.     data_conv();
  165.        lcd_pos(0x4d);
  166.        lcd_wdat(data_temP0);
  167.        lcd_pos(0x4e);
  168.        lcd_wdat(data_temp2);
  169. }
  170. void  motor_DR()
  171.   {
  172.        if(direction==1)  
  173.         { for(m=0;m<2;m++)
  174.           {
  175.       lcd_pos(0x0c+m);   
  176.             lcd_wdat(0x3e);
  177.      }
  178.    }
  179.         else
  180.          { for(m=0;m<2;m++)
  181.            {
  182.           lcd_pos(0x0c+m);  
  183.              lcd_wdat(0x3c);
  184.      }
  185.    }
  186.   }
  187. void  motor_RUN()
  188. {
  189.       if(on_off==1)
  190.     { TR0=1;
  191.       lcd_pos(0);
  192.          m = 0;
  193.          while(cdis5[m] != '\0')
  194.           { lcd_wdat(cdis5[m]);
  195.             m++;   }
  196.             motor_DR();
  197.     }  
  198.       else  
  199.     { TR0=0; P0 =0x0f;
  200.    lcd_pos(0)
  201.          m = 0;
  202.          while(cdis3[m] != '\0')
  203.           { lcd_wdat(cdis3[m]);
  204.             m++;   }
  205.             motor_DR();
  206.    snum=snum1;
  207.    number1=0;
  208.          }
  209.   }
  210. main()
  211. {               
  212.          LCD_init_DIS();

  213.    TMOD = 0x01;
  214.    TL0  = 0x33;
  215.    TH0  = 0xf5;
  216.    EA   = 1;
  217.    ET0  = 1;

  218.    P1=0;
  219.    while(1)
  220.     {  
  221.        if(K1==0)
  222.     {
  223.          //beep();
  224.       while(K1==0)
  225.       on_off=~on_off;      
  226.          motor_RUN();  
  227.         }   //K1 end
  228.       if(K2==0)   
  229.        {
  230.         if(snum_dr==1)
  231.     { snum++;
  232.         snum1=snum;
  233.       if(snum==0x14)
  234.             { snum_dr=~snum_dr;}
  235.     }
  236.    else  
  237.      {snum--;
  238.    snum1=snum;
  239.       if(snum==0x01)
  240.    { snum_dr=~snum_dr; }
  241.      }

  242.     } //K2  end
  243.         if(K3==0)   
  244.       {
  245.    direction=~direction;
  246.          motor_DR();
  247.       }//K3 end
  248.         if(K4==0)   
  249.        {
  250.    if(rate_dr==1)
  251.     { rate++;
  252.       if(rate==0x10)
  253.             { rate_dr=~rate_dr;}
  254.     }
  255.     else  
  256.      {
  257.       rate--;
  258.       if(rate==0x01)
  259.    { rate_dr=~rate_dr; }
  260.      }
  261.   } //K4 end

  262.       if(number1==snum1
  263.      { number1=0;
  264.          on_off=0;
  265.          TR0=0;
  266.         snum=snum1;
  267.    P1=0x0f;
  268.     motor_RUN();
  269.     }         
  270.          data_dis();
  271. }  // while(1) end
  272. }  //main end
  273. void  motor_onoff()  interrupt  1  
  274. {     
  275.        TL0  = 0x33;
  276.        TH0  = 0xf5;
  277.        q++;
  278.     if(q < rate)
  279.         { return; }
  280.     else
  281.        {  q=0;   
  282.        number++
  283.       if(number==64)
  284.        { snum--;
  285.       number=0;
  286.             number1++;

  287.          if(direction==1
  288.        { if(v<8)  
  289.          {P1 = FFW[v];v++;
  290.         if(v==8)
  291.         { v=0; }
  292.           }

  293.       else
  294.        { if(v<8)  
  295.          {P1 = REV[v];v++;
  296.          if(v==8)
  297.          { v=0; }
  298.           }
  299.     }
  300. }
復制代碼


回復

使用道具 舉報

ID:1 發表于 2019-12-13 21:25 | 顯示全部樓層
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩国产精品一区二区三区 | 国产精品久久久久久久久久久久久 | 男女深夜网站 | 蜜桃视频麻豆 | 亚洲高清成人在线 | 夜夜摸天天操 | 亚洲播放 | 黄色a三级 | 国产成在线观看免费视频 | 国产精品久久久亚洲 | 1204国产成人精品视频 | 99国产精品99久久久久久粉嫩 | 亚洲视频区 | 亚洲国产精品成人无久久精品 | av片免费 | 日本久久久久久 | 日日网| 日韩一区二区三区在线观看 | 国产精品久久久久aaaa | 久久不卡日韩美女 | 成人性生交大免费 | www日本在线 | 黄色一级片视频 | 一区二区高清 | 国产精品视频久久久 | 国产日韩精品在线 | 国产91久久久久久 | 搞黄网站在线观看 | 美国黄色一级片 | 免费看色| 久热伊人 | 欧美亚洲国产日韩 | 久久av网站 | 一级欧美视频 | 视频精品一区二区三区 | 久久大| 久久久久国产成人精品亚洲午夜 | 国产成人免费在线 | 中文字幕日本一区二区 | 国产情侣激情 | 欧美一级小视频 |