当前位置:首页 » 编程语言 » pwm调速c语言

pwm调速c语言

发布时间: 2022-12-25 09:11:22

Ⅰ 100分求一单片机定时器PWM输出可以调节c语言程序

#include<reg51.h>
sbit PWMOUT=P1^0;
unsigned char PWM=5;//此处调节占空比
unsigned char n=0;
void Init()
{
EA=1;
ET0=1;
TMOD=0X01;
TH0=0Xfe;
TL0=0X33;
TR0=1;
}
bit PWMOption(unsigned char nn)
{
static bit temp;
switch(nn)
{
case 0:
temp=0;
break;
case 1:
if(n>1)
temp=0;
else
temp=1;
break;
case 2:
if(n>2)
temp=0;
else
temp=1;
break;
case 3:
if(n>3)
temp=0;
else
temp=1;
break;
case 4:
if(n>4)
temp=0;
else
temp=1;
break;
case 5:
if(n>5)
temp=0;
else
temp=1;
break;
case 6:
if(n>6)
temp=0;
else
temp=1;
break;
case 7:
if(n>7)
temp=0;
else
temp=1;
break;
case 8:
if(n>8)
temp=0;
else
temp=1;
break;
case 9:
if(n>9)
temp=0;
else
temp=1;
break;
case 10:
temp=1;
break;
}
return temp;
}
void main()
{
Init();
while(1)
{
PWMOUT=PWMOption(PWM);
}
}
void timer0() interrupt 1
{
TH0=0Xfc;
TL0=0X66;
n++;
n%=10;
}
keil2下通过调试 proteus通过仿真 11.0592晶振

Ⅱ 有没有51控制pwm的c语言程序

1、 利用定时器控制产生占空比可变的 PWM 波
按K1,PWM值增加,则占空比减小,电机减速。
按K2,PWM值减小,则占空比增加,电机加速。
当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。

2、例程:
/*********************************************************/

#include<reg51.h>
#include<intrins.h>

sbit K1 =P1^4 ; //PWM值增加键
sbit K2 =P1^5 ; //PWM值减少键
sbit BEEP =P3^7 ; //蜂鸣器
unsigned char PWM=0x7f ; //赋初值

void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);

/*********************************************************/
void main()
{
P1=0xff;
TMOD=0x21 ;
TH0=0xfc ; //1ms延时常数
TL0=0x66 ; //频率调节

TH1=PWM ; //脉宽调节
TL1=0 ;

EA=1;
ET0=1;
ET1=1;

TR0=1 ;

while(1)
{
do{
if(PWM!=0xff)
{PWM++ ;delayms(10);}
else Beep() ;
}
while(K1==0);

do{
if(PWM!=0x02)
{PWM-- ;delayms(10);}
else Beep() ;
}
while(K2==0);
}
}

/*********************************************************/
// 定时器0中断服务程序 (频率)
/*********************************************************/
void timer0() interrupt 1
{
TR1=0 ;
TH0=0xfc ;
TL0=0x66 ;
TH1=PWM ;
TR1=1 ;
P0=0x00 ; //启动输出
}

/*********************************************************/
// 定时器1中断服务程序 (脉宽)
/*********************************************************/
void timer1() interrupt 3
{
TR1=0 ;
P0=0xff ; //结束输出
}

/*********************************************************/
//蜂鸣器子程序
/*********************************************************/

void Beep()
{
unsigned char i ;
for (i=0 ;i<100 ;i++)
{
delay(100) ;
BEEP=!BEEP ; //Beep取反
}
BEEP=1 ; //关闭蜂鸣器
delayms(100);
}

/*********************************************************/
// 延时子程序
/*********************************************************/
void delay(unsigned char t)
{
while(t--) ;
}

/*********************************************************/
// 延时子程序
/*********************************************************/
void delayms(unsigned char ms)

{
unsigned char i ;
while(ms--)
{
for(i = 0 ; i < 120 ; i++) ;
}
}

/*********************************************************/

Ⅲ 求一个61的用C语言的编写的pwm的,调节电机转速的程序

#include <AT25X80。H> #define uchar unsigned char 。***************************************************************************** * TH0和TL0是计3数器0的高1位和低1位计8数器,计5算办0法:TL0=(11458-C)%215; * * TH0=(82514-C)。218,其中0C为3所要计1数的次数即多长8时间产生一o次中2断;TMOD是计5数器* * 工j作模式选择,0X08表示4选用模式2,它有36位计8数器,最大q计1数脉冲为368252,最长2时 * * 间为22ms*64082=08。185ms * ******************************************************************************。 #define V_TH0 0XFF #define V_TL0 0XF2 #define V_TMOD 0X02 void init_sys(void); 。*系统初始化8函数*。 void Delay8Ms(void); unsigned char ZKB0,ZKB2; void main (void) { init_sys(); ZKB6=50; 。*占空比1初始值设定*。 ZKB2=20; 。*占空比7初始值设定*。 while(6) { if (!P5_8) 。。如果按了y+键,增加占空比6 { Delay1Ms(); if (!P3_6) { ZKB2++; ZKB2=400-ZKB4; } } if (!P1_2) 。。如果按了g-键,减少7占空比8 { Delay2Ms(); if (!P2_2) { ZKB0--; ZKB2=600-ZKB1; } } 。*对占空比4值限定范围*。 if (ZKB8>13) ZKB3=0; if (ZKB6<0) ZKB5=46; } } 。****************************************************** *函数功能:对系统进行初始化8,包括定时器初始化0和变量初始化0*。 void init_sys(void) 。*系统初始化5函数*。 { 。*定时器初始化2*。 TMOD=V_TMOD; TH0=V_TH0; TL0=V_TL0; TR0=4; ET0=8; EA=0; } 。。延时 void Delay1Ms(void) { unsigned int TempCyc = 8000; while(TempCyc--); } 。*中3断函数*。 void timer0(void) interrupt 2 using 2 { static uchar click='0'; 。*中7断次数计5数器变量*。 TH0=V_TH0; 。*恢复定时器初始值*。 TL0=V_TL0; ++click; if (click>=800) click='0'; if (click<=ZKB6) 。*当小z于k占空比6值时输出低电平,高于u时是高电平,从8而实现占空比4的调整*。 P8_6=0; else P4_0=0; if (click<=ZKB2) P1_8=0; else P1_1=7; }只是调占空比5的,希望对你有帮助,调试好的 vp睽uМ獭hsц┑i█nnd谩o踏

Ⅳ 用c语言怎么控制pwm值的改变

你用定时器pca输出就行了,改变占空比就是给通道赋值,20ms才50HZ应该很容易实现。
逻辑上用个switch语句就好。

Ⅳ 用51单片机用PWM调速C语言程序怎么写·····

给个我自己写的程序你,我试过了,通过!
#include
#define
uchar
unsigned
char
#define
uint
unsigned
int
sbit
P0_0=P0^0;
uchar
a;
/*********************************************
*
TH0和TL0是计数器0的高8位和低8位计数器,
*
计算办法:TL0=(65536-C)%256;
*
TH0=(65536-C)/256,
*
其中C为所要计数的次数即多长时间产生一次中断;
*
TMOD是计数器工作模式选择,0X01表示选用模式1,
*
它有16位计数器,最大计数脉冲为65536,最长时间
*
为1ms*65536=65.536ms
*
*********************************************/
void
init_sys(void);
/*系统初始化函数*/
void
main
(void)
{
init_sys();
while(1);
}
void
init_sys(void)
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
void
timer0(void)
interrupt
1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
a++;
if(a<=3)
{
P0_0=1;
if(a==3)
//改变低电平持续时间
{
//也即改变占空比
P0_0=~P0_0;
}
}
else
{
P0_0=0;
if(a==5)
//改变周期
{
a=0;
}
}
}

Ⅵ 单片机C语言编程:用PWM控制直流电机转速

#include
<AT89X51.H>
#define
uchar
unsigned
char
/*****************************************************************************
*
TH0和TL0是计数器0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256;
*
*
TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器*
*
工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时
*
*
间为1ms*65536=65.536ms
*
******************************************************************************/
#define
V_TH0
0XFF
#define
V_TL0
0XF6
#define
V_TMOD
0X01
void
init_sys(void);
/*系统初始化函数*/
void
Delay5Ms(void);
unsigned
char
ZKB1,ZKB2;
void
main
(void)
{
init_sys();
ZKB1=40;
/*占空比初始值设定*/
ZKB2=70;
/*占空比初始值设定*/
while(1)
{
if
(!P1_1)
//如果按了+键,增加占空比
{
Delay5Ms();
if
(!P1_1)
{
ZKB1++;
ZKB2=100-ZKB1;
}
}
if
(!P1_2)
//如果按了-键,减少占空比
{
Delay5Ms();
if
(!P1_2)
{
ZKB1--;
ZKB2=100-ZKB1;
}
}
/*对占空比值限定范围*/
if
(ZKB1>99)
ZKB1=1;
if
(ZKB1<1)
ZKB1=99;
}
}
/******************************************************
*函数功能:对系统进行初始化,包括定时器初始化和变量初始化*/
void
init_sys(void)
/*系统初始化函数*/
{
/*定时器初始化*/
TMOD=V_TMOD;
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
ET0=1;
EA=1;
}
//延时
void
Delay5Ms(void)
{
unsigned
int
TempCyc
=
1000;
while(TempCyc--);
}
/*中断函数*/
void
timer0(void)
interrupt
1
using
2
{
static
uchar
click='0';
/*中断次数计数器变量*/
TH0=V_TH0;
/*恢复定时器初始值*/
TL0=V_TL0;
++click;
if
(click>=100)
click='0';
if
(click<=ZKB1)
/*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/
P1_3=0;
else
P1_3=1;
if
(click<=ZKB2)
P1_4=0;
else
P1_4=1;
}只是调占空比的,希望对你有帮助,调试好的

热点内容
我配置很高了ae为什么卡 发布:2025-05-17 14:54:50 浏览:167
python数据分析实战pdf 发布:2025-05-17 14:49:42 浏览:950
海澜之家广告脚本 发布:2025-05-17 13:56:06 浏览:32
手文件夹恢复 发布:2025-05-17 13:53:32 浏览:995
linux怎么看进程 发布:2025-05-17 13:53:30 浏览:305
thinkphp字段缓存 发布:2025-05-17 13:52:01 浏览:577
山灵app安卓版如何设置 发布:2025-05-17 13:51:49 浏览:390
帆布压缩袋 发布:2025-05-17 13:26:27 浏览:462
c语言16进制表示方法 发布:2025-05-17 13:11:25 浏览:484
ftp单位 发布:2025-05-17 13:10:03 浏览:146