标题:
关于pic16f1828单片机制作的呼吸灯,但是渐亮和渐暗过程效果不顺畅
[打印本页]
作者:
浅、念
时间:
2018-8-7 16:57
标题:
关于pic16f1828单片机制作的呼吸灯,但是渐亮和渐暗过程效果不顺畅
新手刚接触单片机,用的是PIC16f1828芯片,参考着做了个呼吸灯,用PWM输出,在中断部分的程序没看明白,可以帮我解释下吗?而且在灯渐亮和渐暗过程中不是很流畅,在暗亮之间的停顿时间过短。大家能帮我看看该怎么调整吗?如果配置完PWM后不用中断,想让占空比通过逐渐增加和减少来实现渐亮到渐灭来实现呼吸灯功能又该怎么写?谢谢以下是我参考所写的程序:
#include <pic16f1828.h>
#define uint8 unsigned char
#define uint16 unsigned int
uint8 gDutycount = 0;
uint16 count=0;
const char SINETABLE[38]={50,55,60,65,70,75,80,85,90,95,100,95,90,85,80,75,70,60,60,55,50,45,40,35,30,25,20,15,10,5,10,15,20,25,30,35,40,45};
void PWM_Init(void)
{
OSCCONbits.IRCF=1110;//8M晶振
CCPR1L=0x32;
CCP1CON=0b00001100;
TRISC5=0;
}
void Time2_Init(void)
{
T2CON=0x05;
PR2=99;
TMR2IF=0;
GIE=1;
PEIE=1;
TMR2IE=1;
}
void main(void)
{
PWM_Init();
Time2_Init();
while(1)
{
}
}
void interrupt Tmer2_isr(void)
{
if(TMR2IF)
{
++count;
if(count==35)
{
++gDutycount;
if(gDutycount==75)
{
gDutycount=0;
}
CCPR1L=SINETABLE[gDutycount];
count=0;
}
TMR2IF=0;
}
}
复制代码
作者:
浅、念
时间:
2018-8-9 16:39
这是用一个数组按照5%的占空比的关系列出来的,慢慢调节亮度时候回感觉那种跳变的,程序该怎么修改才能让占空比的变化是缓慢进行的而不是阶梯性跳变的
作者:
zjjhtony
时间:
2018-8-10 10:15
<blockquote>
复制代码
1)pic16F1828的CCP1的PWM输出可以设置time2,time4,time6定时器。
CCPTMRS0=0; //选择CCP1设置为time2定时器
2)time2已经用于CCP1定时器,不能在用于普通的定时器。
3)以上程序,经过proteus仿真,可以看如附件视频。
QQ视频20180810101052.rar
2018-8-10 10:14 上传
点击文件名下载附件
5.42 MB, 下载次数: 26
作者:
Sendhily
时间:
2019-1-15 19:17
楼主有仿真么
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1