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

📄 main.c

📁 红外空调控制
💻 C
字号:
/*
	功  能:AVR摇控器信号解码测试程序
	文件名:main.c
	编  译: WinAVR-20040720 	
	速  度:外部4MHz
	
	作  者:芯艺
	EMAIL :changfutong@sina.com
	
	更改记录:
	2004-12-02       
*/


#include <avr/io.h>
//#include <avr/pgmspace.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include <avr/delay.h>

#include "common.h"

uchar ReadIRCode(void);
void SetTimer(uchar sec);
uchar IsTimeOut(void);
void CloseTimer(void);

uchar g_aFlag[2]={0,0};
uchar g_bMode=1;

void DelayMs(uint t)
{
	uint j;
	for(j=0;j<t;j++)
		_delay_loop_2(250 *4);
}

//读锁键用代码
uchar ReadLockCommand(uchar nothis)
{
	uchar j;
	//两秒内无按键则取消
	SetTimer(2);
	while(1)
	{
		j=0;
		if(IsTimeOut())
			break;
		if((IRPIN&_BV(IRBIT))==_BV(IRBIT))
			continue;
		//延时消抖
		_delay_loop_2(100);
		if((IRPIN&_BV(IRBIT))==_BV(IRBIT))
			continue;
		
		CloseTimer();
		j=ReadIRCode();
		if(j==nothis)
		{
			SetTimer(2);
			continue;
		}
		break;
	}
	CloseTimer();
	return j;
}

//测试主程序
int main(void)
{
	uchar i;
	
	DDRC=_BV(PC5)|_BV(PC4);
	DDRD=_BV(PD7)|_BV(PD3);
	DDRB=_BV(PB0);
	
	PORTD|=_BV(PD7)|_BV(PD3);
	PORTB|=_BV(PB0);
	PORTC=0;

	CLR_RED_LED;
	CLR_YEL_LED;
	SET_GRN_LED;
	
	DelayMs(1000);
	
	CLR_RED_LED;
	CLR_YEL_LED;
	SET_GRN_LED;	

	sei();
		
	while(1)
	{
		if((IRPIN&_BV(IRBIT))==_BV(IRBIT))
			continue;
		//延时消抖
		_delay_loop_2(100);
		if((IRPIN&_BV(IRBIT))==_BV(IRBIT))
			continue;
		
		i=ReadIRCode();

		if(g_bMode)//如果在开锁状态
		{
			SET_GRN_LED;
			if(i==62)		//键1:继电器1开关,红灯指示
			{
				if(g_aFlag[0])
				{
					CLR_RED_LED;
					g_aFlag[0]=0;
				}
				else
				{
					SET_RED_LED;
					g_aFlag[0]=1;
				}
				DelayMs(500);
			}
			else if(i==61) //键2:继电器2开关,黄灯指示
			{
				if(g_aFlag[1])
				{
					CLR_YEL_LED;
					g_aFlag[1]=0;
				}
				else
				{
					SET_YEL_LED;
					g_aFlag[1]=1;
				}
				DelayMs(500);
			}
			else if(i==54)//键9、锁键:连续按 9,6,3键
			{
				if(ReadLockCommand(54)==57)//键6
				{
					if(ReadLockCommand(57)==60)//键3
					{
						g_bMode=0;
						CLR_GRN_LED;
					}
				}
			}
		}
		else if(i==60)//键3 、开锁:连续按 3,6,9键
		{
			if(ReadLockCommand(60)==57)//键6
			{
				if(ReadLockCommand(57)==54)//键9
				{
					g_bMode=1;
					SET_GRN_LED;
				}
			}
		}//mode
	}//while
}//main

⌨️ 快捷键说明

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