51单片机pwm呼吸灯问题

error- 2018-07-18 01:06:36
#include<reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit pwm =P2^1;
uint count=0,timer1=0,value=0;
bit DIR=1;
void main()
{
TMOD=1;
TH0=(65536-1)/256;
TL0=(65536-1)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//TR0置位,启动定时器


while(1)
{

if(timer1>value)
{
pwm=0;
}
else
{
pwm=1;
}

}
}

void time0() interrupt 1 using 1
{
TH0=(65536-1)/256;
TL0=(65536-1)%256;
timer1++;
count++;
if(timer1>500)
{
timer1=0;
}
if(count>100)
{
count=0;
if(DIR==1)
{
value++;
}
if(DIR==0)
{
value--;
}
}

if(value==500)
{
DIR=0;
}
if(value==0)
{
DIR=1;
}

}
到底哪个是周期?哪一个是调节占空比的参数?这个程序不懂==求教了
...全文
952 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiazai562644322 2020-05-20
  • 打赏
  • 举报
回复
可以防止跑飞了没有经过=500
林也许 2020-03-09
  • 打赏
  • 举报
回复

为什么这个不能改成== 啊 一定要用>
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
Votangroom 2018-07-20
  • 打赏
  • 举报
回复
周期=定时器单周期时间Xcount最大值Xvalue最大值X 2(一次亮一次灭)
控制占空比的参数是value,是随定时器自动变化的
Seweam 2018-07-20
  • 打赏
  • 举报
回复
接上,不小心发布了,
5.把以上调试好的程序与LED对接,加入循环效果,即可做到呼吸灯
以下是PIC单片机的呼吸灯子程序 可作为参考:
/*====================================================== */
/* 程序名:LED控制程序 */
/* 输入参数:无 */
/* 输出参数: */
/* 其他: */
/*====================================================== */
void LED_CONTROL(void)
{
//以下LED的PWM测试程序
if(WORK_MODEL == REMOVAL_MODEL) //撤防模式下
{
if(brake_logic == 0) gr_pwm_value = 0;
else gr_pwm_value = 250;
if(blue_bit != STEP_1)
{
bl_pwm_value+=2;
if(bl_pwm_value >= 248) blue_bit = STEP_1;
}
else
{
bl_pwm_value-=2;
if(bl_pwm_value <= 40) blue_bit = STEP_0;
}
}
else if(WORK_MODEL == ACC_MODEL) //ACC模式下
{
if(brake_logic == 0)
{
gr_pwm_value = 0;
bl_pwm_value = 100;
}
else
{
blue_bit+=5;
if(blue_bit <= 80)
{
gr_pwm_value = 0;
bl_pwm_value = 100;
}
else if(blue_bit <= 160)
{
gr_pwm_value = 100;
bl_pwm_value = 100;
}
else
{
gr_pwm_value = 100;
bl_pwm_value = 0;
}
}
}
else if(WORK_MODEL == ON_MODEL) //ON模式下
{
if(brake_logic == 0)
{
gr_pwm_value = 0;
bl_pwm_value = 250;
}
else
{
blue_bit+=5;
if(blue_bit <= 80)
{
gr_pwm_value = 0;
bl_pwm_value = 250;
}
else if(blue_bit <= 160)
{
gr_pwm_value = 250;
bl_pwm_value = 250;
}
else
{
gr_pwm_value = 250;
bl_pwm_value = 0;
}
}
}
else if(WORK_MODEL == START_MODEL || WORK_MODEL == PROTECT_START_MODEL || WORK_MODEL == REMOVAL_START_MODEL)
{
gr_pwm_value = 250;
bl_pwm_value = 0;
}
else
{
gr_pwm_value = 0;
bl_pwm_value = 0;
blue_bit = STEP_0;
}
PWM6_LoadDutyValue(bl_pwm_value);
PWM7_LoadDutyValue(gr_pwm_value);
}
Seweam 2018-07-20
  • 打赏
  • 举报
回复
楼主能不能规范一点,这样的程序看得好腻的:
其实只要你能把开发流程把握好,这东西都很简单:
1设置PWM周期和模式:
2随意设置一个占空比进行调试,直到PWM口能够输出
3.变更占空比值,查看输出效果
4.查看技术规格了解PWM占空比变更条件和方式,编写相应变更程序
qq_42726874 2018-07-18
  • 打赏
  • 举报
回复
if(timer1>500) { timer1=0; } if(count>100) { count=0;占空比

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧