欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
步進電機&ULN2003和直流電機&L298驅動與正反轉實驗,單片機代碼加仿真
[打印本頁]
作者:
Eraser
時間:
2019-6-11 16:32
標題:
步進電機&ULN2003和直流電機&L298驅動與正反轉實驗,單片機代碼加仿真
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
_CQBYIHP`@[)B[0Y$)@TV}L.png
(116.19 KB, 下載次數: 42)
下載附件
2019-6-11 16:25 上傳
步進電機和直流電機能夠單獨工作,仿真開始,兩個電機均不轉動,然后通過按鍵控制對應的點擊正反轉,代碼清晰,作者留有添加電機控速的代碼空間,并且可以很簡單的加入代碼控速模塊。
其中還有一些小細節,直流電機反轉的時候,無法對步進電機進行操作,即在直流電機反轉過程中,控制步進電機正反轉的按鈕無效。其余情況下,可隨意控制直流電機和步進電機的正反轉
系統還有工作指示燈,對應步進電機和直流電機工作情況。
此外,還提供了一個聲光報警系統,當單刀雙擲開關撥至阻塞時,電路報警,電路警示燈亮,蜂鳴器響,兩個電機立刻停止工作。
單片機源程序如下:
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^0; //用戶按鍵
sbit key2=P3^1;
sbit key3=P3^5;
sbit key4=P3^6;
sbit danger=P3^2;
sbit beez=P2^2;
sbit PWM1=P3^3;
sbit PWM2=P3^4;
sbit led1=P2^0;
sbit led2=P2^1;
uchar code F_Rotation[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //步進電機驅動
uchar i;
uint flag1,flag2,flag3,flag4;
/******************************************************************/
/* 延時函數Xms */
/******************************************************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/******************************************************************/
/* 獨立按鍵掃描函數 */
/******************************************************************/
void keyscan()
{
P3=0xff;//拉高P3,以讀取P3口值
if(key1==0)//鍵1被按下
{
delay(5);//延時消抖
if(key1==0)
{
flag1++;
flag1%=2;
}
while(!key1);
delay(5);//延時消抖
while(!key1);//松手檢測
}
if(key2==0)
{
delay(5);
if(key2==0)
{
flag2++;
flag2%=2;
}
while(!key2);
delay(5);
while(!key2);
}
if(key3==0)
{
delay(5);
if(key3==0)
{
flag3++;
flag3%=2;
}
while(!key3);
delay(5);
while(!key3);
}
if(key4==0)
{
delay(5);
if(key4==0)
{
flag4++;
flag4%=2;
}
while(!key4);
delay(5);
while(!key4);
}
}
void main()
{
TMOD=0x01;
EA=1;
EX0=1;
ET0=0;
TH0=(65536-(14648))/256;
TL0=(65536-(14648))%256;
TR0=0;
while(1)
{
//步進正轉
keyscan();
while(flag1==1)
{
led1=0;
keyscan();
if(!flag1){ led1=1; led2=1; break;}
if(flag2){ led1=1; led2=1; flag1=0; break;}
if(flag3){ led1=1; led2=1; flag1=0; break;}
if(flag4){ led1=1; led2=1; flag1=0; break;}
for(;i<8;i++)
{
keyscan();
P1 = F_Rotation[i];
if(!flag1){ led1=1; led2=1; break;}
if(flag2){ led1=1; led2=1; flag1=0; break;}
if(flag3){ led1=1; led2=1; flag1=0; break;}
if(flag4){ led1=1; led2=1; flag1=0; break;}
delay(100);
}
i=0;
led1=1;
}
//步進反轉
keyscan();
while(flag2==1)
{
led1=0;
keyscan();
if(flag1){ led1=1; led2=1; flag2=0; break;}
if(!flag2){ led1=1; led2=1; break;}
if(flag3){ led1=1; led2=1; flag2=0; break;}
if(flag4){ led1=1; led2=1; flag2=0; break;}
for(;i>0;i--)
{
keyscan();
P1 = F_Rotation[i];
if(flag1){ led1=1; led2=1; flag2=0; break;}
if(!flag2){ led1=1; led2=1; break;}
if(flag3){ led1=1; led2=1; flag2=0; break;}
if(flag4){ led1=1; led2=1; flag2=0; break;}
delay(100);
}
i=8;
led1=1;
}
//直流正轉
keyscan();
while(flag3==1)
{
led2=0;
keyscan();
if(flag1){ led1=1; led2=1; flag3=0; break;}
if(flag2){ led1=1; led2=1; flag3=0; break;}
if(!flag3){ led1=1; led2=1; break;}
if(flag4){ led1=1; led2=1; flag3=0; break;}
PWM1=0;
PWM2=0;
delay(100);
PWM1=1;
delay(100);
led2=1;
}
//直流反轉
keyscan();
while(flag4==1)
{
led2=0;
keyscan();
if(flag1);
if(flag2);
if(flag3){ led1=1; led2=1; flag4=0; break;}
if(!flag4){ led1=1; led2=1; break;}
PWM1=0;
PWM2=0;
delay(100);
PWM2=1;
delay(100);
led2=1;
}
}
}
void int0(void) interrupt 0
{
while(danger==0)
{
beez=0;
led1=1;
led2=1;
while(!danger);
beez=1;
}
}
復制代碼
所有資料51hei提供下載:
步進電機加直流電機.rar
(69.73 KB, 下載次數: 42)
2019-6-11 16:32 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1