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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于MC9S12X128的直流電機與步進電機源代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:338476 發表于 2018-5-26 00:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
基于MC9S12X128的直流電機與步進電機單片機源程序如下:
  1. /********************************************
  2. 龍邱MC9S12XS128函數庫
  3. Designed by Cherish
  4. E-mail:chiusir@yahoo.cn
  5. 軟件版本:V1.0
  6. 最后更新:2015年12月28日
  7. ------------------------------------
  8. Code Warrior 5.1
  9. 下載器:BDM2.3
  10. Target : MC9S12XS128
  11. 備注;基于庫版本程序編寫
  12. **********************************************/
  13. #include "include.h"

  14. unsigned char data[20],data1[7]={0x7F,0x3F,0x1F,0xF,0x7,0x3,0x1};
  15. unsigned int falg=1,falg1=3,falg2=3,falg3=0,falg4=14,kkk;
  16. void delayms(int ms)            //延時函數
  17. {   
  18.    int ii,jj;
  19.    if (ms<1) ms=1;
  20.    for(ii=0;ii<ms;ii++)
  21.      for(jj=0;jj<3338;jj++);    //40MHz--1ms      
  22. }                        
  23. void bu1()//步進電機第一步
  24. {PWM_Change_Duty(PWM2,0);//B_
  25. PWM_Change_Duty(PWM3,100);//A
  26. PWM_Change_Duty(PWM4,0);//B
  27. PWM_Change_Duty(PWM5,0);//A_//  A-AB-B-BA_-A_-A_B_-B_-B_A-A
  28.        
  29. }
  30. void bu2()//2步
  31. {PWM_Change_Duty(PWM2,0);
  32. PWM_Change_Duty(PWM3,100);
  33. PWM_Change_Duty(PWM4,100);
  34. PWM_Change_Duty(PWM5,0);
  35.        
  36. }
  37. void bu3()
  38. {PWM_Change_Duty(PWM2,0);
  39. PWM_Change_Duty(PWM3,0);
  40. PWM_Change_Duty(PWM4,100);
  41. PWM_Change_Duty(PWM5,0);
  42.        
  43. }
  44. void bu4()
  45. {PWM_Change_Duty(PWM2,0);
  46. PWM_Change_Duty(PWM3,0);
  47. PWM_Change_Duty(PWM4,100);
  48. PWM_Change_Duty(PWM5,100);
  49.        
  50. }
  51. void bu5()
  52. {PWM_Change_Duty(PWM2,0);
  53. PWM_Change_Duty(PWM3,0);
  54. PWM_Change_Duty(PWM4,0);
  55. PWM_Change_Duty(PWM5,100);
  56.        
  57. }
  58. void bu6()
  59. {PWM_Change_Duty(PWM2,100);
  60. PWM_Change_Duty(PWM3,0);
  61. PWM_Change_Duty(PWM4,0);
  62. PWM_Change_Duty(PWM5,100);
  63.        
  64. }
  65. void bu7()
  66. {PWM_Change_Duty(PWM2,100);
  67. PWM_Change_Duty(PWM3,0);
  68. PWM_Change_Duty(PWM4,0);
  69. PWM_Change_Duty(PWM5,0);
  70.        
  71. }
  72. void bu8()
  73. {PWM_Change_Duty(PWM2,100);
  74. PWM_Change_Duty(PWM3,100);
  75. PWM_Change_Duty(PWM4,0);
  76. PWM_Change_Duty(PWM5,0);
  77.        
  78. }
  79. void bu()//步進電機整體程序
  80. {
  81. int i;
  82. int kkk;//速度標志
  83. kkk=falg4;
  84. //步進電機順轉
  85. if(falg3==0)
  86. {
  87.         for(i=0;i<200;i++)
  88. {
  89. //按鍵減速選擇
  90. if(PORTE_PE5==0)
  91.   {
  92.   while(PORTE_PE5==0);
  93.    
  94.   falg4++;
  95.   if(falg4>17)
  96.   {
  97.           falg4=17;
  98.   }
  99.   delayms(20);//防抖動
  100.    break;       
  101.   }
  102.   //按鍵加速選擇
  103.   if(PORTE_PE3==0)
  104.   {
  105.   
  106.   while(PORTE_PE3==0);
  107.   falg4--;
  108.   if(falg4==10)
  109.   {
  110.           falg4=11;
  111.   }
  112.   delayms(20);       
  113.    break;
  114.   }
  115.   //切換直流和步進
  116. if(PORTE_PE2==0)
  117.   {
  118.   while(PORTE_PE2==0);
  119.   delayms(20);
  120.   if(falg==0)
  121.   {
  122.           falg=1;//直流步進標志
  123.           PWM_Change_Duty(PWM4,100);
  124. PWM_Change_Duty(PWM5,0);
  125.   }
  126.   else
  127.   {        falg=0;
  128.          
  129.   }
  130. // PORTB_PB1=0;
  131.   break;       
  132.   }
  133. PWM_Change_Duty(PWM0,100);
  134.         PWM_Change_Duty(PWM1,100);
  135.                 DDRB=~data1[17-falg4];//指示燈
  136.         bu1();
  137. delayms(kkk);
  138.   bu2();
  139. delayms(kkk);
  140. bu3();
  141. delayms(kkk);
  142. bu4();
  143. delayms(kkk);
  144. bu5();
  145. delayms(kkk);
  146. bu6();
  147. delayms(kkk);
  148. bu7();
  149. delayms(kkk);
  150. bu8();
  151. delayms(kkk);
  152. //切換逆轉
  153.   if(PORTE_PE7==0)
  154.   {
  155.   while(PORTE_PE7==0);
  156.           falg3=1;//步進狀態標志
  157.          
  158.           delayms(20);
  159.           break;
  160.   }       
  161.   //切換停止
  162.    if(PORTB_PB0==0)
  163.   {
  164.   while(PORTB_PB0==0);
  165.   falg3=2;
  166.    delayms(20);
  167.    break;
  168.          
  169.   }
  170. }
  171. }
  172. //步進電機逆轉
  173. else if(falg3==1)
  174. {
  175.         for(i=0;i<200;i++)
  176. {
  177. if(PORTE_PE5==0)
  178.   {
  179.   while(PORTE_PE5==0);
  180.    
  181.   falg4++;
  182.   if(falg4>17)
  183.   {
  184.           falg4=17;
  185.   }

  186.   delayms(20);       
  187.    break;
  188.   }
  189.   if(PORTE_PE3==0)
  190.   {
  191.   
  192.   while(PORTE_PE3==0);
  193.   falg4--;
  194.   if(falg4==10)
  195.   {
  196.           falg4=11;
  197.   }
  198.   delayms(20);
  199.    break;       
  200.   }
  201. if(PORTE_PE2==0)
  202.   {
  203.   while(PORTE_PE2==0);
  204.   delayms(20);
  205.   if(falg==0)
  206.   {
  207.           falg=1;
  208.           PWM_Change_Duty(PWM4,100);
  209. PWM_Change_Duty(PWM5,0);
  210.   }
  211.   else
  212.   {        falg=0;
  213.          
  214.   }
  215. // PORTB_PB1=0;
  216.           break;
  217.   }
  218. PWM_Change_Duty(PWM0,100);
  219.         PWM_Change_Duty(PWM1,100);
  220.                 DDRB=~data1[17-falg4];
  221.                 bu8();
  222. delayms(kkk);
  223.   bu7();
  224. delayms(kkk);
  225. bu6();
  226. delayms(kkk);
  227. bu5();
  228. delayms(kkk);
  229. bu4();
  230. delayms(kkk);
  231. bu3();
  232. delayms(kkk);
  233. bu2();
  234. delayms(kkk);
  235. bu1();
  236. delayms(kkk);
  237. //切換順轉
  238. if(PORTE_PE6==0)
  239.   {
  240.   while(PORTE_PE6==0);
  241. falg3=0;
  242. delayms(20);
  243.   break;
  244.          
  245.   }
  246.    if(PORTB_PB0==0)
  247.   {
  248.   while(PORTB_PB0==0);
  249.   falg3=2;
  250.    delayms(20);
  251.    break;
  252.          
  253.   }
  254.   
  255. }
  256. }
  257. //停止步進電機
  258. else
  259. {
  260. if(PORTE_PE2==0)
  261.   {
  262.   while(PORTE_PE2==0);
  263.   delayms(20);
  264.   if(falg==0)
  265.   {
  266.           falg=1;
  267.           PWM_Change_Duty(PWM4,100);
  268. PWM_Change_Duty(PWM5,0);
  269.   }
  270.   else
  271.   {        falg=0;
  272.          
  273.   }
  274.          
  275.   }
  276.    if(PORTE_PE6==0)
  277.   {
  278.   while(PORTE_PE6==0);
  279. falg3=0;
  280. delayms(20);
  281.          
  282.   }
  283.    if(PORTE_PE7==0)
  284.   {
  285.   while(PORTE_PE7==0);
  286.           falg3=1;       
  287.           delayms(20);
  288.   }
  289.   
  290.         PWM_Change_Duty(PWM0,0);
  291.         PWM_Change_Duty(PWM1,0);
  292. }

  293. }
  294. void main(void)
  295. {

  296. unsigned char LedCnt=0;
  297.   DDRB = 0x00;
  298.   /* put your own code here */
  299.   PLL_Init(PLL160);  
  300.         EnableInterrupts;
  301. PWM_Init(PWM0,100,100);
  302. PWM_Init(PWM1,100,100);
  303. PWM_Init(PWM2,100,100);
  304. PWM_Init(PWM3,100,0);
  305. PWM_Init(PWM4,100,100);
  306. PWM_Init(PWM5,100,0);
  307. while(1)
  308. {
  309.          //下面直流和步進差不多
  310.   if(PORTE_PE2==0)
  311.   {
  312.   while(PORTE_PE2==0);
  313.   delayms(20);
  314.   if(falg==0)
  315.   {
  316.           falg=1;
  317.           PWM_Change_Duty(PWM4,100);
  318. PWM_Change_Duty(PWM5,0);
  319.   }
  320.   else
  321.   {        falg=0;
  322.          
  323.   }        
  324.   }
  325.   if(falg==1)
  326.   {
  327.   if(PORTE_PE6==0)
  328.   { ;
  329.   while(PORTE_PE6==0);
  330.   PWM_Change_Duty(PWM4,100);
  331. PWM_Change_Duty(PWM5,0);
  332.          
  333.   }
  334.   if(PORTE_PE7==0)
  335.   {
  336.   while(PORTE_PE7==0);
  337.   PWM_Change_Duty(PWM4,0);
  338.   PWM_Change_Duty(PWM5,100);
  339.          
  340.   }
  341. if(PORTE_PE3==0)
  342.   {
  343.   while(PORTE_PE3==0);
  344.    if(falg1==10)
  345.   {falg1=3;
  346.          
  347.   }
  348.   falg1++;
  349.   if(falg1>7)
  350.   {
  351.           falg1=7;
  352.   }
  353.          
  354.   }
  355.   if(PORTE_PE5==0)
  356.   {
  357.   
  358.   while(PORTE_PE5==0);
  359.   if(falg1==10)
  360.   {falg1=3;
  361.          
  362.   }
  363.   falg1--;
  364.   if(falg1==0)
  365.   {
  366.           falg1=1;
  367.   }
  368.          
  369.   }
  370.   if(falg1!=10)
  371.   {
  372.           PWM_Change_Duty(PWM1,35+falg1*2);
  373.           DDRB=~data1[falg1-1];
  374.   }
  375.   
  376.   if(PORTB_PB0==0)
  377.   {
  378.   PWM_Change_Duty(PWM1,0);
  379.   falg1=10;
  380.   while(PORTB_PB0==0);
  381.          
  382.   }
  383.   delayms(20);
  384.          
  385.   }
  386.   else
  387.   {
  388.           bu();
  389.   
  390. }
  391. }
  392. }
復制代碼

main.docx

15.22 KB, 下載次數: 5, 下載積分: 黑幣 -5

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

使用道具 舉報

沙發
ID:1 發表于 2018-5-26 02:26 | 只看該作者
需要補充原理圖和完整源碼才能獲得100積分
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品自在在线观看 | 久久激情网 | 久草在线影 | 亚洲久在线 | 特一级毛片 | 午夜精品久久久久久久久久久久久 | 国产精品1区2区 | 日韩欧美在线免费观看 | 国产女人与拘做视频免费 | 日韩一二区在线观看 | 香蕉久久久久久 | 国产免费一区二区 | 久久亚洲一区 | 欧美h版| 国产丝袜一区二区三区免费视频 | 成人精品一区亚洲午夜久久久 | 午夜精品一区二区三区在线观看 | 美女视频h | 一级毛片在线看 | 欧美激情第一区 | 中文字幕精品一区久久久久 | 欧美午夜影院 | 国产精彩视频在线观看 | 国产丝袜一区二区三区免费视频 | 天堂在线中文 | 韩日在线视频 | 一色一黄视频 | 精品国产免费一区二区三区五区 | 色综合区| 成人欧美一区二区三区白人 | 性色av一区 | 欧美一区二区网站 | 91深夜福利视频 | 国产一区二区三区四区三区四 | 日韩视频三区 | 欧美一区二区三区在线视频 | 国产精品久久久久久久久免费软件 | jⅰzz亚洲 | 玖玖在线精品 | 91在线观看 | 夜夜摸夜夜操 |