📄 main.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 + -