本文目錄一覽:
基於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;i4;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;j4;j++)
{
for (k=0;k8;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;i100;i++)
{
delay(5);
BEEP=!BEEP;
}
BEEP=1;
}
void delay(unsigned char x)//x*0.14MS
{
unsigned char i;
while(x–)
{
for (i = 0; i13; i++) {}
}
}
void delay1(unsigned char ms)
{
unsigned char i;
while(ms–)
{
for(i = 0; i120; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
C語言怎麼寫紅外程序?實現遙控控制八個led。求程序和詳細解釋。
下面是一個用C寫的遙控器程序.能在數碼管上顯示鍵碼.
#include reg52.h
#define c(x) (x*110592/120000)
sbit Ir_Pin=P3^3;
unsigned char code Led_Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,
0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //共陽極數碼顯示碼0-F.
unsigned char code Led_Sel[]={0xe,0xd,0xb,0x7};
unsigned char Led_Buf[4]; //顯示緩衝區
char Led_Index; //位選
unsigned char Ir_Buf[4]; //用於保存解碼結果
//==============================================================
//數碼管掃描
timer0() interrupt 1 using 1
{
TL0=65536-1000;
TH0=(65536-1000)/256; //定時器0設定約1000us中斷一次,用於數碼管掃描
P0=0xff;
P2=Led_Sel[Led_Index]; //位選
P0=Led_Tab[Led_Buf[Led_Index]]; //段選
if(++Led_Index3) Led_Index=0; //四個掃描完了,到第一個數碼管
}
//==============================================================
unsigned int Ir_Get_Low()
{
TL1=0;
TH1=0;
TR1=1;
while(!Ir_Pin (TH10x80)==0);
TR1=0;
return TH1*256+TL1;
}
//=============================================================
unsigned int Ir_Get_High()
{
TL1=0;
TH1=0;
TR1=1;
while(Ir_Pin (TH10x80)==0);
TR1=0;
return TH1*256+TL1;
}
//==============================================================
main()
{
unsigned int temp;
char i,j;
Led_Index=1;
TMOD=0x11;
TL0=65536-1000;
TH0=(65536-1000)/256; //定時器0設定約1000us中斷一次,用於數碼管掃描
EA=1;
ET0=1;
TR0=1;
Led_Buf[0]=0;
Led_Buf[1]=0;
Led_Buf[2]=0;
Led_Buf[3]=0; //顯示區設成0
do{
restart:
while(Ir_Pin);
temp=Ir_Get_Low();
if(tempc(8500) || tempc(9500)) continue;//引導脈衝低電平9000
temp=Ir_Get_High();
if(tempc(4000) || tempc(5000)) continue;//引導脈衝高電平4500
for(i=0;i4;i++) //4個位元組
for(j=0;j8;j++) //每個位元組8位
{
temp=Ir_Get_Low();
if(tempc(200) || tempc(800)) goto restart;
temp=Ir_Get_High();
if(tempc(200) || tempc(2000)) goto restart;
Ir_Buf[i]=1;
if(tempc(1120)) Ir_Buf[i]|=0x80;
}
Led_Buf[0]=Ir_Buf[2]0xf;
Led_Buf[1]=(Ir_Buf[2]/16)0xf;
Led_Buf[2]=Ir_Buf[3]0xf;
Led_Buf[3]=(Ir_Buf[3]/16)0xf; //顯示結果
}while(1);
}
單片機c語言編寫紅外遙控控制小車,按下數字2,小車啟動前進,怎麼寫?
紅外遙控小車,關鍵是小車上要有一個紅外接收頭,接收紅外遙控器發送的紅外信號。按下數字2,是單片機板上的按鍵吧,這首先必須要對所用按鍵編碼,小車接收後再解碼,這樣小車才能識別按鍵。至於小車啟動,就發送數字2的編碼即可。下圖是紅外接收頭。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/182166.html