精久 LED灯无线灯具遥控开关关 配 接收模块

>遥控器一路价格
共找到1800组遥控器一路价格信息,小编整理的遥控器一路价格大全包含遥控器一路优惠价格,券后包邮价格,价格行情走势,销量,图片等信息。手机版:【控制模块】_控制模块价格_控制模块图片_控制模块排行榜_控制模块品牌官方旗舰店 |  |¥30.4已售202件¥32(9.5折)¥58.1已售14件¥83(7折)¥48已售31件¥(0折)¥15已售678件¥(0折)¥9已售32件¥(0折)¥59已售51件¥62(9.5折)¥145已售36件¥155(9.4折)¥35已售304件¥(0折)¥16.9已售9件¥(0折)¥19.9已售13件¥25.9(7.7折)¥8.5已售279件¥(0折)¥68已售14件¥(0折)¥60已售47件¥(0折)¥8.5已售14件¥(0折)¥39已售152件¥78(5折)¥24已售7件¥34(7.1折)¥16.8已售7件¥22.8(7.4折)¥8.5已售61件¥(0折)¥43已售12件¥(0折)¥35已售11件¥(0折)¥55已售41件¥(0折)¥55已售13件¥110(5折)¥7.2已售39件¥8(9折)¥26.88已售21件¥28(9.6折)¥14已售6件¥(0折)¥93已售38件¥(0折)¥99已售28件¥(0折)¥28已售29件¥(0折)¥99已售34件¥(0折)¥57.42已售13件¥58(9.9折)¥8.5已售39件¥10(8.5折)¥47已售66件¥(0折)¥90已售13件¥(0折)¥47.8已售14件¥95.6(5折)¥32已售28件¥(0折)¥59.8已售31件¥(0折)¥14已售9件¥(0折)¥40已售18件¥(0折)¥45已售20件¥(0折)¥18.5已售13件¥(0折)¥45已售14件¥(0折)¥265已售11件¥(0折)¥31已售9件¥(0折)¥35已售9件¥(0折)¥29.9已售28件¥(0折)¥188已售11件¥(0折)¥119已售19件¥(0折)¥40已售20件¥(0折)¥29.9已售13件¥(0折)¥39已售6件¥(0折)¥68已售10件¥(0折)¥115已售12件¥(0折)¥38已售7件¥115(3.3折)¥5.9已售11件¥(0折)¥18.9已售7件¥23.9(7.9折)¥29.9已售5件¥34(8.8折)¥24已售14件¥(0折)¥7011已售0件¥(0折)¥8.8已售6件¥11(8折)¥89已售6件¥99(9折)友情链接:金陵导购&&  Copyright & 2010 - 2016 /taogou/ All Rights Reserved热门搜索:
市 场 价:23.90 元折 扣 价:18.90 元
近期销售:7 件
所 在 地:广东 中山
店铺掌柜: (查看店铺所有商品)
商品推荐: [丨]
为您提供商品一路遥控开关LED吸顶灯具遥控器无线220v模块分段1路数码分控制器的详细介绍,
淘宝售价:23.90元。
乐购网为您提供淘宝网网上热销商品,让您更快找到热门以及合适自己的商品,
特别提供商品的详细参数、介绍以及报价等信息,挑选商品更方便。
一路遥控开关LED吸顶灯具遥控器无线220v模块分段1路数码分控制器图片
&138.00 ¥276.00
&12.00 ¥12.00
&26.00 ¥52.00
&16.90 ¥33.90
&25.00 ¥35.00
&19.90 ¥19.90
&16.90 ¥16.90
&16.90 ¥16.90
&39.90 ¥39.90
&24.00 ¥24.00
&92.00 ¥98.00
&20.00 ¥20.00
&18.00 ¥20.00
&18.80 ¥19.80
&29.90 ¥59.80
&15.00 ¥15.00
&24.00 ¥24.00
&79.00 ¥158.00
一路遥控开关LED吸顶灯具遥控器无线220v模块分段1路数码分控制器用户评价
电话:0571
联系信箱:查看: 7578|回复: 22
单片机解码的红外遥控一个led灯亮和灭,遥控器键码有,可是不会程序,求大神
我想制作一个用单片机解码的红外遥控开关,只需要控制一个led灯的亮和灭就可以了,各位大神谁有程序呢?下面是遥控器的键码,和实物图,只需要第一个键控制第一个等就可以,谢谢
111.png (11.86 KB, 下载次数: 58)
22:24 上传
TB1tdWPHXXXXXb8XVXXXXXXXXXX_!!2-item_pic.png (1.03 MB, 下载次数: 61)
22:24 上传
判断接受到在键码 跟 你所按的键相同 点亮LED灯就可以了
21:18 上传
点击文件名下载附件
40.72 KB, 下载次数: 272
回帖助人的奖励!
判断接受到在键码 跟 你所按的键相同 点亮LED灯就可以了
我也有这个,我一开始就拿这个改的,一直改不对,不知道怎么改。。。。
判断接受到在键码 跟 你所按的键相同 点亮LED灯就可以了
恩,你发的和我的是一个程序,可是我改了好多次,没改对,要是你的话你会怎么改呢,大神?
喔哎呀呀 发表于
恩,你发的和我的是一个程序,可是我改了好多次,没改对,要是你的话你会怎么改呢,大神?
这个很好改嘛,他提供的程序应该是接收到键值之后在1602液晶上显示出来,你只要把他的显示部分程序去掉,改成判断键值的程序,按你的要求,判断接收到的键值等于0x45就点亮第一个灯,不等就忽略!这样改成功一路之后,就可以多加几路判断,实现控制8个灯了!
回帖助人的奖励!
这是我做的红外遥控项目,你可以参考一下!/bbs/forum.php?mod=viewthread&tid=34267&mobile=2
个人认为要看你的遥控器用的是什么通讯协议的。其实对于你这个控制用户码并不太重要,重要的是键码。
现市场上的红外遥控器多部分用的小日本NEC通讯协议的,你可以参考一下。希望能帮到你
回帖助人的奖励!
我也有这个,我一开始就拿这个改的,一直改不对,不知道怎么改。。。。
下面是我改的 没试过&&不懂行不行!
如果你已经解决就好,没解决的话下面可以参考
#include&reg51.h&
sbit IRIN=P3^2;
sbit LED1 = P1^0;
sbit LED2 = P1^1;
sbit LED3 = P1^2;
unsigned char IrValue[6];
unsigned char T
void IrInit();
void DelayMs(unsigned int );
/*******************************************************************************
* oˉêyÃû& && && &: main
* oˉêy1|Äü& & & & & & & && & : Ö÷oˉêy
* êäèë& && && &&&: ÎT
* êä3ö& && && && & & &&&: ÎT
*******************************************************************************/
void main()
& & & & IrInit();& & & &
& & & & while(1)
//& & & & & & & & IrValue[5]=IrValue[2]&&4;& & & &&&& & & &&&& & & & //¸ßλ
//& & & & & & & & IrValue[6]=IrValue[2]&0x0f;& & & & & & & & //μíλ& & & &
& & & & & & & & if( IrValue[2] == 0x45 ) LED1 = 0; // áá
& & & & & & & & if( IrValue[2] == 0x46 ) LED2 = 0; // áá& & & & & & & &
& & & & & & & & if( IrValue[2] == 0x47 ) LED3 = 0; // áá
}& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&&
/*******************************************************************************
* oˉêyÃû& && && &: DelayMs()
* oˉêy1|Äü& & & & & & & && & : Ñóê±
* êäèë& && && &&&: x
* êä3ö& && && && & & &&&: ÎT
*******************************************************************************/
void DelayMs(unsigned int x)& &//0.14msÎó2î 0us
&&while(x--)
&&for (i = 0; i&13; i++)
/*******************************************************************************
* oˉêyÃû& && && &: IrInit()
* oˉêy1|Äü& & & & & & & && & : 3õê¼»ˉoìíaÏß½óêÕ
* êäèë& && && &&&: ÎT
* êä3ö& && && && & & &&&: ÎT
*******************************************************************************/
void IrInit()
& & & & IT0=1;//ϽμÑØ′¥·¢
& & & & EX0=1;//′ò¿aÖD¶Ï0ÔêDí
& & & & EA=1;& & & & //′ò¿a×üÖD¶Ï
& & & & IRIN=1;//3õê¼»ˉ¶Ë¿ú
/*******************************************************************************
* oˉêyÃû& && && &: ReadIr()
* oˉêy1|Äü& & & & & & & && & : ¶áè¡oìíaêyÖμμÄÖD¶Ïoˉêy
* êäèë& && && &&&: ÎT
* êä3ö& && && && & & &&&: ÎT
*******************************************************************************/
void ReadIr() interrupt 0
& & & & unsigned char j,k;
& & & & Time=0;& & & & & & & & & & & & & & & & & & & &&&
& & & & DelayMs(70);
& & & & if(IRIN==0)& & & & & & & & //è·èÏêÇ·ñÕæμĽóêÕμ½Õyè·μÄDÅoÅ
& & & & {& & & &&&
& & & & & & & &
& & & & & & & & err=1000;& & & & & & & & & & & & & & & & //1000*10us=10ms,3¬1yËμÃ÷½óêÕμ½′íÎóμÄDÅoÅ
& & & & & & & & /*μ±á½¸öìõ¼t¶¼ÎaÕæêÇÑ-»·£¬èç1ûóDò»¸öìõ¼tÎa¼ùμÄê±oòìø3öÑ-»·£¬ÃaμÃ3ìDò3ö′íμÄê±
& & & & & & & & o3ìDòËàÔúÕaàï*/& & & &
& & & & & & & & while((IRIN==0)&&(err&0))& & & & //μè′yÇ°Ãæ9msμÄμíμçƽ1yè¥&&& & & & & & & &
& & & & & & & & {& & & & & & & & & & & &
& & & & & & & & & & & & DelayMs(1);
& & & & & & & & & & & & err--;
& & & & & & & & }
& & & & & & & & if(IRIN==1)& & & & & & & & & & & & //èç1ûÕyè·μèμ½9msμíμçƽ
& & & & & & & & {
& & & & & & & & & & & & err=500;
& & & & & & & & & & & & while((IRIN==1)&&(err&0))& & & & & & & &&&//μè′y4.5msμÄÆe꼸ßμçƽ1yè¥
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & DelayMs(1);
& & & & & & & & & & & & & & & & err--;
& & & & & & & & & & & & }
& & & & & & & & & & & & for(k=0;k&4;k++)& & & & & & & & //12óD4×éêy¾Y
& & & & & & & & & & & & {& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & for(j=0;j&8;j++)& & & & //½óêÕò»×éêy¾Y
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & err=60;& & & & & & & &
& & & & & & & & & & & & & & & & & & & & while((IRIN==0)&&(err&0))//μè′yDÅoÅÇ°ÃæμÄ560usμíμçƽ1yè¥
//& & & & & & & & & & & & & & & & & & & & while (!IRIN)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & DelayMs(1);
& & & & & & & & & & & & & & & & & & & & & & & & err--;
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & err=500;
& & & & & & & & & & & & & & & & & & & & while((IRIN==1)&&(err&0))& & & &&&//¼ÆËã¸ßμçƽμÄê±¼ä3¤¶è¡£
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & DelayMs(1);//0.14ms
& & & & & & & & & & & & & & & & & & & & & & & & Time++;
& & & & & & & & & & & & & & & & & & & & & & & & err--;
& & & & & & & & & & & & & & & & & & & & & & & & if(Time&30)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & EX0=1;
& & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & IrValue[k]&&=1;& & & &&&//k±íê¾μú¼¸×éêy¾Y
& & & & & & & & & & & & & & & & & & & & if(Time&=8)& & & & & & & & & & & & //èç1û¸ßμçƽ3öÏÖ′óóú565us£¬ÄÇÃ′êÇ1
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & IrValue[k]|=0x80;
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & Time=0;& & & & & & & & //óÃíêê±¼äòaÖØD¸3Öμ& & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & if(IrValue[2]!=~IrValue[3])
& & & & & & & & {
& & & & & & & & & & & &
& & & & & & & & }
& & & & }& & & & & & & & & & & &
回帖助人的奖励!
红外解码出来,改一下主程序
void main()
& && &&&IrInit();& && &&&
& && &&&while(1)
& && &&&{& && &
& && && && && & if(( IrValue[0] == 0x0 )&&( IrValue[1] == 0xff )&&( IrValue[2] == 0x45 ) )
& && && && && & LED1 = !LED1;& && &&&
共享资料的积分奖励!
kan kan!!!!!!!!!
在主函数里换成switch
switch(IrValue[2])
& & & & & & & & {
& & & & & & & & //& & & & case 0x45: LED=0 ;
& & & & & & & & //& & & & case 0x46:LED1=0;
& & & & & & & & //& & & & case 0x47: KED2=0;
& & & & & & & & //& & & & case 0x08: YOUZHUAN;
& & & & & & & & //& & & & case 0x04: STOP ;& &
& & & & & & & & & & & & case 0x02: xzqianjin();//电视遥控器键值
& & & & & & & & & & & & case 0x0a: xzhoutui()&&;//电视遥控器键值
& & & & & & & & & & & & case 0x07: xzzuozhuan();//电视遥控器键值
& & & & & & & & & & & & case 0x05: xzyouzhuan();//电视遥控器键值
& & & & & & & & & & & & case 0x06: tingsha();&&//电视遥控器键值
& & & & & & & & & & & & case 0x18: tingsha();&&
& & & & & & & & & & & & case 0x17: shoushen();
& & & & & & & & & & & & case 0x14: shouzhua();
& & & & & & & & & & & & case 0x16: wanzuo();& &
& & & & & & & & & & & & case 0x13: wanyou();& &
& & & & & & & & & & & & case 0x15: zhoushang();
& & & & & & & & & & & & case 0x12: zhouxia();&&
& & & & & & & & & & & & case 0x11: zhouzuo();&&
& & & & & & & & & & & & case 0x1a: zhouyou();&&
& & & & & & & & & & & & case 0x10: jianqian();
& & & & & & & & & & & & case 0x0e: jianhou();&&
& & & & & & & & & & & & case 0x0f: jianshang();
& & & & & & & & & & & & case 0x19: jianxia();&&
& & & & & & & &
& & & & & & & &
& & & & & & & & & & & & default:
& & & & & & & & }& & & & 复制代码
学习了,,谢谢大家的分享和意见了。。。
#在这里快速回复##include&reg52.h& #define uchar unsigned char #define uint unsigned int sbit ir=P3^2; //红外线一体接收器的接口 sbit led=P2^1;//此处写led灯的连接IO口 unsigned int timer1;&& uchar irdata[33]; uchar ircode[4]; void delay(uchar x); void timer0init(void) //256*(1/12m)*12=0.256ms { & & & & TMOD=0x02;&&& & & & TH0=0x00;&&& & & & TL0=0x00; & & & & ET0=1; & & & & EA=1; & & & & TR0=1; } void irpros(void) // 红外码值处理 { & & & & uchar mun,k,i,j; & & & & k=1; & & & & for(j=0;j&4;j++) & & & & { & & & & & & & & for(i=0;i&8;i++) & & & & & & & & { & & & & & & & & & & & & mun=mun&&1; & & & & & & & & & & & & if(irdata[k]&6) & & & & & & & & & & & & { & & & & & & & & & & & & & & & & mun=mun | 0x80; & & & & & & & & & & & & } & & & & & & & & & & & & & & & & k++; & & & & & & & & } & & & & & & & & ircode[j]= & & & & } & & & & irprosok=1; } void delay(uchar x) { & & & & uchar a,b; & & & & for(a=x;a&0;a--) & & & & & & & & for(b=200;b&0;b--); } void int0init(void) {&&IT0=1;&&EX0=1;&&EA=1; } void main() { & & & & timer0init(); & & & & int0init(); & & & & while(1) & & & & { & & & & & & & & if(irok==1) & & & & & & & & { & & & & & & & & & & & & irpros(); & & & & & & & & & & & & irok=0; & & & & & & & & } & & & & & & & &&&if(ircode[2]==0x08) & & & & & & & &&&{ & & & & & & & && &&&led=! & & & & & & & & }& & & && && & & & }& & & & & & & &&&} void int0 () interrupt 0&&{ if(startflag)&&{& &if(irtime&32&&irtime&63)& && & & & { & & & && & bitnum=0; & & & & } & & & & irdata[bitnum]= & & & & irtime=0; & & & & bitnum++; & & & & if(bitnum==33) & & & && &{ & & & && & bitnum=0; & & & && & irok=1; & & & && &}&&} else&&{&&irtime=0;&&startflag=1;&&} }&&void timer0 () interrupt 1 { & & & & irtime++; }
/*-----------------------------------------------
&&名称:遥控器红外控制继电器
&&内容:三种遥控器控制两个继电器
------------------------------------------------*/
#include&reg52.h&& & //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit IR=P3^2;&&//红外接口标志
sbit jd1=P1^0;
sbit jd2=P1^1;
/*----------------------------------------------
& && && && && & 全局变量声明
------------------------------------------------*/
unsigned char&&//红外用全局变量
bit irpro_ok,
unsigned char IRcord[4];
unsigned char irdata[33];
/*------------------------------------------------
& && && && && && &函数声明
------------------------------------------------*/
void Ir_work(void);
void Ircordpro(void);
/*------------------------------------------------
& && && && && && &定时器0中断处理
------------------------------------------------*/
void tim0_isr (void) interrupt 1 using 1
{
&&irtime++;&&//用于计数2个下降沿之间的时间
}
/*------------------------------------------------
& && && && && && &外部中断0中断处理
------------------------------------------------*/
void EX0_ISR (void) interrupt 0 //外部中断0服务函数
{
&&static unsigned char&&i;& && && && & //接收红外信号处理
&&& && && && && & //是否开始处理标志位
if(startflag)& && && && && && && && &
& &{
& & if(irtime&63&&irtime&=33)//引导码 TC9012的头码,9ms+4.5ms
& && && && && && && && &i=0;
& & & & & & & & & & irdata[i]=//存储每个电平的持续时间,用于以后判断是0还是1
& & & & & & & & & & irtime=0;
& & & & & & & & & & i++;
& && & & & & & & & & & & &&&if(i==33)
& && && & & & & & & & & & & & {
& & & && && & & & & & & & & & & &&&irok=1;
& & & & & & & & & & & & & & & &&&i=0;
& & & && && & & & & & & & & & & & }
& && && & }
&&& & & &&&else
& & & & & & & & {
& & & & & & & & irtime=0;
& & & & & & & & startflag=1;
& & & & & & & & }
/*------------------------------------------------
& && && && && & 定时器0初始化
------------------------------------------------*/
void TIM0init(void)//定时器0初始化
{
&&TMOD=0x02;//定时器0工作方式2,TH0是重装值,TL0是初值
&&TH0=0x00; //重载值
&&TL0=0x00; //初始化值
&&ET0=1;& & //开中断
&&TR0=1;& &
}
/*------------------------------------------------
& && && && && && &外部中断0初始化
------------------------------------------------*/
void EX0init(void)
{
IT0 = 1;& &//指定外部中断0下降沿触发,INT0 (P3.2)
EX0 = 1;& &//使能外部中断
EA = 1;& & //开总中断
}
/*------------------------------------------------
& && && && && && &键值处理
------------------------------------------------*/
void Ir_work(void)//红外键值散转程序
{
& && & switch(IRcord[3])//判断第三个数码值
& & & && && && & {
& & & & & & & & & & & &&&case 0x53:jd1=0;
& & & & & & & & & & & &&&case 0x5f:jd1=1;
& & & & & & & & & & & &&&case 0x4b:jd2=0;
& & & & & & & & & & & &&&case 0x4f:jd2=1;
& & & & & & & & & & & &&&case 0x9c:jd1=0;
& & & & & & & & & & & &&&case 0x9d:jd1=1;
& & & & & & & & & & & &&&case 0x9a:jd2=0;
& & & & & & & & & & & &&&case 0x98:jd2=1;
& & & & & & & & & & & &&&case 0xbb:jd1=0;
& & & & & & & & & & & &&&case 0xbf:jd1=1;
& & & & & & & & & & & &&&case 0xf8:jd2=0;
& & & & & & & & & & & &&&case 0xea:jd2=1;
& && && && & default:
& & & & & & & & & & & &&&}
& & & & & & & && &irpro_ok=0;//处理完成标志
&&}
/*------------------------------------------------
& && && && && & 红外码值处理
------------------------------------------------*/
void Ircordpro(void)//红外码值处理函数
{
&&unsigned char i, j,
&&unsigned char cord,
&&k=1;
&&for(i=0;i&4;i++)& && &//处理4个字节
& &&&{
& && &for(j=1;j&=8;j++) //处理1个字节8位
& && && &{
& && && & cord=irdata[k];
& && && & if(cord&7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差
& && && && & value|=0x80;
& && && & if(j&8)
& & & & & & & && &&&{
& & & & & & & & & & & &&&value&&=1;
& & & & & & & & & & & & }
& && && &&&k++;
& && && &}
& &&&IRcord[i]=
& &&&value=0;& &&&
& &&&}
& & & &&&irpro_ok=1;//处理完毕标志位置1
}
/*------------------------------------------------
& && && && && && &&&主函数
------------------------------------------------*/
void main(void)
{
EX0init(); //初始化外部中断
TIM0init();//初始化定时器
while(1)//主循环
& &{
& & if(irok)& && && && && && && && &//如果接收好了进行红外处理
& & & && &{& &
& & & && & Ircordpro();
& & & && & irok=0;
& & & && &}
& & if(irpro_ok)& && && && && && & //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
& & & && &{
& & & && & Ir_work();
&&& & & && &}
& &}
}
&&
&&这是我用来控制继电器的,你可以改成控制LED灯。这个程序可以用三种遥控器。你可以用来参考。复制代码
你在KEIL里面仿真时就可以看到按键的值了
程序方面测试可以,前提是12M的晶振,我现在用要的到24M的晶振,请否问下需要如何修改,谢谢
红外解码出来,改一下主程序
void main()
试了,不行
在主函数里换成switch
试了,不行
延时和定时器的值修改一下试试。
试了,不行
证明你的程序没有解码出来,或者是解出来的用户码不相同
网上示例程序 很多的,并且都是有源码
参考一下。不知道用在stc15f104w怎么样
& & & & & & & & & & & & & & & && &/**************************************************************************************
*& & & & & & & && && && && && &红外通信实验& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & && &*
实现现象:& & & & 具体接线操作请参考视频
& & & & & & & & & & & & 下载程序后,数码管显示红外遥控键值数据
注意事项:& & & & 红外遥控模块的短接片J1短接,
& & & & & & & & & & & & 红外遥控器内的电池绝缘片一定要抽掉& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & && &
***************************************************************************************/
#include &reg52.h&& & & & & & & & & & & &&&//此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;& & & && &//对数据类型进行声明定义
typedef unsigned char u8;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
sbit led4=P0^3;
sbit led5=P0^4;
sbit led6=P0^5;
sbit led7=P0^6;
sbit led8=P0^7;
sbit IRIN=P3^2;
u8 IrValue[6];
/*******************************************************************************
* 函 数 名& && && &: delay
* 函数功能& & & & & & & && & : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
& & & & while(i--);& & & &
/*******************************************************************************
* 函数名& && && &:DigDisplay()
* 函数功能& & & & & & & &&&:数码管显示函数
*******************************************************************************/
void DigDisplay()
& & & & u8
& & & & for(i=0;i&8;i++)
& & & & & & & & switch(IrValue[2])& & & &&&//位选,选择点亮的led,
& & & & & & & & {
& & & & & & & & & & & & case(0x16):
& & & & & & & & & & & & & & & & LSA=0;LSB=0;LSC=0;
& & & & & & & & & & & & & & & & led1=0;
& & & & & & & & & & & & & & & &&&//显示第0位
& & & & & & & & & & & & case(0x0c):
& & & & & & & & & & & & & & & & LSA=1;LSB=0;LSC=0;
& & & & & & & & & & & & & & & & led2=0;
& & & & & & & & & & & & & & & &&&//显示第1位
& & & & & & & & & & & & case(0x18):
& & & & & & & & & & & & & & & & LSA=0;LSB=1;LSC=0;
& & & & & & & & & & & & & & & & led3=0;
& & & & & & & & & & & & & & & &&&//显示第2位
& & & & & & & & & & & & case(0x5e):
& & & & & & & & & & & & & & & & LSA=1;LSB=1;LSC=0;
& & & & & & & & & & & & & & & & led4=0;
& & & & & & & & & & & & & & & &//显示第3位;
& & & & & & & & & & & & case(0x08):
& & & & & & & & & & & & & & & & LSA=0;LSB=0;LSC=1;
& & & & & & & & & & & & & & & & led5=0;
& & & & & & & & & & & & & & & &&&//显示第四位;
& & & & & & & & & & & & case(0x1c):
& & & & & & & & & & & & & & & & LSA=1;LSB=0;LSC=1;
& & & & & & & & & & & & & & & & led6=0;
& & & & & & & & & & & & & & & &&&//显示第五位;
& & & & & & & & & & & & case(0x5a):
& & & & & & & & & & & & & & & & LSA=0;LSB=1;LSC=1;
& & & & & & & & & & & & & & & & led7=0;
& & & & & & & & & & & & & & & &//显示第六位;
& & & & & & & & & & & & case(0x42):
& & & & & & & & & & & & & & & & LSA=1;LSB=1;LSC=1;
& & & & & & & & & & & & & & & & led8=0;
& & & & & & & & & & & & & & & &&&//显示第七位
& & & & & & & & }
& & & & & & & & delay(100); //间隔一段时间扫描& & & &
& & & & }& & & & & & & &
/*******************************************************************************
* 函数名& && && &: IrInit()
* 函数功能& & & & & & & && & : 初始化红外线接收
void IrInit()
& & & & IT0=1;//下降沿触发
& & & & EX0=1;//打开中断0允许
& & & & EA=1;& & & & //打开总中断
& & & & IRIN=1;//初始化端口
/*******************************************************************************
* 函 数 名& && & : main
* 函数功能& & & & & & & &&&: 主函数
*******************************************************************************/
void main()
& & & & IrInit();
& & & & while(1)
& & & & {& & & &
& & & && &&&DigDisplay();//利用人眼的视觉暂留效应,其实是动态显示,只不过刷新时间太快& & & & & & & &
& & & & }& & & & & & & &
/*******************************************************************************
* 函数名& && && &: ReadIr()
* 函数功能& & & & & & & && & : 读取红外数值的中断函数
*******************************************************************************/
void ReadIr() interrupt 0
& & & & u8 j,k;
& & & & u16
& & & & Time=0;& & & & & & & & & & & & & & & & & & & &&&
& & & & delay(700);& & & & //7ms
& & & & if(IRIN==0)& & & & & & & & //确认是否真的接收到正确的信号
& & & & {& & & &&&
& & & & & & & &
& & & & & & & & err=1000;& & & & & & & & & & & & & & & & //1000*10us=10ms,超过说明接收到错误的信号
& & & & & & & & /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时
& & & & & & & & 侯,程序死在这里*/& & & &
& & & & & & & & while((IRIN==0)&&(err&0))& & & & //等待前面9ms的低电平过去&&& & & & & & & &
& & & & & & & & {& & & & & & & & & & & &
& & & & & & & & & & & & delay(1);
& & & & & & & & & & & & err--;
& & & & & & & & }
& & & & & & & & if(IRIN==1)& & & & & & & & & & & & //如果正确等到9ms低电平
& & & & & & & & {
& & & & & & & & & & & & err=500;
& & & & & & & & & & & & while((IRIN==1)&&(err&0))& & & & & & & &&&//等待4.5ms的起始高电平过去
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & delay(1);
& & & & & & & & & & & & & & & & err--;
& & & & & & & & & & & & }
& & & & & & & & & & & & for(k=0;k&4;k++)& & & & & & & & //共有4组数据
& & & & & & & & & & & & {& & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & for(j=0;j&8;j++)& & & & //接收一组数据//总共32位数据4个字节
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & err=60;& & & & & & & &
& & & & & & & & & & & & & & & & & & & & while((IRIN==0)&&(err&0))//等待信号前面的560us低电平过去
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & delay(1);
& & & & & & & & & & & & & & & & & & & & & & & & err--;
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & err=500;
& & & & & & & & & & & & & & & & & & & & while((IRIN==1)&&(err&0))& & & &&&//计算高电平的时间长度。//重点
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & delay(10);& & & &&&//0.1ms
& & & & & & & & & & & & & & & & & & & & & & & & Time++;
& & & & & & & & & & & & & & & & & & & & & & & & err--;
& & & & & & & & & & & & & & & & & & & & & & & & if(Time&30)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & IrValue[k]&&=1;& & & &&&//k表示第几组数据
& & & & & & & & & & & & & & & & & & & & if(Time&=8)& & & & & & & & & & & & //如果高电平出现大于565us,那么是1
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & IrValue[k]|=0x80;//是或的关系,数据从高位到低位读取和0或完成保存在数组里面
& & & & & & & & & & & & & & & & & & & & }& && && && && && && && && && && && & //&&&&比如和或完保存& && &
& & & & & & & & & & & & & & & & & & & & Time=0;& & & & & & & & //用完时间要重新赋值& & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & if(IrValue[2]!=~IrValue[3])
& & & & & & & & {
& & & & & & & & & & & &
& & & & & & & & }
& & & & }& & & & & & & & & & & &
修改的不完美,但是基本可以用,就是只能按一下,灭一个led,按完led全灭了,不能实现按两下led重新亮
Powered by

我要回帖

更多关于 电灯遥控开关怎么接线 的文章

 

随机推荐