当前位置:首页 > 代码 > 正文

pwm代码(pwm控制代码)

admin 发布:2022-12-19 23:45 202


今天给各位分享pwm代码的知识,其中也会对pwm控制代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

求PWM调节led的程序

#includereg52.h bit flay;

sbit led=P1^1;

#define uchar unsigned char #define uint unsigned int sbit led=P1^1;

uchar pwm=0,aa=0; void delay(uint); void delays(); main() {

TMOD|=0x01; // 定时器初始化

TH0=(65536-100)/256;// 给定时器赋值 TL0=(65536-100)%256;//给定时器赋值

EA=1; // 开总中断

ET0=1; //开定时器0中断

TR0=1; //启动定时器 开始计数 while(1) {

while(!flay) { pwm++; //pwm表示占空比 delay(20);//延时大约20毫秒 保证pwm每增加一次都会进入中断 if(pwm==100) flay=1; }

//上面这段代码 占空比增加 //下面这段代码 占空比减少 while(flay) { pwm--; delay(20); if(pwm==1) flay=0; } } }

void delay(uint m) //大概延时m毫秒 { uint i,j; for(i=0;im;i++)

for(j=0;j110;j++); }

void delays() //延时函数 { uint i,j; for(i=0;i1;i++) for(j=0;j1;j++); }

void time() interrupt 1 {

//每100微秒进入一次中断 TH0=(65536-100)/256; TL0=(65536-100)%256; if(aa==pwm) { led=1; //熄灭8个led灯 } aa++; if(aa==100) //周期为10毫秒 { aa=0; if(pwm!=0) led=0; //点亮8个了的等 } }

程序在此 求采纳~

如何让stm32产生多路输出 PWM 最好有代码

我自己用的24路,贴不上来,就贴前面两个,其他的照着写就行。

#include "pwm.h"

void Timer1PwmInit(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_OCInitTypeDef TIM_OCInitStructure;

// RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, GPIO_InitStructure);

TIM_TimeBaseStructure.TIM_Period = PWM_PERIOD;//

TIM_TimeBaseStructure.TIM_Prescaler = PRECALERS;//

TIM_TimeBaseStructure.TIM_ClockDivision = 0;

TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0000;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM1, TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;

TIM_OCInitStructure.TIM_OutputState= TIM_OutputState_Disable;//只输出互补

TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;

TIM_OCInitStructure.TIM_Pulse = 0;//CCR

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;

TIM_OCInitStructure.TIM_OCNPolarity= TIM_OCNPolarity_Low;

TIM_OCInitStructure.TIM_OCIdleState= TIM_OCIdleState_Set;

TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;

TIM_OC3Init(TIM1, TIM_OCInitStructure);//CH3N PB15

TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM1, DISABLE); //预装载寄存器的内容被立即传送到影子寄存器

// TIM_ARRPreloadConfig(TIM1, ENABLE);

TIM_Cmd(TIM1, ENABLE);

TIM_CtrlPWMOutputs(TIM1, ENABLE);

}

//void SetLED5_W(u16 val)

//{

// TIM1-CCR1 = val;

//}

//void SetLED5_B(u16 val)

//{

// TIM1-CCR2 = val;

//}

//void SetLED5_G(u16 val)

//{

// TIM1-CCR3 = val;

//}

//void SetLED5_R(u16 val)

//{

// TIM1-CCR4 = val;

//}

void SetPwm4(u16 val)

{

TIM1-CCR3 = val;

}

//void Timer2PwmInit(void)

//{

// GPIO_InitTypeDef GPIO_InitStructure;

// TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

// TIM_OCInitTypeDef TIM_OCInitStructure;

//

// RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB |RCC_APB2Periph_AFIO, ENABLE); //使能GPIO外设和AFIO复用功能模块时钟

// AFIO-MAPR=0XF8FFFFFF;

// AFIO-MAPR|=0X04000000;

//

// GPIO_PinRemapConfig(GPIO_FullRemap_TIM2, ENABLE); //Timer2完全重映射

//

// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;

// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

// GPIO_Init(GPIOA, GPIO_InitStructure);//初始化GPIO

//

// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_10|GPIO_Pin_11;

// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出

// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

// GPIO_Init(GPIOB, GPIO_InitStructure);//初始化GPIO

//

// //初始化TIM2

// TIM_TimeBaseStructure.TIM_Period = PWM_PERIOD;

// TIM_TimeBaseStructure.TIM_Prescaler =PRECALERS;

// TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim

// TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式

// TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure);

//

// //初始化TIM2 Channel PWM模式

// TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;

// TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能

// TIM_OCInitStructure.TIM_Pulse = 0;//TIM-CCR = 0

// TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;

//

//

// TIM_OC1Init(TIM2, TIM_OCInitStructure);

// TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); //使能TIM2在CCR1上的预装载寄存器

//

// TIM_OC2Init(TIM2, TIM_OCInitStructure);

// TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);

//

// TIM_OC3Init(TIM2, TIM_OCInitStructure);

// TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);

//

// TIM_OC4Init(TIM2, TIM_OCInitStructure);

// TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);

//

// TIM_ARRPreloadConfig(TIM2, ENABLE);

// TIM_Cmd(TIM2, ENABLE); //使能TIM2

//}

//void SetLED2_R(u16 val)

//{

// TIM2-CCR4 = val;

//}

//void SetLED2_G(u16 val)

//{

// TIM2-CCR3 = val;

//}

//void SetLED2_B(u16 val)

//{

// TIM2-CCR2 = val;

//}

//void SetLED2_W(u16 val)

//{

// TIM2-CCR1 = val;

//}

51单片机PWM,谁能办忙解释一下各行意思

PWN通俗来说就是一种方波。当然方波也有很多种,因为各种方波的占空比不同。

#includereg52.h /把头文件reg52.h包含到你的程序中来

#define uchar unsigned char /规定unsigned char 是 uchar的意思

#define uint unsigned int /规定unsigned int 是 uint的意思

sbit key1=P3^2; /规定单片机P3口的第二个引脚对应的位变量叫 sbit key1

sbit key2=P3^3; /同上

uchar pwm; /自己定义一个变量叫PWN 他是无符号字符变量

void keyscan();/预先说明一下有个函数叫keyscan 作用是用来检测有哪个键按下了,专业术语叫键盘扫描

void delay(uchar z);/先声明有个叫延时的函数

void main() /主函数

{

pwm=0x7f; 给pwm变量赋值

TMOD=0x21; 设置单片机定时器1和定时器2的工作方式

TH0=0xfc; 给定时器0高八位装载初值,即是1111 1100

TL0=0x66; 给定时器0低八位装初值 0110 0110

TH1=pwm; 把变量pwn的值付给 定时器1高八位

TL1=0; 定时器1的低八位的初值是 0000 0000

EA=1; 中断总开关 闭合 下面的中断信号要通过这关才能真正发出中断

ET0=1; 定时器0的中断开关 闭合 即是允许定时器0发送中断

ET1=1; 定时器1的中断开关 闭合

TR0=1 ; 定时器0计数脉冲开关 闭合,定时器开始工作,达到溢出就会发出中断信号,然后经过ET0 或者ET1开关(上面已经闭合),再经过EA开关(上面已经闭合),才能到达中央处理器,告诉中央处理器去执行中断函数。

while(1)

{

keyscan(); 未收到中断信号前,中央处理器一直反复执行键盘扫描这函

}

}

void time0() interrupt 1 定时器0的中断函数

{

TH0=0xfc;

TL0=0x66;

TH1=pwm;

// TL1=0; //不能加 ???

TR1=1;

P0=0x00;

}

void time1() interrupt 3 定时器1的中断函数

{

TR1=0;

P0=0xff; //结束输出

}

void keyscan() 键盘扫描函数

{

if(key1==0)

{

if(pwm!=0xff)

{

pwm++;

delay(10);

}

// while(!key1); //不能加????

}

if(key2==0)

{

if(pwm!=0x01)

{

pwm--;

delay(10);

}

// while(!key2); //不能加,???

}

}

void delay(uchar z) 延时函数

{

uchar x,y;

for(x=z;x0;x--)

for(y=110;y0;y--);

}

STC12C56xxAD芯片怎么用pwm调速程序?

STC12C56xxAD芯片用pwm调速程序的代码如下:

sbit k1=P3^4;

sbit k2=P3^5;

void delay(unsigned int cnt)

{

unsigned char i;

for(;cnt0;cnt--)

for(i=0;i250;i++);

}

void main()

{

CCON=0; //PCA初始化

CL=0; //PCA的16位计数器低八位

CH=0; //PCA的16位计数器高八位

CMOD=0x00; //选择 系统时钟/12 为计数脉冲,则PWM的频率f=sysclk/256/12;

CCAP0H=0x80; // 占空比控制

CCAP0L=0x80;

PCA_PWM0=0x00; //控制占空比的第九位为0

CCAPM0=0x42; //允许P13作为PWM输出

CR=1; //启动PCA计数器

while(1)

{

if(k1==0)

{

delay(200);

while(k1==0);

CCAP0H+=5; //占空比调节

CCAP0L+=10;

}

if(k2==0)

{

delay(200);

while(k2==0);

CCAP0H-=5; //占空比调节

CCAP0L-=5;

}

}

}

小弟初识松翰单片机,现用sn8p2711,编写了一个PWM调光的程序。

TC0C是定时器自身计数用的当然不能赋值,如果想调整占空比只有对TC0R赋值。规格书上写得很清楚:

PWM 信号输出到 PWM0OUT ( P5.4 引脚), TC0OUT 和 ALOAD0 标志位控制 PWM 输出的阶数( 256 、 64 、 32

和 16 )。 8 位计数器 TC0C 计数过程中不断与 TC0R 相比较,当 TC0C 计数到两者相等时, PWM 输出低电平,当 TC0C

再次从零开始计数时, PWM 被强制输出高电平。 PWM0 输出占空比 = TC0R/ 计数量程 (计数量程 = 256 、 64 、 32 或 16 ) 。

参考寄存器保持输入 00H 可使 PWM 的输出长时间维持在低电平,通过修改 TC0R 可改变 PWM 输出占空比。

单片机 pwm的控制 ,有点代码不明白在下面,求解释

bit  tt1;      // 问题1   此处是什么定义??直接bit指令?bit什么指令???

答:  bit 是定义一个位标量,变量的值是一个二进制位。

bit和sbit都是C51扩展的变量类型。

bit和int char差不多,只不过char=8位, bit=1位而已。都是变量,编译器在编译过程中分配地址。除非指定,否则这个地址是随机分配的。这个地址是整个可寻址空间,RAM+FLASH+扩展空间。bit只有0和1两种值,和Windows下VC中的BOOL类似。

TMOD=0x10;                                 问题2   这是什么模式??涉及要设置哪些参数???

答:TMOD=0X10;为设置定时器/计数器1的工作方式是1.

例子:

TMOD=0x01;    //0000 0001

TH0=(65536-45872)/256;

TL0=(65536-45872)%256;

程序是采用定时器0工作方式1,TH0=(65536-45872)/256;TL0=(65536-45872)%256;这是定时的时间,定时时间一到就进入中断程序执行。

TMOD:定时器/计数器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER)

其中低四位(即D0 ~ D3)定义定时器/计数器T0,高四位(即D4 ~ D7)定义定时器/计数器T1。

定时器/计数器原理图

Ⅰ,GATE——门控制。

●GATE=1时,“与门”的输出信号K由INTx输入电平和TRx位的状态一起决定(即此时K=TRx·INTx),当且仅当TRx=1,INTx=1(高电平)时,计数启动;否则,计数停止。

当INT0引脚为高电平时且TR0置位,TR0=1;启动定时器T0;

当INT1引脚为高电平时且TR1置位,TR1=1;启动定时器T1。

●GATE=0时,“或门”输出恒为1,“与门”的输出信号K由TRx决定(即此时K=TRx),定时器不受INTx输入电平的影响,由TRx直接控制定时器的启动和停止。

当TR0=1,启动定时器T0。

当TR1=1,启动定时器T1。

Ⅱ,C/T——功能选择位

C/T=0时为定时功能: 加1计数器对脉冲f进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出;

C/T=1时为计数功能: 加1计数器对来自输入引脚T0(P3.4)和T1(P3.5)的外信号脉冲进行计数,每来一个脉冲,计数器加1,直到计时器TFx满溢出;

Ⅲ,M0、M1——方式选择功能

MCS-51的定时器T0有4种工作方式:方式0,方式1,方式2,方式3。

MCS-51的定时器T1有3种工作方式:方式0,方式1,方式2。

---------------------------------------------------------------------------------

不平凡的单片机学习资料,很好的单片机教程,超好用,一个不占内存的教程,有案例。

1、最新版单片机编程宝典下载地址,学习单片机编程必备手册

2、单片机c语言运用例子

3、十天学会单片机c语言和单片机制作,最好的单片机资料

这款软件也很不错,推荐一下 [特别好用,资料覆盖范围广] :电路公式计算器

关于pwm代码和pwm控制代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/30873.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载