
#include <reg52h >
#define uchar unsigned char
#define uint unsigned int
sbit s2=P3^7;
sbit s3=P3^6;
sbit fm=P2^3;
uchar pwm,num;
void delay(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void keyscan()
{
if(s2==0)
{
delay(80);
if(s2==0)
{
if(pwm<32)
{
pwm++;
delay(150);
}
else //如果大于32 蜂鸣器想
{
bee( );
}
}
}
if(s3==0)
{
delay(80);
if(s3==0)
{
if(pwm>1)
{
pwm--;
delay(50);
}
else //如果小于1 蜂鸣器想
{
bee( );
}
}
}
}
void init_t0( )
{
TMOD=0x01;
TH0=(65536-500)/256; //500ms
TL0=(65536-500)%256;
EA=1;
ET0=1;
TR0=1;
}
void t0( ) interrupt 1
{
TR0=0; //关计时器
TH0=(65536-500)/256;
TL0=(65536-500)%256;
num++;
if(num>32)
{
num=0;
}
if(num<=pwm )
{
P1=0xff;
}
else
{
P1=0x00;
}
TR0=1;
}
void main( )
{
init_t0( );
num=0;
pwm=0;
while(1)
{
keyscan();
}
}
利用定时器。
uint PwmCnt = 0;
sbit PWN_OUT = P1^1;//可改动uint PwmD = 50;//占空比 可调
uint PwmF = 500;//频率 可调 10 = 1HZ 500 =50HZ
uint PwmCnt = 0;//占空比计数值
uint FreCnt = 0;//频率分频值
void T0 interrupt 1
{
//赋值TO计数值 50us
if(++FreCnt>= (1000/PwmF))//通过改变PwmF 达到分频效果 改变输出频率
{
if(++PwmCnt>=100) PwmCnt=0; //再次分频100 占空比精度需要这样
if(PwmCnt<PwmD )//改变D值 可以改变引脚状态占用时间
{
PWN_OUT = 1;
}
else
{
PWN_OUT =0;
}
}
}
//思想是这样 我也没测过
PCA时钟用T0溢出,
void PCA_Init (void)
{
PCA0MD &=~0x40;//关闭开门狗
//0号舵机
PCA0MD=0x04;//0000 0100 定时器0溢出,禁止看门狗
PCA0CPM0=0x42;//0100010 使能8位脉宽调制方式
PCA0CPL0=235; //
PCA0CPH0=235;//初始化为角度为0
}
//
void Counter_Init(void)
{ TCON=0x10; //0001 0000 启动定时器T0&T1
CKCON=0x00; //定时时钟来源 系统时钟12分频( 2MHZ)
TMOD=0x02; //0000 00(计时)10(方式2) Timer0 工作在方式2 8位计数器自动重载,
TL0=120; //计数器初 值 256-156=100 50HZ(20ms/256 计156次)120 58HZ 150 74HZ 延时20 80 45HZ 延时50
TH0=120; //计数器重载值
}
//
以上就是关于想向大神求一个用pwm控制电机转速的程序,程序最好简单点,O(∩_∩)O谢谢全部的内容,包括:想向大神求一个用pwm控制电机转速的程序,程序最好简单点,O(∩_∩)O谢谢、51单片机怎样输出频率F=0.2-50HZ,占空比D=1-100%可调的PWM波形、如何用C8051F340的PCA产生频率可调的PWM希望有程序,谢谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)