欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 步進(jìn)電機(jī)&ULN2003和直流電機(jī)&L298驅(qū)動(dòng)與正反轉(zhuǎn)實(shí)驗(yàn),單片機(jī)代碼加仿真 [打印本頁]

作者: Eraser    時(shí)間: 2019-6-11 16:32
標(biāo)題: 步進(jìn)電機(jī)&ULN2003和直流電機(jī)&L298驅(qū)動(dòng)與正反轉(zhuǎn)實(shí)驗(yàn),單片機(jī)代碼加仿真
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


步進(jìn)電機(jī)和直流電機(jī)能夠單獨(dú)工作,仿真開始,兩個(gè)電機(jī)均不轉(zhuǎn)動(dòng),然后通過按鍵控制對(duì)應(yīng)的點(diǎn)擊正反轉(zhuǎn),代碼清晰,作者留有添加電機(jī)控速的代碼空間,并且可以很簡(jiǎn)單的加入代碼控速模塊。
其中還有一些小細(xì)節(jié),直流電機(jī)反轉(zhuǎn)的時(shí)候,無法對(duì)步進(jìn)電機(jī)進(jìn)行操作,即在直流電機(jī)反轉(zhuǎn)過程中,控制步進(jìn)電機(jī)正反轉(zhuǎn)的按鈕無效。其余情況下,可隨意控制直流電機(jī)和步進(jìn)電機(jī)的正反轉(zhuǎn)
系統(tǒng)還有工作指示燈,對(duì)應(yīng)步進(jìn)電機(jī)和直流電機(jī)工作情況。
此外,還提供了一個(gè)聲光報(bào)警系統(tǒng),當(dāng)單刀雙擲開關(guān)撥至阻塞時(shí),電路報(bào)警,電路警示燈亮,蜂鳴器響,兩個(gè)電機(jī)立刻停止工作。

單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #include<intrins.h>

  4. #define uchar unsigned char
  5. #define uint unsigned int

  6. sbit key1=P3^0;  //用戶按鍵
  7. sbit key2=P3^1;
  8. sbit key3=P3^5;
  9. sbit key4=P3^6;

  10. sbit danger=P3^2;

  11. sbit beez=P2^2;

  12. sbit PWM1=P3^3;
  13. sbit PWM2=P3^4;

  14. sbit led1=P2^0;
  15. sbit led2=P2^1;

  16. uchar code F_Rotation[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};  //步進(jìn)電機(jī)驅(qū)動(dòng)

  17. uchar i;
  18. uint flag1,flag2,flag3,flag4;
  19. /******************************************************************/
  20. /*                   延時(shí)函數(shù)Xms                                  */
  21. /******************************************************************/
  22. void delay(uint z)
  23. {
  24.         uint x,y;
  25.         for(x=z;x>0;x--)
  26.                 for(y=110;y>0;y--);
  27. }
  28. /******************************************************************/
  29. /*              獨(dú)立按鍵掃描函數(shù)                                  */
  30. /******************************************************************/
  31. void keyscan()  
  32. {        
  33.         P3=0xff;//拉高P3,以讀取P3口值
  34.         if(key1==0)//鍵1被按下
  35.         {
  36.                 delay(5);//延時(shí)消抖
  37.                 if(key1==0)
  38.                 {
  39.                         flag1++;
  40.                         flag1%=2;
  41.                 }
  42.                 while(!key1);
  43.                 delay(5);//延時(shí)消抖
  44.                 while(!key1);//松手檢測(cè)
  45.         }
  46.         if(key2==0)
  47.         {
  48.                 delay(5);
  49.                 if(key2==0)
  50.                 {
  51.                         flag2++;
  52.                         flag2%=2;
  53.                 }
  54.                 while(!key2);
  55.                 delay(5);
  56.                 while(!key2);
  57.         }
  58.         if(key3==0)
  59.         {
  60.                 delay(5);
  61.                 if(key3==0)
  62.                 {
  63.                         flag3++;
  64.                         flag3%=2;
  65.                 }
  66.                 while(!key3);
  67.                 delay(5);
  68.                 while(!key3);
  69.         }
  70.         if(key4==0)
  71.         {
  72.                 delay(5);
  73.                 if(key4==0)
  74.                 {
  75.                         flag4++;
  76.                         flag4%=2;
  77.                 }
  78.                 while(!key4);
  79.                 delay(5);
  80.                 while(!key4);
  81.         }
  82. }
  83. void main()
  84. {
  85.         TMOD=0x01;
  86.         EA=1;
  87.         EX0=1;
  88.         ET0=0;

  89.         TH0=(65536-(14648))/256;
  90.         TL0=(65536-(14648))%256;

  91.         TR0=0;
  92.        
  93.         while(1)
  94.         {
  95.                 //步進(jìn)正轉(zhuǎn)
  96.                 keyscan();
  97.                 while(flag1==1)
  98.                 {
  99.                         led1=0;
  100.                         keyscan();
  101.                         if(!flag1){ led1=1; led2=1; break;}
  102.                         if(flag2){ led1=1; led2=1; flag1=0; break;}
  103.                         if(flag3){ led1=1; led2=1; flag1=0; break;}
  104.                         if(flag4){ led1=1; led2=1; flag1=0; break;}
  105.                         for(;i<8;i++)
  106.                         {
  107.                                 keyscan();
  108.                                 P1 = F_Rotation[i];
  109.                                 if(!flag1){ led1=1; led2=1; break;}
  110.                                 if(flag2){ led1=1; led2=1; flag1=0; break;}
  111.                                 if(flag3){ led1=1; led2=1; flag1=0; break;}
  112.                                 if(flag4){ led1=1; led2=1; flag1=0; break;}
  113.                                 delay(100);
  114.                         }
  115.                         i=0;
  116.                         led1=1;
  117.                 }
  118.                 //步進(jìn)反轉(zhuǎn)
  119.                 keyscan();
  120.                 while(flag2==1)
  121.                 {
  122.                         led1=0;
  123.                         keyscan();
  124.                         if(flag1){ led1=1; led2=1; flag2=0; break;}
  125.                         if(!flag2){ led1=1; led2=1; break;}
  126.                         if(flag3){ led1=1; led2=1; flag2=0; break;}
  127.                         if(flag4){ led1=1; led2=1; flag2=0; break;}
  128.                         for(;i>0;i--)
  129.                         {
  130.                                 keyscan();
  131.                                 P1 = F_Rotation[i];
  132.                                 if(flag1){ led1=1; led2=1; flag2=0; break;}
  133.                                 if(!flag2){ led1=1; led2=1; break;}
  134.                                 if(flag3){ led1=1; led2=1; flag2=0; break;}
  135.                                 if(flag4){ led1=1; led2=1; flag2=0; break;}
  136.                                 delay(100);
  137.                         }
  138.                         i=8;
  139.                         led1=1;
  140.                 }
  141.                 //直流正轉(zhuǎn)
  142.                 keyscan();
  143.                 while(flag3==1)
  144.                 {
  145.                         led2=0;
  146.                         keyscan();
  147.                         if(flag1){ led1=1; led2=1; flag3=0; break;}
  148.                         if(flag2){ led1=1; led2=1; flag3=0; break;}
  149.                         if(!flag3){ led1=1; led2=1; break;}
  150.                         if(flag4){ led1=1; led2=1; flag3=0; break;}
  151.                         PWM1=0;
  152.                         PWM2=0;
  153.                         delay(100);
  154.                         PWM1=1;
  155.                         delay(100);
  156.                         led2=1;
  157.                 }
  158.                 //直流反轉(zhuǎn)
  159.                 keyscan();
  160.                 while(flag4==1)
  161.                 {
  162.                         led2=0;
  163.                         keyscan();
  164.                         if(flag1);
  165.                         if(flag2);
  166.                         if(flag3){ led1=1; led2=1; flag4=0; break;}
  167.                         if(!flag4){ led1=1; led2=1; break;}
  168.                         PWM1=0;
  169.                         PWM2=0;
  170.                         delay(100);
  171.                         PWM2=1;
  172.                         delay(100);
  173.                         led2=1;
  174.                 }
  175.         }

  176. }

  177. void int0(void) interrupt 0
  178. {
  179.         while(danger==0)
  180.         {
  181.                 beez=0;
  182.                 led1=1;
  183.                 led2=1;
  184.                 while(!danger);
  185.                 beez=1;
  186.         }
  187. }
復(fù)制代碼

所有資料51hei提供下載:
步進(jìn)電機(jī)加直流電機(jī).rar (69.73 KB, 下載次數(shù): 42)







歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1