㈠ 用单片机设计一个智能红外控制台灯,成本大概是多少
大概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()函数,但你没有写这个函数。