直流電機調(diào)速C51程序
#include
unsignedcharcodef_rotation[4]={0x02,0x04,0x08,0x10};//正轉(zhuǎn)表格
unsignedcharcodeb_rotation[4]={0x10,0x08,0x040,0x02};//反轉(zhuǎn)表格
voiddelay(unsignedinti)//延時
{
while(--i);
}
main()
{
unsignedchari;
while(1)
{
for(i=0;i<4;i++)//4相
{
p1=f_rotation[i];//輸出對應(yīng)的相可以自行換成反轉(zhuǎn)表格
delay(10000);//改變這個參數(shù)可以調(diào)整電機轉(zhuǎn)速
}
}
}
10.直流電機調(diào)速
#include
sbitkey1=p3^1;
sbitPWM=p1^5;
unsignedcharcycle;//定義周期該數(shù)字x基準定時時間如果是10則周期是10x0.1ms
unsignedcharpwm_on;//定義高電平時間
voiddelay(unsignedintcnt)
{
while(--cnt);
}
main()
{
unsigned char pwm_num;//定義檔位
tmod |=0x01;//定時器設(shè)置 1ms in 12m crystal
th0=(65536-1000)/256;
tl0=(65536-1000)%256;//定時1ms
ie= 0x82; //打開中斷
tr0=1;
cycle = 10;// 時間可以調(diào)整 這個是10步調(diào)整 周期10ms 8位pwm就是256步
while(1)
{
if(!key1)
{
delay(10000);
if(!key1)
{
pwm_num++;
if(pwm_num==4)pwm_num=0;
switch(pwm_num){
case 0:p1=0xfe;pwm_on=0;break;//高電平時長
case 1:p1=0xfd;pwm_on=4;break;
case 2:p1=0xfb;pwm_on=6;break;
case 3:p1=0xf7;pwm_on=8;break;
default:break;
}
}
}
}
}
void tim(void) interrupt 1 using 1
{
statICunsigned char count; //
th0=(65536-1000)/256;
tl0=(65536-1000)%256;//定時1ms
if (count==pwm_on)
{
pwm = 1; //燈滅
}
count++;
if(count == cycle)
{
count=0;
if(pwm_on!=0) //如果左右時間是0 保持原來狀態(tài)
pwm = 0;//燈亮
}
}