欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

基于單片機的電視機低功耗待機控制方法

文檔序號:441721閱讀:600來源:國知局
專利名稱:基于單片機的電視機低功耗待機控制方法
技術領域
本發(fā)明屬于電視機技術領域,更明確地說涉及基于單片機的電視機低功耗待機控制方法的改進。
背景技術
為給電視用戶提供方便、同時又盡最太限度降低電視機地待機功耗,原有的依靠主芯片實現待機控制功能的情況并不理想。不理想的原因在于原有待機電源本身的功耗相對太大,而改用功耗小的又滿足不了主芯片的工作要求。解決的方法只能是在改用小功耗的待機電源的同時,增加合適的控制電路,實現電視機的低功耗待機。

發(fā)明內容
本發(fā)明的目的,就在于克服上述缺點和不足,提供一種基于單片機的電視機低功耗待機控制方法。它是在使用小功耗的待機電源的同時,采用一種行之有效的低功耗待機控制方法,在不增加成本的前提下,實現更低的待機功耗。其節(jié)能效果好,可廣泛應用于各種電視機中。
為了達到上述目的,本發(fā)明以單片機控制待機電源的繼電器,包括以下步驟
(1)單片機上電復位后,通過其GP0口檢測主芯片指定I/O口輸入電平狀態(tài),同時通過程序讀取E2PROM,檢測電視機在上次電源關閉時是處于“開機”還是“待機”狀態(tài);
(2)若為“待機”狀態(tài),則通過GP1口輸出高電平,驅動紅色指示燈亮,并執(zhí)行以下分步驟
①通過COUT口監(jiān)控來自遙控接收器的輸出信號,接收到“開機”信號后,通過GP4口輸出高電平,同時將GP1口電平拉低用以驅動藍色指示燈亮,并將當前開機狀態(tài)存儲到E2PROM;
②通過GP3口監(jiān)控來自按鍵的輸出信號,接收到“開機”信號后,執(zhí)行上述①步驟;
(3)若為“開機”狀態(tài),則通過GP1口輸出低電平驅動藍色指示燈亮,并執(zhí)行以下分步驟
①通過GP2口檢測來自遙控接收器的輸出信號,接收到“待機”信號后,同時讀取GP0口的輸入電平兩次,其間隔時間為10ms,若第一次為高電平,第二次為低電平,則通過GP4口輸出低電平,同時將GP1口電平拉高驅動紅色指示燈亮,并將當前待機狀態(tài)存儲到E2PROM;
②同時調用延時程序實現3秒鐘的延時,延時期間不對按鍵及遙控信號響應;
③對其它情況,程序不執(zhí)行任何操作;
④通過GP3口檢測來自按鍵的輸出信號,接收到“待機”信號后,執(zhí)行上述①~③步驟;
(4)在單片機工作的全過程中,GP0口一旦檢測到一個下降沿信號,無論有無來自遙控或按鍵的控制信號,都通過GP4口輸出低電平,同時將GP1口電平拉高驅動紅色指示燈亮,并將當前待機狀態(tài)存儲到E2PROM,同時要調用延時程序實現3秒鐘的延時,延時期間不對按鍵及遙控信號響應。
單片機為PIC12F675型。
單片機的GP4口輸出低電平時,控制主電源的繼電器處于斷開狀態(tài),主電源不工作。單片機的GP4口輸出高電平時,控制主電源的繼電器處于閉合狀態(tài),主電源工作。
上電后此低功耗待機控制電路即開始工作,不掉電不停止工作。正常工作時程序一直處于循環(huán)中。電視機所處的“待機”或“開機”狀態(tài)存儲于E2PROM中,掉電也不丟失。
本發(fā)明的任務就是這樣完成的。
本發(fā)明是在使用小功耗的待機電源的同時,采用一種行之有效的低功耗待機控制方法,在不增加成本的前提下,實現更低的待機功耗。其節(jié)能效果好,待機功耗可降低至0.3W左右??蓮V泛應用于各種電視機中。


圖1為本發(fā)明單片機PIC12F675的電路連接圖。
圖2為本方法的流程圖。
具體實施例方式
實施例1。一種基于單片機的電視機低功耗待機控制方法,如圖1~圖2所示。本方法以單片機控制待機電源的繼電器,包括以下步驟
(1)單片機上電復位后,通過其GP0口檢測主芯片某腳(I/O口)的輸入電平狀態(tài),同時通過程序讀取E2PROM,檢測電視機在上次電源關閉時是處于“開機”還是“待機”狀態(tài);
(2)若為“待機”狀態(tài),則通過GP1口輸出高電平,驅動紅色指示燈亮,并執(zhí)行以下分步驟
①通過COUT口監(jiān)控來自遙控接收器的輸出信號,接收到“開機”信號后,通過GP4口輸出高電平,同時將GP1口電平拉低用以驅動藍色指示燈亮,并將當前開機狀態(tài)存儲到E2PROM;
②通過GP3口監(jiān)控來自按鍵的輸出信號,接收到“開機”信號后,執(zhí)行上述①步驟;
(3)若為“開機”狀態(tài),則通過GP1口輸出低電平驅動藍色指示燈亮,并執(zhí)行以下分步驟
①通過GP2口檢測來自遙控接收器的輸出信號,接收到“待機”信號后,同時讀取GP0口的輸入電平兩次,其間隔時間為10ms,若第一次為高電平,第二次為低電平,則通過GP4口輸出低電平,同時將GP1口電平拉高驅動紅色指示燈亮,并將當前待機狀態(tài)存儲到E2PROM;
②同時調用延時程序實現3秒鐘的延時,延時期間不對按鍵及遙控信號響應;
③對其它情況,程序不執(zhí)行任何操作;
④通過GP3口檢測來自按鍵的輸出信號,接收到“待機”信號后,執(zhí)行上述①~③步驟;
(4)在單片機工作的全過程中,GP0口一旦檢測到一個下降沿信號,無論有無來自遙控或按鍵的控制信號,都通過GP4口輸出低電平,同時將GP1口電平拉高驅動紅色指示燈亮,并將當前待機狀態(tài)存儲到E2PROM,同時要調用延時程序實現3秒鐘的延時,延時期間不對按鍵及遙控信號響應。
單片機為PIC12F675型。
實施例1是在使用小功耗的待機電源的同時,采用一種行之有效的低功耗待機控制方法,在不增加成本的前提下,實現更低的待機功耗。其節(jié)能效果好,待機功耗可降低至0.3W左右??蓮V泛應用于各種電視機中。
本實施例的源代碼如下
   lcd_pwrctr_1216[4]/********************************************************************Hisense LCD Power Controller**Author:Glenn Fan****Filename: PowerController.c **Date: 29/11/05**File Version: 1.00****Tools used: Hitech PICC 8.05********************************************************************//* PIC12F629-I/P  |///////| |////////|   | / |   VDD ---|-1 VDD VSS 8 - | -- VSS   NC <--|-2 GP5GP0 7-| <-- T_INT   RLY_ON <--|-3 GP4 GP1 6 - | --> LED   KEY_PWR -->|-4 GP3 GP2 5 - | <-- REMOTE   | |   |///////////////////|*/#include <pic.h>__CONFIG(WDTEN &amp; PWRTEN &amp; BORDIS &amp; MCLRDIS &amp; UNPROTECT &amp; INTIO);//----------------PORT Defination------------------------#define T_INT_PORT GPI00#define LED_PORT GPI01#define REMOTE_PORTGPI02#define KEY_PWR_PORTGPI03#define RLY_ON_PORTGPI04//-----------------Constant Defination-------------------#define T_BASE 56//-----------------Variable Defination-------------------volatile unsigned char SysStatus;volatile unsigned char t_4ms;volatile unsigned char t1_4ms;volatile unsigned char t2_4ms;volatile unsigned char t_Sec;volatile unsigned char remoteByteCnt;volatile unsigned char remoteBitCnt;volatile unsigned char remoteStep;volatile union{  unsigned int remoteTW;  struct  {  unsigned char remoteTL;  unsigned char remoteTH;  }remoteTD;}remoteTU;#define remoteTime_LremoteTU.remoteTD.remoteTL#define remoteTime_HremoteTU.remoteTD.remoteTH#define remoteTime remoteTU.remoteTWvolatile unsigned char remoteData[4];volatile union{  unsigned char mSysStatus;  struct  {  unsigned RUNON:1;  unsigned POWER:1;<!-- SIPO <DP n="4"> --><dp n="d4"/>   lcd_ pwrctr_1216[4]   unsigned IR_RC5_START :1;   unsigned EN_REMOTE_DECODE :1;   unsigned T_HIGH :1;   unsigned :3;   }sysStatusBits;}uSysStatus;#define bRUNON uSysStatus.sysStatusBits.RUNON#define bPOWER uSysStatus.sysStatusBits.POWER#define bIR_RC5_STARTuSysStatus.sysStatusBits.IR_RC5_START#define bEN_REMOTE_DECODEuSysStatus.sysStatusBits.EN_REMOTE_DECODE#define bT_HIGH uSysStatus.sysStatusBits.T_HIGH#define sysStatusuSysStatus.mSysStatus//----------------Function Defination--------------------void Initial_RAM(void);void Initial_FSR(void);void Enhance_Immunity(void);void Remote_Receive(void);void Re_Start_Receive_Remote(void);void Remote_Decode(void);void Key_Detect(void);void T_INT_Detect(void);void PowerOn(void);void Standby(void);void Delay(unsigned char x,unsigned char y);//-----------------Initial RAM-------------------------//-----------------------------------------------------void Initial RAM(void){  for(FSR=0x20;FSR<=0x5f;FSR++)  {  asm("CLRF 0");  }} .//-----------------Initial FSR-------------------//------------------------------------------------void Initial FSR(void){//Clear INT  OPTION=0b00000011;//PORTA pull-ups is enabled,TMRO 1:16 prescaler  TRISIO=0b00001101;  WPU=0b00000000;  IOCB=0b00000000;  VRCON=0b00000000;  INTCON=0b01100000;//Enable PEIE.TOIE  TMR0=0;  PIR1=0;  TMR1L=0;  TMR1H=0;  T1CON=0;  CMCON=0b00000111;//all digital IO// ADRESH=0;// ADCON0=0b00000000;//Initial PORT// GPIO=0b00000010;  GPIO=0b00000000;// ANSEL=0b10000000;//AN7->AD// ADCON1=0b0101000;//FOSC/16}//-------------------Enhance Immunity-------------------//------------------------------------------------------void Enhance_Immunity(void){  OPTION=0b00000011;//PORTA pull-ups is enabled,TMRO 1:16 prescaler  TRISIO=0b00001101;  TOIE=1;<!-- SIPO <DP n="5"> --><dp n="d5"/>   lcd_pwrctr_1216[4]  PEIE=1;  GIE=1;}//------------------Interrupt------------------------//---------------------------------------------------void interrupt Int_Serve(void){  if(TOIF)  {  TOIF=0;  t_4ms++;  t1_4ms++;  t2_4ms++;  if(t_4ms>=250)  {  t_4ms=0;  t_Sec++;   }   }   else if(TMR1IF)   {   TMR1IF=0;   }}//------------------Remote Data Receive-----------------//------------------------------------------------------void Remote_Receive(void){unsigned char remoteDataTmp=0;  if(bPOWER)  {   Re_Start_Receive_Remote();   return;   }   if(!bIR_RC5_START)   {   if(REMOTE_PORT)return;   TMR1L=0;   TMR1H=0;   TMR1IF=0;   TMR1IE=1;   TMR1ON=1;   t1_4ms=0;   CLRWDT();   while(!REMOTE_PORT)//等待高電平   {   if(t1_4ms>=4)   {   Re_Start_Receive_Remote();   return;   }   }   remoteTime_L=TMR1L;   remoteTime_H=TMR1H;   if(remoteTime>150*T_BASE &amp;&amp; remoteTime<170*T_BASE)//17T>高電平時間>15T數據頭可能有效   {   CLRWDT();   while(REMOTE_PORT) //等待低電平   {   if(t1_4ms>=4)   {   Re_Start_Receive_Remote();   return;   }   }   remoteTime_L=TMR1L;   remoteTime_H=TMR1H;   if(remoteTime>225*T_BASE &amp;&amp; remoteTime<255*T_BASE)//25.5T>高電平時間>22.5T數據頭有效   {<!-- SIPO <DP n="6"> --><dp n="d6"/>   lcd_pwrctr_1216[4]   //添加開始接收效據程序   for(remoteByteCnt=0;remoteByteCnt<4;remoteByteCnt++)   {   for(remoteBitCnt=0;remoteBitCnt<8;remoteBitCnt++)   {   TMR1L=0;   TMR1H=0;//重新開始計時   CLRWDT();   t1_4ms=0;   while(lREMOTE_PORT) //等待高電平   {   if(t1_4ms>=4)   {   Re_Start_Receive_Remote();   return;   }   }   while(REMOTE_PORT) //等待低電平   {   if(t1_4ms>=4)   {   Re_Start_Receive_Remote();   return;   }   }   remoteTime_L=TMR1L;   remoteTime_H=TMR1H;   if(remoteTime>34*T_BASE &amp;&amp; remoteTime<46*T_BASE)//為1   {   CARRY=0;   remoteDataTmp>>=1;   remoteDataTmp+=0x80;   }   else if(remoteTime>14*T_BASE &amp;&amp; remoteTime<24*T_BASE)//為0   {   CARRY=0;   remoteDataTmp>>=1;  }   }   remoteData[remoteByteCnt]=remoteDataTmp;   remoteBitCnt=0;   }   bEN_REMOTE_DECODE=1; //接收數據完畢允許解碼   }   else //可能為重碼,不接收數據   {   Re_Start_Receive_Remote();   }  }  else if((remoteTime<=1300)&amp;&amp;(remoteTime>=500))//RC5數據頭  {   CLRWDT();   bIR_RC5_START=1; //開始遙控接收RC5碼   TMR1IF=0;   TMR1L=0;   TMR1H=0;   remoteStep=1;  }  else //數據頭不正確繼續(xù)重新開始  {   Re_Start_Receive_Remote();  }}else{  switch(remoteStep)  {  case 1; case 3: case 5: case 7: case 9:  case 11:case 13:case 15:case 17:case 19:  case 21:   t1_4ms=0;   while(REMOTE_PORT)   {<!-- SIPO <DP n="7"> --><dp n="d7"/>   lcd_pwrctr_1216[4]   if(t1_4ms>=4)   {   Re_Start_Receive_Remote();   return;   }   }   remoteTime_L=TMR1L;   remoteTime_H=TMR1H;   TMR1L=0;   TMR1H=0;   if(remoteStep==17)   {if((remoteTime<=2200)&amp;&amp;(remoteTime>=1400))   {   remoteStep++;   }   else{   Re_Start_Receive_Remote();   }   }   else   {   if((remoteTime<=1300)&amp;&amp;(remoteTime>=500))   {   remoteStep++;   }   else   {  Re_Start_Receive_Remote();   }  }  break;case 2:case 4: case 6:case 8: case 10:case 12: case 14: case 16: case 18: case 20:case 22:  t1_4ms=0;  while(!REMOTE_PORT)  {  if(t1_4ms>=4)  {  Re_Start_Receive_emote();  return;  }  }  remoteTime_L=TMR1L;  remoteTime_H=TMR1H;  TMR1L=0;  TMR1H=0;  if(remoteStep==20)  {  if((remoteTime<=2200)&amp;&amp;(remoteTime>=1400))  {  remoteStep++;  }  else  {  Re_Start_Receive_Remote();  }  }  else if((remoteStep==2)||(remoteStep==4))  {  remoteStep++;  }  else  {  if((remoteTime<=1300)&amp;&amp;(remoteTimo>=500))  {  remoteStep++;  }  else  {  Re_Start_Receive_Remote();  }  }  <!-- SIPO <DP n="8"> --><dp n="d8"/>  lcd_pwrctr_1216[4]  break;  default:  bPOWER=1;  Re_Start_Receive_Remote();  break;  }  }}//-----------------Re Start Receive Remote-------------------//----------------------------------------------------------------void Re_Start_Receive_Remote(void){  bIR_RC5_START=0;  TMR1ON=0; //停止TMR1  TMR1L=0;  TMR1H=0;  TMR1IF=0;  TMR1IE=0;}//----------------Remote_Decode---------------------------//---------------------------------------------------------void Remote_Decode(void){  if(!bEN_REMOT_DECODE) return;  bEN_REMOTE_DECODE=0;  if((remoteData[1]==0xBF||remoteData
==0xFC)&amp;&amp;remoteData
==0x00)//用戶碼正確  {  if(remoteData[2]==0x10&amp;&amp;remoteData[3]==0xEF)//是電源鍵  {   bPOWER=1;   }  }  remoteData[3]=0;  remoteData[2]=0;  remoteData[1]=0;  remoteData
=0;}//------------------Key Detect----------------------------//--------------------------------------------------------void Key_Detect(void){  if(bPOWER)return;  if(!KEY_PWR_PORT)  {  if(t_4ms>9)  {  t_4ms=0;  bPOWER=1;  }  }  else t_4ms=0;}//--------------------T_INT Detect-----------------------------------//-------------------------------------------------------------------void T_INT_Detect(void){  if(!bRUNON) return;  if(T_INT_PORT) {bT_HIGH=1;t2_4ms=0;}  else  {  if(bT_HIGH)  {  while(!T_INT_PORT)  {  CLRWDT();  if(t2_4ms>1)  {<!-- SIPO <DP n="9"> --><dp n="d9"/>   lcd_pwrctr_1216[4]   t2_4ms=0;   bT_HIGH=0;   bPOWER=1;   return;  }  }  }  }}//---------------------Read EEPROM------------------------------//--------------------------------------------------------------void ReadEEPROM(void){  EEADR=0;  RD=1;}//------------------Write EEPROM-----------------------//-----------------------------------------------------void WriteEEPROM(unsigned char value){  EEADR=0;  EEDATA=value;  WREN=1;  GIE=0;  EECON2=0x55;  EECON2=0xaa;  WR=1;  GIE=1;  while(WR)continue;  WREN=0;}//---------------Power On------------------------//-----------------------------------------------void PowerOn(void){  bPOWER=0;  RLY_ON_PORT=1;  LED_PORT=0;  GPIO5=1;  bRUNON=1;  WriteEEPROM(0xa5);}//------------ ----Standby-----------------------//------------------------------------------------void Standby(void){  bPOWER=0;  RLY_ON_PORT=0;  LED_PORT=1;  GPIO5=0;  bRUNON=0;  WriteEEPROM(0);}//------------------Delay-----------------------------//----------------------------------------------------void Delay(unsigned char x,unsigned char y){ //delay time=14+(3*(Y-1)+7)*(X-1)unsigned char z;  do  {  z=y;  do{;}  while(--z);   }   while(--x);<!-- SIPO <DP n="10"> --><dp n="d10"/>   lcd_pwrctr_1216[4]}//----------------------Main Function----------------------------//---------------------------------------------------------------void main(void){  OSCCAL=READ_OSCCAL_DATA();  Init ial_RAM();  Initial_FSR();  CLRWDT();  ReadEEPROM();  if(EEDATA==0xa5)  {  RLY ON PORT=1;  LED_PORT=0;<!-- SIPO <DP n="11"> --><dp n="d11"/>  lcd_pwrctr_1216[4]  while(t_Sec<3){CLRWDT();} //delay 3 second  t_4ms=0;   }   }*/   goto Loop;}
權利要求
1.一種基于單片機的電視機低功耗待機控制方法,它以單片機控制待機電源的繼電器,其特征在于包括以下步驟
(1)單片機上電復位后,通過其GP0口檢測主芯片某腳的輸入電平狀態(tài),同時通過程序讀取E2PROM,檢測電視機在上次電源關閉時是處于“開機”還是“待機”狀態(tài);
(2)若為“待機”狀態(tài),則通過GP1口輸出高電平,驅動紅色指示燈亮,并執(zhí)行以下分步驟
①通過COUT口監(jiān)控來自遙控接收器的輸出信號,接收到“開機”信號后,通過GP4口輸出高電平,同時將GP1口電平拉低用以驅動藍色指示燈亮,并將當前開機狀態(tài)存儲到E2PROM;
②通過GP3口監(jiān)控來自按鍵的輸出信號,接收到“開機”信號后,執(zhí)行上述①步驟;
(3)若為“開機”狀態(tài),則通過GP1口輸出低電平驅動藍色指示燈亮,并執(zhí)行以下分步驟
①通過GP2口檢測來自遙控接收器的輸出信號,接收到“待機”信號后,同時讀取GP0口的輸入電平兩次,其間隔時間為10ms,若第一次為高電平,第二次為低電平,則通過GP4口輸出低電平,同時將GP1口電平拉高驅動紅色指示燈亮,并將當前待機狀態(tài)存儲到E2PROM;
②同時調用延時程序實現3秒鐘的延時,延時期間不對按鍵及遙控信號響應;
③對其它情況,程序不執(zhí)行任何操作;
④通過GP3口檢測來自按鍵的輸出信號,接收到“待機”信號后,執(zhí)行①~③步驟;
(4)在單片機工作的全過程中,GP0口一旦檢測到一個下降沿信號,無論有無來自遙控或按鍵的控制信號,都通過GP4口輸出低電平,同時將GP1口電平拉高驅動紅色指示燈亮,并將當前待機狀態(tài)存儲到E2PROM,同時要調用延時程序實現3秒鐘的延時,延時期間不對按鍵及遙控信號響應。
2.按照權利要求1所述的基于單片機的電視機低功耗待機控制方法,其特征在于所說的單片機為PIC12F675型。
全文摘要
一種基于單片機的電視機低功耗待機控制方法。包括檢測上次關閉時是“開機”還是“待機”;若為“待機”,通過COUT口監(jiān)控來自遙控接收器的輸出信號;接收到“開機”信號后,GP4口輸出高電平,藍色指示燈亮,并將當前開機狀態(tài)存儲;監(jiān)控來自按鍵的輸出信號;若為“開機”狀態(tài),則藍色指示燈亮,檢測來自遙控接收器的輸出信號,接收到“待機”信號后,間隔10ms讀取GP0口的輸入電平兩次,若兩次分別為高、低電平,驅動紅色指示燈亮,將當前待機狀態(tài)存儲;同時延時3秒;全過程中GP0口一旦檢測到下降沿信號,都通過GP4口輸出低電平,將當前待機狀態(tài)存儲、延時3秒等步驟。它待機電源功耗小,控制方法可將待機功耗降至0.3W。
文檔編號H04N5/63GK1885931SQ20061004478
公開日2006年12月27日 申請日期2006年6月12日 優(yōu)先權日2006年6月12日
發(fā)明者王立平, 施志峰, 徐愛臣, 孫有新 申請人:海信集團有限公司, 青島海信電器股份有限公司
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
山阴县| 吴忠市| 北票市| 保靖县| 辉南县| 景泰县| 阳高县| 承德县| 上饶市| 武威市| 临邑县| 濉溪县| 奉贤区| 黄骅市| 望奎县| 常山县| 金塔县| 石河子市| 金塔县| 北安市| 桑日县| 屏边| 台北市| 达孜县| 瓮安县| 宽甸| 简阳市| 岑溪市| 洛川县| 高唐县| 南部县| 白水县| 岐山县| 旬阳县| 武宣县| 清镇市| 独山县| 龙泉市| 博乐市| 兴和县| 东海县|