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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

怎么修改單片機程序可以使步進電機在滿足條件后正轉和反轉180°

[復制鏈接]
回帖獎勵 10 黑幣 回復本帖可獲得 10 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主
ID:757095 發表于 2020-5-22 00:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include "include.h"

  2. #define   uchar unsigned char
  3. #define   uint unsigned int      
  4. #define   DataPort P2  
  5. #define MotorData P0                    
  6. #define GapValue 305

  7. uchar phasecw[4] ={0x08,0x04,0x02,0x01};
  8. uchar phaseccw[4]={0x01,0x02,0x04,0x08};


  9. sbit LCM_RS=P0^7;
  10. sbit LCM_RW=P0^6;
  11. sbit LCM_EN=P0^5;

  12. sbit IN1 = P3^4;
  13. sbit IN2 = P3^5;
  14. sbit IN3 = P3^6;
  15. sbit IN4 = P3^7;



  16. sbit HX711_DOUT=P3^3;
  17. sbit HX711_SCK=P3^2;


  18. unsigned long Time_Cont = 0;
  19. unsigned char PollCount = 0;

  20. unsigned int qupi=0;
  21. long weight_wuti = 0;
  22. long weight_wutinew = 0;
  23. unsigned long weight_maopi = 0;
  24. unsigned long weight_maopi_0 = 0;

  25. unsigned char tx_buf[5];

  26. void Get_maopi();
  27. void Get_weight();
  28. void Delay__hx711_us(void);
  29. unsigned long HX711_Read(void);





  30. void Delay_ms(unsigned int n)
  31. {
  32.         unsigned int  i,j;
  33.         for(i=0;i<n;i++)
  34.                 for(j=0;j<121;j++);
  35. }





  36. void Delay__hx711_us(void)
  37. {
  38.         _nop_();
  39.         _nop_();
  40. }




  41. unsigned long HX711_Read(void)        
  42. {
  43.         unsigned long count;
  44.         unsigned char i;
  45.           HX711_DOUT=1;
  46.                 Delay__hx711_us();
  47.           HX711_SCK=0;
  48.           count=0;
  49.           while(HX711_DOUT);
  50.           for(i=0;i<24;i++)                              
  51.         {
  52.                   HX711_SCK=1;
  53.                   count=count<<1;
  54.                         HX711_SCK=0;
  55.                   if(HX711_DOUT)
  56.                         count++;
  57.         }
  58.         HX711_SCK=1;
  59.         count=count^0x800000;
  60.         Delay__hx711_us();
  61.         HX711_SCK=0;  
  62.         return(count);
  63. }



  64. void Get_Weight()
  65. {
  66.         weight_wuti = HX711_Read();
  67.         weight_wuti = weight_wuti - weight_maopi;               
  68.         
  69.         
  70.         
  71.         weight_wuti = (unsigned int)((weight_wuti)/GapValue);         
  72. if(weight_wuti>5000)weight_wuti=0;      

  73.                 tx_buf[0]= weight_wuti/1000;
  74.                 tx_buf[1]= weight_wuti/100%10;
  75.                 tx_buf[2]= weight_wuti%100/10;
  76.                 tx_buf[3]= weight_wuti%10;


  77. }




  78. void Get_maopi()
  79. {
  80.         unsigned char clear;
  81. mm:        weight_maopi_0 = HX711_Read();
  82.         for(clear=0;clear<2;clear++)
  83.         {
  84.                 Delay_ms(200);
  85.         }
  86.         weight_maopi = HX711_Read();
  87.         if(weight_maopi/GapValue!=weight_maopi_0/GapValue)
  88.         goto mm;
  89. }

  90. void Timer0Interrupt(void)  interrupt 1  
  91. {
  92.         TH0 = (65536 - 20000)/256;
  93.         TL0 = (65536 - 20000)%256;
  94.         PollCount++;
  95.         if(PollCount==50)
  96.         {
  97.           PollCount=0;

  98.                
  99.         }
  100. }

  101. void positive(unsigned int time)
  102. {
  103.         IN1 = 1;IN2 = 0; IN3 = 0;IN4 = 0;
  104.         Delay_ms(time);
  105.         IN1 = 0;IN2 = 1; IN3 = 0;IN4 = 0;
  106.         Delay_ms(time);
  107.         IN1 = 0;IN2 = 0; IN3 = 1;IN4 = 0;
  108.         Delay_ms(time);
  109.         IN1 = 0;IN2 = 0; IN3 = 0;IN4 = 1;
  110.         Delay_ms(time);
  111. }

  112. unsigned int count;
  113. void run(unsigned int time,unsigned int k)
  114. {
  115.         for(count=0;count<time;count++)
  116.                 positive(k);
  117. }

  118. void MotorCW(void)
  119. {
  120. uchar i;
  121. for(i=0;i<4;i++)
  122.   {
  123.    MotorData=phasecw[i];
  124.    Delay_ms(4);
  125.   }
  126. }

  127. void MotorCCW(void)
  128. {
  129. uchar i;
  130. for(i=0;i<4;i++)
  131.   {
  132.    MotorData=phaseccw[i];
  133.    Delay_ms(4);
  134.   }
  135. }

  136. void MotorStop(void)
  137. {
  138. MotorData=0x00;
  139. }



  140. void main()
  141. {
  142.   InitLcd();
  143.         Get_maopi();
  144.         DisplayOneChar(0,0,'W');
  145.         DisplayOneChar(1,0,'E');
  146.         DisplayOneChar(2,0,'I');
  147.         DisplayOneChar(3,0,'G');
  148.         DisplayOneChar(4,0,':');
  149.       
  150.         DisplayOneChar(0,1,'N');
  151.         DisplayOneChar(1,1,'U');
  152.         DisplayOneChar(2,1,'M');
  153.         DisplayOneChar(3,1,'B');
  154.         DisplayOneChar(4,1,':');
  155.       






  156.         while(1)
  157.         {      

  158.                 Get_weight();
  159.                 DisplayOneChar(5,0,'0'+tx_buf[0]);
  160.                 DisplayOneChar(6,0,'0'+tx_buf[1]);
  161.                 DisplayOneChar(7,0,'0'+tx_buf[2]);
  162.                 DisplayOneChar(8,0,'0'+tx_buf[3]);
  163.                 DisplayOneChar(9,0,'G');
  164.                 if((weight_wutinew-weight_wuti>10)||(weight_wuti-weight_wutinew>10))
  165.                 {
  166.                                 weight_wutinew        = weight_wuti;               
  167.                                 
  168.                                 
  169.                                 
  170.                                         if((weight_wuti>0)&&(weight_wuti<100)){DisplayOneChar(5,1,'1');MotorCW();   
  171.                         
  172.                                   MotorStop();  
  173.       
  174.                           else if(weight_wuti>100){DisplayOneChar(5,1,'2'); MotorCCW(); }
  175.                                   MotorStop();  
  176.       
  177.                                 
  178.                                 
  179.                 }                       
  180.                 Delay_ms(2);
  181.         }
  182. }


  183. /*******************************/
  184. void WaitForEnable(void)      
  185. {                                       
  186.                 DataPort=0xff;               
  187.                 LCM_RS=0;LCM_RW=1;_nop_();
  188.                 LCM_EN=1;_nop_();_nop_();
  189.                 while(DataPort&0x80);      
  190.                 LCM_EN=0;                              
  191. }                                       
  192. /*******************************/
  193. void WriteCommandLCM(uchar CMD,uchar Attribc)
  194. {                                       
  195.                 if(Attribc)WaitForEnable();      
  196.                 LCM_RS=0;LCM_RW=0;_nop_();
  197.                 DataPort=CMD;_nop_();      
  198.                 LCM_EN=1;_nop_();_nop_();LCM_EN=0;
  199. }                                       
  200. /*******************************/
  201. void WriteDataLCM(uchar dataW)
  202. {                                       
  203.                 WaitForEnable();               
  204.                 LCM_RS=1;LCM_RW=0;_nop_();
  205.                 DataPort=dataW;_nop_();      
  206.                 LCM_EN=1;_nop_();_nop_();LCM_EN=0;
  207. }               
  208. /***********************************/
  209. void InitLcd()                              
  210. {                       
  211.                 WriteCommandLCM(0x38,1);      
  212.                 WriteCommandLCM(0x08,1);      
  213.                 WriteCommandLCM(0x01,1);      
  214.                 WriteCommandLCM(0x06,1);      
  215.                 WriteCommandLCM(0x0c,1);
  216. }                       
  217. /***********************************/
  218. void DisplayOneChar(uchar X,uchar Y,uchar DData)
  219. {                                               
  220.                 Y&=1;                                               
  221.                 X&=15;                                               
  222.                 if(Y)X|=0x40;                                       
  223.                 X|=0x80;                       
  224.                 WriteCommandLCM(X,0);               
  225.                 WriteDataLCM(DData);               
  226. }  
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:440403 發表于 2020-5-22 08:13 | 只看該作者
具體要看步進電機上面的驅動器,一步是多少度,一個脈沖是半步還是一步,單片機只是負責發脈沖
回復

使用道具 舉報

板凳
ID:757095 發表于 2020-5-22 10:49 | 只看該作者
兩儀式 發表于 2020-5-22 08:13
具體要看步進電機上面的驅動器,一步是多少度,一個脈沖是半步還是一步,單片機只是負責發脈沖

看了一下,只需解決正反轉就行,度數可以隨時調整
回復

使用道具 舉報

地板
ID:94031 發表于 2020-5-22 13:13 | 只看該作者
把你現在的現象描述一下。這一句MotorStop(); 要屏蔽掉,否則每次都要停一下。
回復

使用道具 舉報

5#
ID:758414 發表于 2020-5-23 12:08 | 只看該作者
MotorStop(); 要屏蔽掉
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品乱码一区二区三四区视频 | 日韩www | 伊人伊人 | 亚洲有码转帖 | 日本三级在线网站 | 国产999精品久久久 日本视频一区二区三区 | 亚洲一区二区av | 欧美精品网| 国产高清视频在线 | 日韩一及片 | 成人在线中文字幕 | 自拍偷拍欧美 | 色婷婷亚洲一区二区三区 | 99久久久国产精品免费消防器 | 亚洲视频精品 | 激情婷婷 | 免费看片国产 | 国产综合一区二区 | 免费观看黄 | 欧美一级视频免费看 | 亚洲一区二区三区免费在线观看 | 国产露脸对白88av | 天天干免费视频 | 国产人成精品一区二区三 | 亚洲一区 中文字幕 | 国产毛片视频 | 免费看91 | 中文字幕一区二区三区四区五区 | 日韩成人久久 | 国产真实精品久久二三区 | 国产精品入口麻豆www | 欧美日韩久久 | 中文字幕在线人 | av黄色片在线观看 | 亚洲精品一级 | 国产精品久久精品 | 一区二区三区影院 | 日韩中文字幕2019 | 天天综合永久 | 亚洲一区二区在线视频 | a欧美|