怎样用单片机控制调整脉冲波的占空比?

这个是不是不能用按键改变PWM信号呀?我写了一个程序,调整的范围太小了。... 这个是不是不能用按键改变PWM信号呀?我写了一个程序,调整的范围太小了。 展开
 我来答
Summer3007
推荐于2017-12-15 · TA获得超过237个赞
知道答主
回答量:76
采纳率:0%
帮助的人:68.4万
展开全部
*介绍一个51系列单片机采用脉冲宽度调制(PWM)方式控制LED灯亮度的一个程序,大家都知道,51单片机本身是没有pwm接口的,这个程序是通过软件模拟pwm.在一定的频率的方波中,调整高电平和低电平的占空比,即可实现LED灯亮度控制。程序中使用定时器0产生2.5ms周期脉冲,使用占空比控制变量scale控制占空比,在低电平期间使LED灯亮,在高电平期间使LED灯灭,改变scale就改变了高电平与低电平的时间,因此也就控制了LED灯的亮度。*/
#include "AT89X51.H" //模拟PWM输出控制灯的10个亮度级
unsigned int scale; //占空比控制变量
void main(void) // 主程序
{ unsigned int n; //延时循环变量
TMOD=0x02; //定时器0,工作模式2(0000,0010),8位定时模式
TH0=0x06; //写入预置初值6到定时器0,使250微秒溢出一次(12MHz)
TL0=0x06; //写入预置值
TR0=1; //启动定时器
ET0=1; //允许定时器0中断
EA=1; //允许总中断
while(1) //无限循环,实际应用中,这里是做主要工作
{ for(n=0;n<50000;n++); //每过一段时间,就自动加一个档次的亮度
scale++; //占空比控制变量scale加1
if(scale==10) scale=0; //如果scale=10,使scale为0
} }
timer0() interrupt 1 //定时器0中断服务程序
{ static unsigned int tt ; //tt用来保存当前时间在一秒中的比例位置
tt++; //每250微秒增加1
if(tt==10) //2.5毫秒的时钟周期
{ tt=0; //使tt=0,开始新的PWM周期
P2_0=0; //使LED灯亮
}
if(scale==tt) //按照当前占空比切换输出为高电平
P2_0=1; //使LED灯灭
}
/*程序中从tt=0开始到scale为低电平,从scale开始到tt=10为高电平,由于scale是变量,所以改变scale就可以改变占空比。*/
追问
static  unsigned int   tt 这是什么意思
追答
应该是这样的unsigned int   tt ,写错了
艾普斯
2024-07-18 广告
稳频稳压电源哪家好?艾普斯电源(苏州)有限公司开始专业研发、制造及营销交流稳压电源,满足全球电子及信息业对电源设备日益蓬勃的市场需求。迄今为止,业已发展成为交流不间断电源、稳压电源、变频电源、中频航空- 军事专用电源、直流电源、逆变电源等产... 点击进入详情页
本回答由艾普斯提供
ufo1cn
2011-08-28 · TA获得超过448个赞
知道小有建树答主
回答量:412
采纳率:0%
帮助的人:220万
展开全部
有硬件PWM功能那么设定pwm寄存器,没有就用定时器中断来模拟PWM
追问
提示一下,这个定时器模拟的PWM该怎么写?
追答
设定一个寄存器存储占空比参数,一个寄存器当计数器在定时器中断中自加一, 计数器在定时器中断中超过设置的占空比时就异或翻转输出脚。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ch314156
2011-08-28 · TA获得超过4377个赞
知道小有建树答主
回答量:2036
采纳率:100%
帮助的人:1066万
展开全部
你的单片机 有PWM功能吗? 没有的话 用定时器中断实现
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式