|
本程序不足之處是,待機時功耗有些高,在5.8mA左右,如果睡眠前關掉接收端433,功耗只有40uA,但這樣的話遙控就不能用了;有知道怎么降低433接收端功耗的同時,又能保證遙控正常使用的朋友,請指點一下
- void InfraredReception()
- {
- if(CMP2OUT==0){ON_Flag==1;return;}
- //if(T433_OK==1){return;}
- if(mm==24)
- {
- mm=0;
- if(++mm1<6)
- {
- T433_Num=0;
- for(char i=4; i>0; i--)
- {
- T_Data[i] = data;
- }
- T_Data[0] = data; // 存入最新數據
-
- for(char i=4; i>0; i--)
- {
- if(T_Data[i] == T_Data[0])
- {
- T433_Num++;
- }
- }
-
- }
- if(T433_Num>2)
- {
- addr=(T_Data[0]>>8)&0xFFFF;
- if(addr==0xFFFF)
- {
- T433_OK=1;
- value=T_Data[0]&0x0f;
- }
-
- }
- Flag_RecOne=0;
- }
- if(INTEDG==0)//下降沿時計數器清0,開始計時
- {
- num=0;//計數器清0
- TMR2=0;//定時器清0
- INTEDG=1;//改為上升沿
-
- }
- else//下面是當上升沿時做的事
- {
- INTEDG=0;//下降沿。
- Time=num*62;//62.5us定時器中斷,,計算下~上的時間
- if(Flag_RecOne==0)
- {
- if((Time>11000) && (Time<12500))//引導碼,9ms低加4.5ms高
- {
- Flag_RecOne=1;
- data=0;
- mm=0;
- }else
- {
- data=0;
- }
-
- }
-
- if(Flag_RecOne==1)
- {
-
- if((Time>320) && (Time<460))//置1, 0.56ms低加1.68ms高
- {
- //data[(unsigned char)(mm/8)]=(data[(unsigned char)(mm/8)]>>1)|0x80;
- data=(data << 1)|0x00000001;
- mm++;
- }
- if((Time>1100) && (Time<1250))//置0, 0.56ms低加0.56ms高
- {
- //data[(unsigned char)(mm/8)]=(data[(unsigned char)(mm/8)]>>1) & 0x7f;
- data=data << 1;
- ///RB4 = 1; //測試 0.56ms低加0.56ms高是否通過
- mm++;
- }
-
-
- }
-
- }
-
-
-
- Time=0;
- }
- /***********************************************************
- 中斷服務函數
- ***********************************************************/
- void interrupt Isr_Timer()
- {
- if(INTF)//外部中斷
- {
-
- InfraredReception();
- INTF=0;
- }
-
- if (TMR2IF)
- { TMR2IF = 0; //若只使能了一個中斷源,可以略去判斷
- num++;
- if((Flag_0E==1)&&(ON==1))
- {
- num1++;
-
- }
- if (++MainTime >= 32)
- {
- MainTime = 0;
- B_MainLoop = 1;
- }
- }
- else
- {
- PIR1 = 0;
- }
- }
- void WorkSleep()
- {
- #if (0 != C_KEY_WAKEUP)
- OSCCON = 0X70; //配置振蕩為8M
- INTCON = 0; //;關斷ADC模塊及中斷使能;
- PIE1 = 0;
- PIE2 = 0;
- PIR1 = 0;
- PIR2 = 0;
- T2CON = 0;
- ADCON0 = 0; //關閉所有模塊
- ADCON1 = 0;
- CMP1CON0 = 0;
- CMP2CON0 = 0;
- PWMCON0 = 0;
- //進入休眠前關掉所有功能模塊,以降低休眠電流
- KEYCON0=0;
- KEYCON2=0;
- TRISA = 0B00000001; //關閉所有輸出,RA0口做喚醒輸入
- PORTA = 0B00000000;
- WPUA = 0B00000001; //RA0 開上拉電阻
- IOCA = 0B00000001; //允許RA0的IO電平變化中斷
-
- RAIE = 1; //允許PORTA的IO電平變化中斷
- PEIE = 1; //要用RORTA中斷喚醒,則PEIE必須設為1
- //進入休眠前,必須固定口線電平,這兒全部輸出低電平,并關閉所有上拉電阻
- RAIF = 0;
- TRISB = 0;
- PORTB = 0;
- WPUB = 0B00000000;
- //進入休眠模式,觸摸允許喚醒的按鍵后恢復正常工作
- SystemEnterSleep();
- if(RAIF)
- {
- RAIF = 0;
- PORTA;
- }
- //休眠被喚醒,重新配置中斷等SFR,使系統進入正常工作
- Init_System();
-
- #endif
- }
- /***********************************************************
- 主循環
- ***********************************************************/
- void main()
- {
- Init_System();
- Init();
- while (1)
- {
- if (B_MainLoop)
- {
- if(++num2>30)//消RGB鍵抖動,否則按一次跳變好幾下
- {
- //T433_OK=0;
- if((ledFlag==4)&&(Flag_CS==1)){Touch_JianBian();Flag_CS=0;};
-
- num2=0;
- }
- B_MainLoop = 0;
- CLRWDT();
- CheckTouchKey();
- Refurbish_Sfr();
- KeyServer();
- if(ON_Flag==1){//關433
- if(++mm4>200)
- { WorkSleep();
- //TRISA = 0b00000011;//RA0引腳被配置為輸入
- //PORTA = 0b00000011;
- //PWMCON0 &= ~(0b00011111);
- mm4=0;
- ON_Flag=0;
-
- }
-
- }
- if(RGB_Flag==1)//混合漸變
- { mm2++;
- if((mm2>5)&&(ledFlag==12)){Led_Set();mm2=0;}
- if(mm2>700)
- {
- if(ledFlag==13){Touch_JianBian();}
- mm2=0;
- }
- }
-
- }
- DingShi();
- if(T433_OK==1)//調433鍵處理函數
- {
-
- T433Server();
- value=0xFE;
- Flag_RecOne=0;
- mm1=0;
- T433_OK=0;
- }
- if(CMP2OUT==0){ON_Flag==1;}
- //比較器,小于閥值
- }
- }
- void DingShi()
- { if(ON==1)
- {
- if(T_Flag==1)//定時30分
- {
- if(num1>=28800000)
- {
- //PWMCON0 &= ~(0b00011111);
- ON_Flag=1;
- ON=0;
- num1=0;
- Flag_0E=0;
- T_Flag=0;
- }
- }
- if(T_Flag==2)//定時1H
- {
- if(num1>=57600000)
- {
- //PWMCON0 &= ~(0b00011000);
- ON_Flag=1;
- ON=0;
- num1=0;
- Flag_0E=0;
- T_Flag=0;
- }
- }
- if(T_Flag==3)//定時2H
- {
- if(num1>=115200000)
- {
- //PWMCON0 &= ~(0b00011000);
- ON_Flag=1;
- ON=0;
- num1=0;
- Flag_0E=0;
- T_Flag=0;
- }
- }
- if((T1S_Flag==1)&&(num1>600))//配合case 0x0E:閃一下
- {
- if(ledFlag==1){set_pwm_duty_cycle(pwm,0,0,0,0);}
- else if(ledFlag==2){set_pwm_duty_cycle(0,pwm,0,0,0);}
- else if(ledFlag==3){set_pwm_duty_cycle(pwm,pwm,0,0,0);}
- else if(ledFlag==5){set_pwm_duty_cycle(pwm_sleep,pwm_sleep,0,0,0);}
- else if(ledFlag==9){set_pwm_duty_cycle(0,0,0,0,pwm_R);}
- else if(ledFlag==10){set_pwm_duty_cycle(0,0,pwm_G,0,0);}
- else if(ledFlag==11){set_pwm_duty_cycle(0,0,0,pwm_B,0);}
- else if(ledFlag==12){RGB_Flag=1;}
- else if(ledFlag==4){set_pwm_duty_cycle(0,0,pwm_G,pwm_B,pwm_R);}
-
- T1S_Flag=0;
- }
- }
- }
- void Touch_TiaoGuang()
- {
- if(ledFlag==4)
- { pwm_R = (R * brightness) / 100;
- pwm_B = (B * brightness) / 100;
- pwm_G = (G * brightness) / 100;
- set_pwm_duty_cycle(0,0,pwm_G,pwm_B,pwm_R);
- }
- if(ledFlag==9)
- { pwm_R = (R1 * brightness) / 100;
- set_pwm_duty_cycle(0,0,0,0,pwm_R);
- }
- if(ledFlag==10)
- { pwm_G = (G1 * brightness) / 100;
- set_pwm_duty_cycle(0,0,pwm_G,0,0);
- }
- if(ledFlag==11)
- { pwm_B = (B1 * brightness) / 100;
- set_pwm_duty_cycle(0,0,0,pwm_B,0);
- }
- if((ledFlag==13)||(ledFlag==12))
- {
- set_pwm_duty_cycle(0,0,0,0,10);
- }
- }
- void Touch_JianBian()
- {
-
- switch (RGB_NUM)
- {
- case 0:
- {
- R=255;
- G=255;
- B=0;
- RGB_NUM=1;
- break;}
- case 1:
- {
- R=80;
- G=255;
- B=0; // 紅綠
- RGB_NUM=2;
- break;}
- case 2:
- {
- R=34;
- G=139;
- B=34; // 紅綠+
- RGB_NUM=3;
- break;}
-
- case 3:
- {
- R=0; // 綠+++
- G=255;
- B=0;
- RGB_NUM=4;
- break;}
- case 4:
- {
- B=124; // 青
- G=252;
- R=0;
- RGB_NUM=5;
- break;}
- case 5:
- {
- B=255;// 紅0綠--藍+++
- G=255;
- R=0;
- RGB_NUM=6;
- break;}
- case 6:
- {
- B=255;
- G=120;
- R=0;
- RGB_NUM=7;
- break;}
- case 7: // 藍+
- {
- B=255;
- G=0;
- R=0;
- RGB_NUM=8;
- break;}
- case 8:
- {R=138; // 淺紅
- G=43;
- B=226;
- RGB_NUM=9;
- break;}
- case 9:
- {B=127;
- G=0;
- R=255; // 桃紅
- RGB_NUM=10;
- break;}
- case 10:
- {R=255; // 紅藍+
- G=0;
- B=255;
- RGB_NUM=11;
- break;}
- case 11:
- {R=255; // 紅
- G=0;
- B=0;
- RGB_NUM=0;
- break;}
-
- }
- pwm_R = (R * brightness) / 100;
- pwm_B = (B * brightness) / 100;
- pwm_G = (G * brightness) / 100;
- set_pwm_duty_cycle(0,0,pwm_G,pwm_B,pwm_R);
- }
復制代碼
|
-
-
RGB觸摸帶調光.rar
2025-5-27 14:36 上傳
點擊文件名下載附件
305.46 KB, 下載次數: 0
|