pwm代码(pwm控制代码)
admin 发布:2022-12-19 23:45 202
今天给各位分享pwm代码的知识,其中也会对pwm控制代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、求PWM调节led的程序
- 2、如何让stm32产生多路输出 PWM 最好有代码
- 3、51单片机PWM,谁能办忙解释一下各行意思
- 4、STC12C56xxAD芯片怎么用pwm调速程序?
- 5、小弟初识松翰单片机,现用sn8p2711,编写了一个PWM调光的程序。
- 6、单片机 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站长 原创,转载请注明出处和附带本文链接;
相关推荐
- 05-09网页代码,网页代码快捷键
- 05-06单页网站的代码(完整的网页代码)[20240506更新]
- 05-06个人主页图片代码(个人主页图片代码怎么弄)[20240506更新]
- 05-06提取微信名片代码(微信名片信息提取)[20240506更新]
- 05-06php后台权限管理代码(php管理员权限)[20240506更新]
- 05-06付费观看代码php(付费观看代码)[20240506更新]
- 05-06在线html执行代码(html怎么运行)[20240506更新]
- 05-06源代码管理资源管理器(资源管理器运行代码)[20240506更新]
- 05-06代码源软件库(程序代码库)[20240506更新]
- 05-06点击弹出密码代码(点击弹出密码代码错误)[20240506更新]
取消回复欢迎 你 发表评论:
- 标签列表
- 最近发表
- 友情链接