⑴ 51單片機步進電機正反轉程序
單片機控制步進電機,我想你說的是兩相步進電機,一般是控制其相序分配的順逆從而控制正反轉,一般而言,步進電機相序分配你可以做成一個數組比如step[]={0x03,0x06,0x0c,0x09},這樣來說可以假設P0口是步進電機控制口,那麼可以按如下方式來控制: while(1) { for(i=0;i<4;i++) { if(fx==1)P0=step[i]; //正向 else P0=step[3-i]; //反向 delay(x); //x大小決定電機速度。
根據電機相數買個驅動器。然後用單片機產生脈沖來控制電機的轉動以及正反轉。單片機產生脈沖的方法和單片機控制流水燈是一樣的。ULN2003D 是驅動步進電機的驅動晶元,主要是匹配電機所需的電流。 由於是四相電機,步進電機之所以可以轉動就需要給相繞組提供連續的脈沖,所以需要4個埠來控制四相繞組的工作狀態(P15應該是不需要的),具體的編碼要看電機的拍數; 一旦明白這些,你就可以很容易編寫代碼來控制電機的轉動了,還有在脈沖間你可以設置不同的延時時間來調節電機的轉速。
⑵ 求51單片機定時LED閃爍程序代碼
#include<reg52.h>//包括一個52標准內核的頭文件
#defineucharunsignedchar
/******************************主函數*****************************/
voidtimer0();
voidmain()//主程序
{
TMOD=0x01;//定時器0工作方式1
EA=1;
ET0=1;//定時器0中斷
TR0=1;//啟動定時器0
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
while(1);//程序循環
}
/*****************************定時器0中斷*************************/
voidtimer0()interrupt1
{
uchart;//定義變數
TF0=0;//定時器清0
t++;//中斷一次累加1
if(t==20)//預置值,溢出20次就是1秒鍾,晶振12MHZ
{
t=0;
P3=~P3;//反轉LED燈的亮滅
}
}
/*****************************************************************/
⑶ 51單片機,用兩個按鍵分別控制兩個led,一個亮/滅,另一個閃爍/滅,為什麼我按下了第二個燈不閃呢
你的led1=~led1;這個語句沒有循環,所以只會反轉一次。要麼加循環,要麼再寫一個閃爍函數。
voidled_filcker(usignedcharx)
{
while(x)
{
led1=~led1;
x--:
}
}
如果你是想,按一下,松開也會閃爍,再按一下熄滅。你得定義一個變數來表示按鍵的按下。
#include<reg52.h>
#define uchar unsigned char
bit stop=1;
sbit k5=P1^4;
void delay(uchar xms)
{
while(xms--);
}
void main()
{
if(k5==0)
{
delay(1000);
if(k5==0)
{
while(k5==0)
{
if(stop)
<<<<<<<<<<<<<<<此處執行你的語句
else
stop=~stop:
}
}
}
}
⑷ 學習51單片機 狀態機程序,按鍵控制led燈,按下之後一直亮著,不反轉
原為:
if(st==2)
{
P1=~P1;
st=3;
}
return;
改為:
if(st==2)
{
P1=~P1;
st=3;
return;
}