⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmr1.c

📁 用单片机做的PWM可变的控制LED亮度的小软件
💻 C
字号:
////////////////////////////////////////////////////////////////////////////////
// Copyright(C) Gniy.Liu RHOSON, Crop. 2007-2008
// Filename: tmr1.c
// Description: Timer1 interrupt
////////////////////////////////////////////////////////////////////////////////

#define _TMR1_C
#include "proj_inc.h"

static U08 Tmr1Cnt10ms;


#define C_TMR1_5MS		((0xffff-TMR1_CONST*OSC)+2)
#define C_TH1_5MS		HIBYTE(C_TMR1_5MS)
#define C_TL1_5MS		LOBYTE(C_TMR1_5MS)
void Tmr1Init(void)
{
#if (_MCUTYPE_==_MCU_STC89C52_) || (_MCUTYPE_==_MCU_W79E632_)
   	TH1 = C_TH1_5MS;
   	TL1 = C_TL1_5MS;
	TMOD &= 0x0f;
	TMOD |= 0x10;	//	0x20,8bit auto reload mode
	TR1 = 1;
   	ET1 = 1;

#if 0
   	TH0 = 200;
	TMOD &= 0xf0;
	TMOD |= 0x02;	//	0x20,8bit auto reload mode
	TR0 = 1;
	ET0 = 1;
#else
	TL0 = 0;
	TMOD &= 0xf0;
	TMOD |= 0x02;	//	0x20,8bit auto reload mode
	TR0 = 1;
//	ET0 = 1;
#endif

	g_bItem1 = 1;

#elif ((_MCUTYPE_>=_MCU_M8_)&&(_MCUTYPE_<=_MCU_M1281_))
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: FOSC/8 MHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
#define OCR1A_CONST		(TMR1_CONST*FOSC/8)
	TCCR1A=0x00;
	TCCR1B=0x0A;
	TCNT1H=0x00;
	TCNT1L=0x00;
	ICR1H=0x00;
	ICR1L=0x00;
	OCR1AH=HIBYTE(OCR1A_CONST);
	OCR1AL=LOBYTE(OCR1A_CONST);
	OCR1BH=0x00;
	OCR1BL=0x00;
#if ( (_MCUTYPE_==_MCU_M8_) || (_MCUTYPE_==_MCU_M64_) )
	TIMSK |= 0x10;
#elif (_MCUTYPE_==_MCU_M1281_)
    TIMSK1 |= 0x02;
#endif
#endif
}

#if 0
void Time0InptIsr(void) interrupt 1 using 2
{
static U08 group1Tmr = 0;
	if(group1Tmr<Group1PwmHi)
	{
		if(g_bItem1)	LedG1Off;
		if(g_bItem2)	LedG2Off;
		if(g_bItem3)	LedG3Off;
		if(g_bItem4)	LedG4Off;
	}
	else
	{
		if(g_bItem1)	LedG1On;
		if(g_bItem2)	LedG2On;
		if(g_bItem3)	LedG3On;
		if(g_bItem4)	LedG4On;
	}
	if( g_bled2Blink )
	{
		if(group1Tmr < g_LedBlueHi)		LedBlueOn;
		else							LedBlueOff;

		if(group1Tmr < g_LedOrangeHi)	LedOrangeOn;
		else							LedOrangeOff;

		if(group1Tmr < g_LedWhiteHi)	LedWhiteOn;
		else							LedWhiteOff;
	}
	++group1Tmr;
}
#endif


U16 aaaaaaaaaa;

bit b5msFlag;
#if (_MCUTYPE_==_MCU_STC89C52_) || (_MCUTYPE_==_MCU_W79E632_)
void Time1InptIsr(void) interrupt 3 using 2
#elif ( (_MCUTYPE_>=_MCU_M8_) || (_MCUTYPE_<=_MCU_M1281_) )
#pragma vector=TIMER1_COMPA_vect
__interrupt void timer1_compa_isr(void)
#endif
{
//	ALL_INPT_DISABLE;
   	TH1 = C_TH1_5MS;
   	TL1 = C_TL1_5MS;

	++Group1PwmHi;
	if(!Group1PwmHi)
	{
		if(g_bItem4)		{g_bItem4=0;	g_bItem1=1;	}
		else if(g_bItem3)	{g_bItem3=0;	g_bItem4=1;	}
		else if(g_bItem2)	{g_bItem2=0;	g_bItem3=1;	}
		else if(g_bItem1)	{g_bItem1=0;	g_bItem2=1;	}
	}


	if( pStatus )
	{
		b5msFlag ^=1;
		if(b5msFlag)
		{
			switch(g_LedGroup2Step)
			{
			case LED_STEP1:
				g_LedBlueHi -= 1;
				if(g_LedBlueHi<=50)
				{
					g_LedGroup2Step = LED_STEP2;
				}
				break;
			case LED_STEP2:
				g_LedWhiteHi += 1;
				if(g_LedBlueHi)	--g_LedBlueHi;
				if(g_LedWhiteHi >= 250)
				{
					g_LedGroup2Step = LED_STEP3;
					g_LedGroup2Tmr = C_LED_GROUP2_STEP3_DLY;
					LedWhiteOn;
					LedBlueOff;
					LedOrangeOff;
					g_bled2Blink = 0;
				}
				break;
			case LED_STEP4:
				g_LedWhiteHi -= 1;
				if(g_LedWhiteHi <= 50)
				{
					g_LedGroup2Step = LED_STEP5;
				}
				break;
			case LED_STEP5:
				g_LedOrangeHi += 1;
				if(g_LedWhiteHi)	--g_LedWhiteHi;
				if(g_LedOrangeHi >= 250)
				{
					g_LedGroup2Step = LED_STEP6;
					g_LedGroup2Tmr = C_LED_GROUP2_STEP6_DLY;
					LedWhiteOff;
					LedBlueOff;
					LedOrangeOn;
					g_bled2Blink = 0;
				}
				break;
			case LED_STEP7:
				g_LedOrangeHi -= 1;
				if(g_LedOrangeHi <= 50)
				{
					g_LedGroup2Step = LED_STEP8;
				}
				break;
			case LED_STEP8:
				g_LedBlueHi += 1;
				if(g_LedOrangeHi)	--g_LedOrangeHi;
				if(g_LedBlueHi >= 250)
				{
					g_LedGroup2Step = LED_STEP9;
					g_LedGroup2Tmr = C_LED_GROUP2_STEP9_DLY;
					LedWhiteOff;
					LedBlueOn;
					LedOrangeOff;
					g_bled2Blink = 0;
				}
				break;
			}
			if( (++Tmr1Cnt10ms) >= 10 )
			{
				Tmr1Cnt10ms = 0;

				if(g_LedGroup2Tmr)	--g_LedGroup2Tmr;
				else
				{
					if(g_LedGroup2Step == LED_STEP3)
					{
						g_bled2Blink = 1;
						g_LedGroup2Step = LED_STEP4;
					}
					else if(g_LedGroup2Step == LED_STEP6)
					{
						g_bled2Blink = 1;
						g_LedGroup2Step = LED_STEP7;
					}
					else if(g_LedGroup2Step == LED_STEP9)
					{
						g_bled2Blink = 1;
						g_LedGroup2Step = LED_STEP1;
					}
				}
//				if(++aaaaaaaaaa >= 6500000/100)	while(1);
			}
		}
	}
	else
	{
		LedGroup2Init();
		g_bled2Blink = 0;
	}

//	ALL_INPT_ENABLE;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -