當前位置:編程學習大全網 - 源碼下載 - 基於51單片機紅外遙控代碼(C語言)

基於51單片機紅外遙控代碼(C語言)

以下文件是51單片機實現遙控解碼,通過數碼管顯示鍵碼的程序,P0口驅動數碼管段選,p2.6和p2.7為數碼管位選,接收頭連到P3.2口。此程序以通過驗證,可以直接編譯使用,另外還有壹個繼電器和蜂鳴器的控制,不用可以屏蔽掉。

;********************************************************************************

;* 描述: *

;* 遙控鍵值讀取器 *

;* 數碼管顯示, P0口為數碼管的數據口 *

;* *

;********************************************************************************

;遙控鍵值解碼-數碼管顯示 *

;********************************************************************************/

#include <reg51.h>

#include <intrins.h>

void IR_SHOW();

void delay(unsigned char x);//x*0.14MS

void delay1(unsigned char ms);

void beep();

sbit IRIN = P3^2;

sbit BEEP = P3^7;

sbit RELAY= P1^3;

sbit GEWEI= P2^7;

sbit SHIWEI= P2^6;

unsigned char IRCOM[8];

unsigned char code table[16] =

{0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

main()

{

IE = 0x81; //允許總中斷中斷,使能 INT0 外部中斷

TCON = 0x1; //觸發方式為脈沖負邊沿觸發

delay(1);

IRIN=1;

BEEP=1;

RELAY=1;

for(;;)

{

IR_SHOW();

}

} //end main

void IR_IN() interrupt 0 using 0

{

unsigned char i,j,k,N=0;

EA = 0;

I1:

for (i=0;i<4;i++)

{

if (IRIN==0) break;

if (i==3) {EA =1;return;}

}

delay(20);

if (IRIN==1) goto I1; //確認IR信號出現

while (!IRIN) //等 IR 變為高電平

{delay(1);}

for (j=0;j<4;j++)

{

for (k=0;k<8;k++)

{

while (IRIN) //等 IR 變為低電平

{delay(1);}

while (!IRIN) //等 IR 變為高電平

{delay(1);}

while (IRIN) //計算IR高電平時長

{

delay(1);

N++;

if (N>=30) {EA=1;return;}

}

IRCOM[j]=IRCOM[j] >> 1;

if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}

N=0;

}//end for k

}//end for j

if (IRCOM[2]!=~IRCOM[3]) {EA=1;return;}

IRCOM[5]=IRCOM[2] & 0x0F;

IRCOM[6]=IRCOM[2] & 0xF0;

IRCOM[6]=IRCOM[6] >> 4;

beep();

EA = 1;

}

void IR_SHOW()

{

P0 = table[IRCOM[5]];

GEWEI = 0;

SHIWEI = 1;

delay1(4);

P0 = table[IRCOM[6]];

SHIWEI = 0;

GEWEI = 1;

delay1(4);

}

void beep()

{

unsigned char i;

for (i=0;i<100;i++)

{

delay(5);

BEEP=!BEEP;

}

BEEP=1;

}

void delay(unsigned char x)//x*0.14MS

{

unsigned char i;

while(x--)

{

for (i = 0; i<13; i++) {}

}

}

void delay1(unsigned char ms)

{

unsigned char i;

while(ms--)

{

for(i = 0; i<120; i++)

{

_nop_();

_nop_();

_nop_();

_nop_();

}

}

}

  • 上一篇:日本動漫
  • 下一篇:2021評分最高的二次元開放世界遊戲妳至少玩過壹款
  • copyright 2024編程學習大全網