应广红外发射接收,闪灯

这篇博客主要展示了如何使用C语言控制红外发射接收和LED灯。通过定义和更新变量light_cnt来控制LED的状态,并实现了电源检测、低电压检测等功能。在低电压条件下,LED会显示特定状态。此外,还包含了初始化IO口、睡眠模式和按键检测的函数。
摘要由CSDN通过智能技术生成

#include “extern.h”
#include “register.h”
#include “misc.H”

uint8_t LVD_cnt = 0;
uint8_t LVD_flag = 0;
void LED_server(void)
{
/*
if ((!pairing_done)&&(!Power_light_Flag)) {
light_cnt++;
if (light_cnt > 80) {
light_cnt = 0;
pa.4 =0;
}
if (light_cnt == 40) {
pa.4 = 1;
}
} else {
pa.4 = 0;
}
*/
if(LVD_flag&&B_Power_Flag){
if(light_cnt){
if(light_cnt200){
YGD_LED1 = 0;
YGD_LED2 = 0;
PSD_LED1 = 1;
}
if(light_cnt
100){
YGD_LED1 = 0;
YGD_LED2 = 0;
PSD_LED1 = 0;
}
light_cnt --;
}ELSE{
light_cnt = 201;
}
} else if(light_cnt){
light_cnt–;
if(light_cnt==240){

		YGD_LED1 = 1;
		YGD_LED2 = 1;
		PSD_LED1 = 1; 
	}
	if(light_cnt==200){
		YGD_LED1 = 0;
		YGD_LED2 = 0;
		PSD_LED1 = 0; 
	}

	if(light_cnt==160){
		YGD_LED1 = 1;
		YGD_LED2 = 1;
		PSD_LED1 = 1; 
	}
	if(light_cnt==120){
		YGD_LED1 = 0;
		YGD_LED2 = 0;
		PSD_LED1 = 0; 
	}

	if(light_cnt==80){
		if(B_Power_Flag){
		YGD_LED1 = 1;
		YGD_LED2 = 1;
		}else{
		YGD_LED1 = 0;
		YGD_LED2 = 0;	
		}
		PSD_LED1 = 1; 
	}
	if(light_cnt==40){
		YGD_LED1 = 0;
		YGD_LED2 = 0;
		PSD_LED1 = 0; 
	}
}else{
	if(psled_flag){
		PSD_LED1 = 1;
		psled_flag--;
	}else{
		PSD_LED1 = 0; 
	}
	if(led_flag){
		YGD_LED1 = 1;
		YGD_LED2 = 1;	
	}else{
		YGD_LED1 = 0;
		YGD_LED2 = 0;
	}
}

}

void open_init(void){
led_flag = 1;
YGD_LED1 = 1;
YGD_LED2 = 1;

psled_flag = 0;
PSD_LED1 = 0;
IR_TX =1;

}
void dowm_init(void){
led_flag = 0;
psled_flag = 0;
YGD_LED1 = 0;
YGD_LED2 = 0;
IR_TX =0;
}
void io_sever(void)
{
pac = 0b1101_1110; // 0/1: 输入/输出
pa = 0b0000_0000;
paph = 0b0010_0000;
papl = 0b0000_0001;
$ padier 0b1111_1001; //1是数字输入 启用唤醒,0是模拟输入 禁止唤醒;
}

void IR_TEST_Server(void){
if(DY_TEST){

		if(!key_IRC_flag){
			key_IRC_flag = 1; 
				psled_flag = 10; 
				sleep_delay_cnt = SLEEP_TIME_10min;
		}
//	}
			DY_CNT =0;
}ELSE{
	DY_CNT++;
	if(DY_CNT>5){
	key_IRC_flag = 0;
	}

// DY_CNT =0;
// psled_flag = 0;
}

}
void sleep_server(void)
{
if (sleep_delay_cnt) {
JS_CNT++;
if(JS_CNT >= 10)
{
JS_CNT = 0;
sleep_delay_cnt–;
}
} else if(Kaiguan){

// Power_light_Flag1=0;
// IRQ_HIGH();
// .delay 10;
B_Power_Flag = 0;
io_sever();
dowm_init();
// pa.4 = 1;
// $ padier 0b0100_0000;
$ padier 0b1111_1000; //1是数字输入 启用唤醒,0是模拟输入 禁止唤醒;
// hs6220_enter_sleep();

CLKMD = 0xf4;   			//  -> ILRC
clkmd.En_WatchDog	=	0;
goto $+1;
CLKMD.En_IHRC   =   0;      //  close IHRC
STOPSYS;
nop;
CLKMD.En_IHRC   =   1;
CLKMD = 0b0011_1110;  		// ->  IHRC  b7-b5:001-systemclock=IHRC/8

nop;
nop;
nop;

goto $+1;	
wdreset;
io_sever();

	$ t16m IHRC,/16,bit13;			//16 / 16(MHZ)  T16 = 1us * 2^13=8192us
delay_cnt = 3192;				//8192-3192 = 5000us
stt16 delay_cnt;
intrq = 0;

// B_Power_Flag = 1;
sleep_delay_cnt = 40;
light_cnt = 0;
}
}
void ON_OFF_KEY(void)
{
uint8_t r_key_stare = 0;
if(!Kaiguan) {
r_key_stare = 0x01;
}

if(r_key_stare != R_KEY_BUF) {
	B_NewKey_Flag = 1;
	R_KEY_BUF = r_key_stare;
	R_KEY_DEBOUNCE = C_KEY_DEBOUNCE;
} 	else {
	if((B_NewKey_Flag != 0) && (R_KEY_DEBOUNCE == 0)) {
		B_NewKey_Flag = 0;
	//	B_LoogPress_Flag = 0;
		if(R_KEY_BUF & 0x01) {
			B_LoogPress_Flag = 1;
			R_LoogKEY_DEBOUNCE =250; 
		}else{
			if(B_LoogPress_Flag){
				B_LoogPress_Flag = 0;
				R_LoogKEY_DEBOUNCE =0;
				if(B_Power_Flag){
						sleep_delay_cnt = SLEEP_TIME_10min;
					if(led_flag){
						led_flag =0;
					}else{
						led_flag =1;
					}
				}
			}
		}
	} 
		if((!R_LoogKEY_DEBOUNCE)&&(B_LoogPress_Flag)) {
			if(B_Power_Flag) {
				sleep_delay_cnt = 5;
				B_Power_Flag=0;
				dowm_init();
				light_cnt = 121;
				LVD_flag =0;
			} else {
				sleep_delay_cnt = SLEEP_TIME_10min;
				B_Power_Flag=1;
			//	Power_light_Flag1=1;
				open_init();
				LVD_flag =0;
				light_cnt = 241;
			} 
			B_LoogPress_Flag = 0;	
		}//if((!R_LoogKEY_DEBOUNCE)&& (B_LoogPress_Flag))
	 
 
}
if(R_KEY_DEBOUNCE)
	R_KEY_DEBOUNCE--;
if(R_LoogKEY_DEBOUNCE)
	R_LoogKEY_DEBOUNCE--;

}

void LVD_Server(void){
$ GPCC Enable,BANDGAP,P_R;
$ GPCS VDD*12/32;//VDD = 3.2V
if(!GPC_out) {
LVD_cnt ++;
if(LVD_cnt>10){
LVD_cnt =0;
if(!LVD_flag){
dowm_init();
sleep_delay_cnt = 200;
}
LVD_flag = 1;

	}	
} else {
	LVD_cnt =0;
}

}
/******************************************************************************

  • @brief main

  • @note

  • @param

  • @retval None

  • @version 1.0

  • @date 2018-01-23

  • @author sympathique
    ******************************************************************************/
    void FPPA0 (void)
    {
    //.ADJUST_IC SYSCLK=IHRC/(P1), IHRC=(P2)MHz, VDD=(P3)V; //校准IC
    //P1 = 2,4,6,8,16,32;提供不同的系统时钟
    //p2 = 16 ~ 18;校准芯片到不同频率,通常选择16MHZ
    //P3 = 2.2 ~ 5.5;根据不同的电源电压校准芯片
    .ADJUST_IC SYSCLK=IHRC/8, IHRC=16MHz, VDD=3.3V; //校准IC , 4MHz
    clkmd.En_WatchDog = 0; // WatchDog Enable

    wdreset;

    io_sever();
    // RF_INIT();
    B_Power_Flag = 0;
    sleep_delay_cnt = 2;
    $ t16m IHRC,/16,bit13; //16 / 16(MHZ) T16 = 1us * 2^13=8192us
    delay_cnt = 3192; //8192-3192 = 5000us
    stt16 delay_cnt;
    intrq = 0;

    while (1) {
    wdreset;

     if (intrq.2) {
     delay_cnt = 3192;//3192
     stt16 delay_cnt;
     intrq = 0;
    

    // if(PA.7){
    // PA.7 =0;
    // }else{
    // PA.7 =1;
    // }
    ON_OFF_KEY();
    LED_server();
    sleep_server();
    if(B_Power_Flag&&(!LVD_flag))
    {
    // data_pair();
    // key_server();
    if(!light_cnt)
    IR_TEST_Server();
    LVD_Server();
    // data_tx();
    }

    }
    } // else
    }

/******************************************************************************

  • @brief delay_nops
  • @note
  • @param
  • @retval None
  • @version 1.0
  • @date 2018-01-23
  • @author sympathique
    ******************************************************************************/
    void delay_nops(void)
    {
    while (delay_cnt–) {
    .delay 1
    }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值