㈠ 用單片機設計一個智能紅外控制台燈,成本大概是多少
大概50元左右吧,看你用什麼樣的單片機咯。還有智能智能在哪裡,這都不一樣的。我這里有一些資料,需要可以來找我,在線,等待回復。*****
到論壇,精華貼對你更有幫助的.潮之家就是力量---->
㈡ 求一個簡單的單片機紅外遙控控制led燈的收發程序
這是我以前寫的紅外遙控器。。。你看看,有幫助的
#include <AT89X51.h>
static bit
OP; //紅外發射管的亮滅
static unsigned int
count; //延時計數器
static unsigned int endcount; //終止延時計數
static unsigned char
flag; //紅外發送標志
char
iraddr1; //十六位地址的第一個位元組
char iraddr2; //十六位地址的第二個位元組
void SendIRdata(char p_irdata);
void delay();
void main(void)
{
count = 0;
flag = 0;
OP = 0;
P3_4 = 0;
EA = 1; //允許CPU中斷
TMOD = 0x11; //設定時器0和1為16位模式1
ET0 = 1; //定時器0中斷允許
TH0 = 0xFF;
TL0 = 0xE6; //設定時值0為38K 也就是每隔26us中斷一次
TR0 = 1;//開始計數
iraddr1=3;
iraddr2=252;
do{
delay();
SendIRdata(12);
}while(1);
}
//定時器0中斷處理
void
timeint(void) interrupt
1
{
TH0=0xFF;
TL0=0xE6; //設定時值為38K 也就是每隔26us中斷一次
count++;
if (flag==1)
{
OP=~OP;
}
else
{
OP = 0;
}
P3_4 = OP;
}
void
SendIRdata(char p_irdata)
{
int i;
char irdata=p_irdata;
//發送9ms的起始碼
endcount=223;
flag=1;
count=0;
do{}while(count<endcount);
//發送4.5ms的結果碼
endcount=117
flag=0;
count=0;
do{}while(count<endcount);
//發送十六位地址的前八位
irdata=iraddr1;
for(i=0;i<8;i++)
{
//先發送0.56ms的38KHZ紅外波(即編碼中0.56ms的低電平)
endcount=10;
flag=1;
count=0;
do{}while(count<endcount);
//停止發送紅外信號(即編碼中的高電平)
if(irdata-(irdata/2)*2)
//判斷二進制數個位為1還是0
{
endcount=41;
//1為寬的高電平
}
else
{
endcount=15; //0為窄的高電平
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
//發送十六位地址的後八位
irdata=iraddr2;
for(i=0;i<8;i++)
{
endcount=10;
flag=1;
count=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{
endcount=41;
}
else
{
endcount=15;
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
//發送八位數據
irdata=p_irdata;
for(i=0;i<8;i++)
{
endcount=10;
flag=1;
count=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{
endcount=41;
}
else
{
endcount=15;
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
//發送八位數據的反碼
irdata=~p_irdata;
for(i=0;i<8;i++)
{
endcount=10;
flag=1;
count=0;
do{}while(count<endcount);
if(irdata-(irdata/2)*2)
{
endcount=41;
}
else
{
endcount=15;
}
flag=0;
count=0;
do{}while(count<endcount);
irdata=irdata>>1;
}
endcount=10;
flag=1;
count=0;
do{}while(count<endcount);
flag=0;
}
void delay()
{
int i,j;
for(i=0;i<400;i++)
{
for(j=0;j<100;j++)
{
}
}
}
㈢ 單片機如何實現紅外遙控
以下文件是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_();
}
}
}
㈣ 你好,我想用紅外對管以及單片機來控制LED燈得熄滅及亮度,想請教一下電路該怎麼設計,謝謝啦 ··
這個簡單,你先找個單片機的IO口,通過控制光耦或者三極體來控制燈的接地段。
㈤ 紅外控制16個燈流水燈電路圖(單片機C51)
其實紅外遙控就是一個無線按鍵
你先把流水燈(多花式)做好,按鍵作為開關,流水燈花樣、樣式選擇等,具體看你的想法
然後你就可以選擇普通遙控器,比如電視的,然後解碼
或者自己用另一個單片機模擬紅外遙控器,協議可參考現有常用紅外協議或是自定義一個簡單的
㈥ 單片機的紅外遙控的原理
1、發送端由單片機和紅外發光二極體組成。
單片機控制紅外發光二極體發射38KHz左右的紅外光,這個紅外光就可能起到傳遞信號的作用。你可以在你的程序中規定發射紅外線時表示二進制的一個位『1』無紅外線時表示二進制的『0』。這樣你就可以發出一系列由『1』和『0』所級成的信號。
2、接收端是由紅外接收二極體和單片機組成。
前面我們讓發射端發出信號,現在接收頭就開始收信號。
㈦ 哪位大佬有STC89c51單片機紅外通信控制LED燈開關的程序呢,這是個遙控器控制數碼管的程序。
會解碼就好辦了,假設收到的4個位元組數據存於tableaa[4]中,根據第三位元組內容來控制LED
只需主程序中添加:
if(tableaa[2]==1) led1=0;
if(tableaa[2]==2) led1=1;
if(tableaa[2]==3) led2=0;
if(tableaa[2]==4) led2=1;
.............
㈧ 關於C51單片機紅外線驅動LED發射和接收問題
單片機的電流一般不大,除了工作電流微小的工作對象以外,單片機的輸出一般通過三極體後再控制相應的對象。紅外發射管其實也是LED,工作電流一般設計為幾~十幾mA。單片機直接推動太免強了,應以三極體放大後再推動紅外發射管。
在此說明一下:
1,三極體基極電阻可在1K~10K內選用。
2,與紅外發射管串聯的限流電阻主要由電源電壓決定,電流5~50mA以內10~20mA為宜。
3,用PNP管的電源電壓不得高於單片機的輸出電壓(5V)。
4,在NPN管的B極與地間(或PNP管B極與正電源間)接一隻幾百K電阻。
5,靜態時單片機的輸出是0,三極體用NPN型,靜態時單片機的輸出是1,三極體用PNP型。
具體程序參考樓下
最簡單的,發送端:按一下鍵發一個脈沖;接收端:進行脈沖計數,用led顯示。
㈨ 用單片機控制熱釋紅外模塊的程序思路,比如怎麼用它控制燈的亮滅
這個項目我做過的,就是模塊檢測到紅外的時候發出一個信號,當接收到的時候讓燈亮
沒檢測到的時候是另一個信號讓等滅!!
㈩ 51單片機紅外遙控小夜燈按鈕有些問題幫忙看看唄!!!!!!!!!!
程序調用了一個initinfrated()函數,但你沒有寫這個函數。