标题:
51单片机的直流电机PWM调速系统源码(加速、减速、正反转)
[打印本页]
作者:
duwentao
时间:
2018-4-25 23:29
标题:
51单片机的直流电机PWM调速系统源码(加速、减速、正反转)
基于STC89C51单片机的直流电机PWM调速,通过按键实现电机的加速、减速、正反转等功能。
单片机源程序如下:
#include <reg51.h>
static char pwmdir,pwmdirold;
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
//sbit P0_4=P0^4;
//sbit P0_6=P0^6;
sbit P2_0=P2^0;
sbit P2_1=P2^1;
sbit P2_2=P2^2;
sbit P2_3=P2^3;
sbit P2_4=P2^4;
sbit P2_5=P2^5;
sbit P2_6=P2^6;
sbit P2_7=P2^7;
static unsigned char pwm_f;
static unsigned char H_MAX;
static unsigned char keyval,keyold,pwm_pulse;
void Delay(unsigned char ms);
unsigned char GetKey();
void LedShow(unsigned char value);
void Timer0_init();
void main()
{
keyval=keyold=0;
pwmdir=pwmdirold=2;
H_MAX=150;
pwm_pulse=0;
pwm_f=0;
P1=0x80;
Timer0_init();
while(1)
{
keyval=GetKey();
LedShow(keyval);
if(0==keyval)
{
continue;
}
else
{
if(5==keyval)
{
pwmdir=pwmdirold=2;
P1=0x80;
break;
}
else if(1==keyval)
{
pwmdir=1;
}
else if(2==keyval)
{
pwmdir=0;
}
else if(3==keyval)
{
H_MAX=150;
}
else if(4==keyval)
{
H_MAX=80;
}
}
}
}
void Timer0_init()
{
TMOD=0x02;
TH0=0x48;
TL0=TH0;
ET0=1;
TR0=1;
EA=1;
}
void Timer0_inter() interrupt 1
{
pwm_f++;
pwm_f%=200;
if(2!=pwmdir)
{
if(pwmdirold!=pwmdir)
{
pwmdirold=pwmdir;
P1_2=0;
P1_3=0;
Delay(100);//
if(1==pwmdir)
{
P1_2=0;
if(0==pwm_f)
{
P1_3=1;
}
else if(H_MAX==pwm_f)
{
P1_3=0;
}
}
else
{
P1_3=0;
if(0==pwm_f)
{
P1_2=1;
}
else if(H_MAX==pwm_f)
{
P1_2=0;
}
}
}
else
{
if(1==pwmdir)
{
P1_2=0;
if(0==pwm_f)
{
P1_3=1;
}
else if(H_MAX==pwm_f)
{
P1_3=0;
}
}
else
{
P1_3=0;
if(0==pwm_f)
{
P1_2=1;
}
else if(H_MAX==pwm_f)
{
P1_2=0;
}
}
}
}
}
unsigned char GetKey()
{
P2_0=0;
if(0==P2_4)
{
P2_0=1;
return 7;
}
else if(0==P2_5)
{
P2_0=1;
return 8;
}
P2_0=1;
P2_1=0;
if(0==P2_4)
{
P2_1=1;
return 5;
}
else if(0==P2_5)
{
P2_1=1;
return 6;
}
P2_1=1;
P2_2=0;
if(0==P2_4)
{
P2_2=1;
return 3;
}
else if(0==P2_5)
{
P2_2=1;
return 4;
}
P2_2=1;
P2_3=0;
if(0==P2_4)
{
P2_3=1;
return 1;
}
else if(0==P2_5)
{
P2_3=1;
return 2;
}
else
{
P2_3=1;
return 0;
}
}
void LedShow(unsigned char value)
{
switch(value)
{
case 1:
P0=0xF9;
P1_0=0;
break;
case 2:
P0=0xA4;
P1_0=0;
break;
case 3:
P0=0xB0;
P1_0=0;
break;
case 4:
P0=0x99;
P1_0=0;
break;
case 5:
P0=0x92;
P1_0=0;
break;
case 6:
P0=0x82;
P1_0=0;
break;
case 7:
P0=0xF8;
P1_0=0;
break;
case 8:
P0=0x80;
P1=0xFE;
break;
default:
break;
}
}
void Delay(unsigned char ms)
{
unsigned int i=100*ms;
while(i--) ;
}
复制代码
所有资料51hei提供下载:
基于STC89C51单片机的直流电机PWM调速,通过按键实现电机的加速、减速、正反转等功能。.rar
(18.69 KB, 下载次数: 97)
2018-4-25 23:28 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
DIY电子
时间:
2018-4-26 09:31
学习了 谢谢分享...
作者:
RHYTHM951
时间:
2018-4-26 11:34
学习了 谢谢分享...
作者:
zhouzhouzhou123
时间:
2018-5-14 22:44
按键是怎么设置的,没看懂
作者:
834733157
时间:
2024-4-8 16:51
你好,请问有仿真电路图吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1