pic pwm 占空比可调 源码_一个简单的PWM产生器频率占空比可调 单片机程序及仿真...

#include unsigned char HighRH = 0;//高电平重载值的高位unsigned char HighRL = 0;//高电平重载值的低位unsigned char LowRH= 0;//低电平重载值的高位unsigned char LowRL= 0;//低电平重载值的低位unsigned int cnt=0; //记录T1中断次数un...
摘要由CSDN通过智能技术生成

#include

unsigned char HighRH = 0;  //高电平重载值的高位

unsigned char HighRL = 0;  //高电平重载值的低位

unsigned char LowRH  = 0;  //低电平重载值的高位

unsigned char LowRL  = 0;  //低电平重载值的低位

unsigned int cnt=0;        //记录T1中断次数

unsigned int i=0;

unsigned char dc=0;//PWM占空比

unsigned char fr=0;  //PWM频率

unsigned char out=0;  //PWM输出指示

sbit PWMOUT=P3^7;        //PWM输出端口

void ConfigPWM();

void ClosePWM();

sbit k0=P1^0;                //占空比+5

sbit k1=P1^1;                //占空比-5

sbit k2=P1^2;                //频率+

sbit k3=P1^3;                // 频率-

sbit k4=P1^4;                //输出PWM

sbit k5=P1^5;                //停止输出PWM

unsigned char code LEDChar[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

unsigned char code  LEDBu

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的用51单片机实现可调占空比PWM程序: ```c #include <reg51.h> #define FREQ 1000 // 定义PWM频率为1000Hz unsigned int duty_cycle = 50; // 设置初始占空比为50% void timer0_init() { TMOD &= 0xF0; // 设置为模式1 TMOD |= 0x01; TH0 = 0x3C; // 设置初值,1ms定时 TL0 = 0xB0; ET0 = 1; // 开启定时器0中断 TR0 = 1; // 启动定时器0 } void pwm_init() { P1 = 0x00; // 初始输出为低电平 TMOD &= 0x0F; // 设置为模式1 TMOD |= 0x10; TH1 = (65536 - (11059200 / 12 / FREQ)) / 256; // 根据频率计算初值 TL1 = (65536 - (11059200 / 12 / FREQ)) % 256; ET1 = 0; // 不开启定时器1中断 TR1 = 1; // 启动定时器1 } void main() { pwm_init(); timer0_init(); EA = 1; // 全局中断开关 while (1) { // 占空比可通过修改duty_cycle的值来调节 // 比如设置为25%:duty_cycle = 25; // 设置为75%:duty_cycle = 75; P1 = (TH1 < duty_cycle * TL1 / 100) ? 0x00 : 0x01; } } void timer0_isr() interrupt 1 { // 定时器0中断服务程序 static unsigned int cnt = 0; TH0 = 0x3C; TL0 = 0xB0; cnt++; if (cnt >= 1000 / FREQ) { // 每个周期结束后更新占空比 cnt = 0; TH1 = (65536 - (11059200 / 12 / FREQ)) / 256; TL1 = (65536 - (11059200 / 12 / FREQ)) % 256; } } ``` 程序中使用定时器0来控制PWM的周期,使用定时器1来控制PWM占空比。在主函数中不断判断当前时刻是否应该输出高电平,从而实现PWM输出。 需要注意的是,程序中使用的是定时器1模式1,即16位定时器,计数器每计数一次就会自动重新加载初值,从而实现周期性的PWM输出。同时,在定时器0的中断服务程序中,每隔一个周期更新一次占空比。 你可以根据需要修改 `duty_cycle` 的值来调节PWM占空比。例如,将 `duty_cycle` 设置为25,即可实现25%的占空比
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值