導航:首頁 > 操作系統 > 紅外線單片機控制

紅外線單片機控制

發布時間:2022-08-05 16:53:30

單片機如何實現紅外遙控

以下文件是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_();
}
}
}

㈡ 用單片機對紅外線的調制解調

38KHz調制嗎?對某埠按照一定周期取反即可,當然,最好是結合整個程序靈活處理。

㈢ C51單片機控制紅外線的程序要怎麼寫

首先要設定載波,比如38KHZ載波,可以通過單片機的PWM口來實現。
其次,對紅外線進行編碼,編碼主要是用來表徵1和0的數字信息。

㈣ 單片機紅外線控制步進電機的方法

不知道你要怎麼控制,估計只是做實驗吧,你可以對紅外遙控器的信號進行解碼,每個按鈕的編碼都不同的,然後你自己去定義哪個按鍵是啟動,哪個按鍵是加速、哪個按鍵是減速,哪個按鍵是停止,等等等等.....

㈤ 關於單片機 發射紅外線遙控電視機疑問

解碼用單片機接收NEC遙控器32編碼和電視遙控器42位編碼,程序裡面自動識別32和42位的編碼用數碼管進行顯示對應的數值。

㈥ 單片機的紅外遙控的原理

1、發送端由單片機和紅外發光二極體組成。
單片機控制紅外發光二極體發射38KHz左右的紅外光,這個紅外光就可能起到傳遞信號的作用。你可以在你的程序中規定發射紅外線時表示二進制的一個位『1』無紅外線時表示二進制的『0』。這樣你就可以發出一系列由『1』和『0』所級成的信號。
2、接收端是由紅外接收二極體和單片機組成。
前面我們讓發射端發出信號,現在接收頭就開始收信號。

㈦ 如何用紅外線控制51單片機的數碼管顯示0到9

你說的是紅外解碼吧 遙控器控制的

㈧ 用單片機如何作紅外線的接收

你好,我研究過紅外線,網上有賣紅外一體化接收頭的,大概8毛錢一個,它有三個引腳,分別是電源、地、還有信號端。信號端接單片機外部中斷0或外部中斷1,我編過相應的程序,用紅外遙控控制數碼管的顯示,按幾號鍵顯示幾。

㈨ 紅外線遙控 單片機

這個程序我之前寫過一個,解碼用單片機接收NEC遙控器32編碼和電視遙控器42位編碼,程序裡面自動識別32和42位的編碼用數碼管進行顯示對應的數值,我還寫過紅外發射,模擬NEC協議發射紅外編碼和電視機、奧克斯空調、衛星接收機都能控制,需要的可以網路私信!

㈩ 51單片機紅外遙控程序

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit lcden = P2^7;
sbit lcdrs = P2^6;
sbit lcdwr = P2^5;
sbit IR = P3^2;
uchar IRCOM[6];//數組,用於存儲紅外編碼
uchar code table1[] = "remote control";
uchar code table2[] = "CODE:";
void delayms(uchar x)// 延時x*0.14ms
{
uchar i;
while(x--)
for(i=0;i<13;i++){}
}
void delay(uchar x) //延時xms
{
uchar i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
/****************************LCD部分***********************************************/
void write_com(uchar com)
{
lcden = 0;
lcdrs = 0;
lcdwr = 0;
P0 = com;
delay(5);
lcden = 1;
delay(5);
lcden = 0; //別忘了lcden拉低
}
void write_date(uchar date)
{
lcden = 0;
lcdrs = 1;
lcdwr = 0;
P0 = date;
delay(5);
lcden = 1;
delay(5);
lcden = 0;
}
void lcd_init(void)
{
lcden = 0;
lcdrs = 0;
lcdwr = 0;
delay(5);
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
/*****************main()************************/
void main(void)
{
uchar count=0;
IR = 1;
lcd_init();
write_com(0x80);
while(table1[count]!='\0')
{
write_date(table1[count]);
count++;
delay(5);
}
count = 0;
write_com(0x80+0x40);
while(table2[count]!='\0')
{
write_date(table2[count]);
count++;
delay(5);
}

IE = 0x81; //開中斷
TCON = 0x01;//脈沖負邊沿觸發
while(1);

}
/*********************紅外中斷**************************/
void IR_time() interrupt 0
{
uchar i,j,TimeNum=0;//TimeNum用來計IR高電平次數 從而判斷是0還是1
EX0 = 0; //關閉中斷
delayms(5);
if(1 == IR)
{
EX0 = 1;
return;
}
while(!IR) //跳過9ms前導低電平
delayms(1);
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
while(IR) //跳過4.5ms的前導高電平
delayms(1);
while(!IR) //跳過0.56ms的低電平
delayms(1);

while(IR)
{
TimeNum++; //計時高電平時間從而判斷讀取的是0還是1
delayms(1);
}
if(TimeNum>=30)//按鍵按下時間過長 跳過
{
EX0 = 1;
return;
}
IRCOM[i] = IRCOM[i]>>1;
if(TimeNum >= 8) //8*0.14ms 這時讀取的是1;
{
IRCOM[i] = IRCOM[i]|0x80;
}
TimeNum = 0;
}
}
if(IRCOM[2]!=~IRCOM[3])//判斷八位數據和八位數據反碼是否相等
{
EX0 = 1;
return;
}
IRCOM[4] = IRCOM[2]&0x0f;//取低四位
IRCOM[5] = IRCOM[2]>>4; //IRCOM[5]取IRCOM[2]高四位
if(IRCOM[4] > 9) //轉換成字元
{
IRCOM[4] = IRCOM[4] + 0x37;
}
else
IRCOM[4] = IRCOM[4] + 0x30;
if(IRCOM[5] > 9)
{
IRCOM[5] = IRCOM[5] + 0x37;
}
else
IRCOM[5] = IRCOM[5] + 0x30;
delay(5);
write_com(0x80 + 0x40 + 5);
write_date(IRCOM[5]);
write_date(IRCOM[4]);
EX0 = 1; //重新開啟外部中斷
}

閱讀全文

與紅外線單片機控制相關的資料

熱點內容
安卓是世界上多少個程序員開發 瀏覽:43
解壓器官方免費 瀏覽:85
單片機p10開發 瀏覽:486
做什麼app賺錢 瀏覽:83
博途編譯失敗聯系客戶支持部門 瀏覽:926
金蝶旗艦版編譯 瀏覽:51
萬象伺服器斷電後啟動不了怎麼辦 瀏覽:356
我的世界蘋果版的2b2t伺服器地址咋查 瀏覽:95
xlsx轉換pdf 瀏覽:98
3dmax擠出命令英語 瀏覽:903
靶心率的定義和演算法 瀏覽:514
3d模術師app哪裡下載 瀏覽:474
php中文api文檔 瀏覽:458
安卓設計怎麼加入輸入框 瀏覽:185
主根伺服器什麼時候開始 瀏覽:738
奇門遁甲完整版pdf 瀏覽:904
app軟體怎麼用的 瀏覽:802
電子書pdf購買 瀏覽:194
浪潮伺服器如何做系統 瀏覽:113
冒險島img格式加密 瀏覽:598