STC15呼吸灯

STC15单片机呼吸灯程序

主控STC15W4K61S4
频率24Mhz

该程序用了PCA/PWM作为LED的驱动,因为目标板(15F2K60S2)上没有增强型PWM,其实STC的15系列和8系列基本的硬件外设兼容性还是不错的,稍加修改或者不修改就可以运行的。
例程注释很详细,有问题可以留言,看到必回。

#include <stc15.h>


void PWM_Init(void);
void Timer0_Init(void);
void PWM_IO_Init(void);
void Timer2_Init(void);


bit Timer2_1sf;		//时间刻度标志,=Timer2中断的设定
bit zengjian;		//决定渐灭还是渐亮

int main(void)
{
	Timer0_Init();
	PWM_IO_Init();
	PWM_Init();
	Timer2_Init();
	
	while(1)
	{
		if(P35)			//PWM0输出引脚
			P55	= 1;	//由于板子上的灯在P55上,所以在此处判断控制
		else
			P55	= 0;
			
		if(CCAP0H==255)
			zengjian=1;
		if(CCAP0H==0)
			zengjian=0;
		if(Timer2_1sf && !zengjian)
		{
			Timer2_1sf	= 0;
			CCAP0H	+= 1;				//渐亮
		}
		if(Timer2_1sf && zengjian)
		{
			Timer2_1sf	= 0;
			CCAP0H	-= 1;				//渐灭
		}
	}
	
	
}


void PWM_Init(void)				//PWM0使能并输出在P3.5
{
	CMOD		 = 0x84;		//定时器0的溢出作为CAP时钟
	CCAPM0		|= 1<<1;		//PWM0使能
	CCAPM0		|= 1<<6;		//ECOM0比较器使能
	PCA_PWM0 	 = 0x00;		//8位PWM
	AUXR1		|= 1<<4;		//0,1		选择第二组管脚序列
	CCAP0H	 	 = 0x00;		//此处为PWM占空比调节,作为下个周期的装载值
	CCAP0L	 	 = 0x00;		//PWM实际控制值
	CL			 = 0xFF;		//设置0xFF使得定时器0下次溢出后清零CL并重装PWM实际控制值
	CCON		|= 1<<6;		//启动
}

void Timer0_Init(void)	//1微秒@24.000MHz
{
	AUXR 		|= 0x80;		//定时器时钟1T模式
	TMOD 		&= 0xF0;		//设置定时器模式
	TL0 		 = 0xE8;		//设置定时初始值
	TH0 	   	 = 0xFF;		//设置定时初始值
	TF0 	   	 = 0;			//清除TF0标志
	TR0 	     = 1;			//定时器0开始计时
}

void PWM_IO_Init(void)
{
	P3M0	 |= 0xE0;			//PWM		P3.5~P3.7推挽输出
	P3		 &= 0x1F;			//P3.5~P3.7默认输出低
	P1		  =	0xFF;			//P1用于按键检测
}

void Timer2_Init(void)	//1ms	@24.000MHz
{
	AUXR 	 |= 0x04;		//定时器时钟1T模式
	T2L 	  = 0x40;		//设置定时初始值
	T2H 	  = 0xA2;		//设置定时初始值
	AUXR     |= 0x10;		//定时器2开始计时
	EA		  = 1;			//开总中断
	IE2		 |= 1<<2;		//ET2中断
}

void Timer2_E(void) interrupt	12
{
	static unsigned int T;
	if(T<10)		//时间刻度大小(10ms)
		T++;
	else
	{
		T	= 0;
		Timer2_1sf	= 1;
	}
}



  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值