NEC协议的红外遥控器驱动程序
红外遥控协议标准(NEC RC5)及编程

红外遥控协议标准(NEC/RC5/RC5X)及编程目录1.NEC码遥控器技术标准2.RC5/RC5X码遥控器技术标准3.解码原理及算法(NEC)4.实例代码(NEC)1.NEC码遥控器技术标准特点:8位的系统码和8位的命令码长度为了增加可靠性,地址码(即用户码)和命令码都要发送两次脉冲宽度调制载波频率为38K每一位的时间长度为1.12ms或2.25ms其逻辑1与逻辑0的表示如图所示:逻辑1为2.25ms,脉冲时间560us;逻辑0为1.12ms,脉冲时间560us。
所以我们根据脉冲时间长短来解码。
推荐载波占空比为1/3至1/4。
NEC协议格式:首次发送的是9ms的高电平脉冲,其后是4.5ms的低电平,接下来就是8bit 的地址码(从低有效位开始发),而后是8bit的地址码的反码(主要是用于校验是否出错)。
然后是8bit 的命令码(也是从低有效位开始发),而后也是8bit的命令码的反码。
地址和命令发送两次。
第二次发送时,所有的位取反,用来验证第一次发送的消息。
如果开发者不用验证,则可以忽略验证的数据,或者将地址或命令扩展为16bit以上是一个正常的序列,但可能存在一种情况:你一直按着1个键,这样的话发送的是以110ms为周期的重复码,如下图:就是说,发了一次命令码之后,不会再发送命令码,而是每隔110ms时间,发送一段重复码。
重复码由9ms高电平和2.25ms的低电平以及560us的高电平组成。
需要注意的是:1838红外一体接收头为了提高接受灵敏度。
输入高电平,其输出的是相反的低电平。
2、编程注意事项2.1红外接收头引脚信号是相反的电平。
2. 2数据从LSB(低位)开始发送,所以选择右移方式接收数据。
四个字节的数据都是先发送D0,最后发送D7。
所以接收到1位数据后,给变量的最高位赋值,右移。
或者先右移,再给变量的最高位赋值。
2.3.可以用一个数组保存32个数据的持续时间,用于后面判断高低电平。
用定时器对两个数据(中断)之间的时间计时,并保存这个持续时间用于以后判断是位1还是位0。
红外遥控原理与nec协议介绍

红外遥控原理与nec协议介绍
红外遥控原理与NEC协议介绍
在现代家居中,我们经常使用的电器设备多数都配备了红外遥控功能,这是一种非常方便的控制方式,它使得我们可以在不接触设备的情况下,方便地控制它们的开关、调节等操作。
那么,红外遥控是如何实现的呢?NEC协议又是什么?
红外遥控原理
红外遥控所用的信号是红外线,光波的频率高于红外线的频率,因此红外线是我们肉眼无法看到的。
当我们按下遥控器上的按钮后,遥控器内部的红外LED会发出一个特定频率的光波,这个光波会通过空气传递到电器设备中的红外接收器(IR Receiver)。
红外接收器会将接
收到的光波转化为电信号,并将其传递给设备的中央处理器,中央处理器便会根据接收到的电信号执行相应的操作。
NEC协议介绍
NEC是红外遥控信号最为常用的协议之一,它是由日本NEC公司开发的。
NEC协议采用了脉冲编码调制技术(Pulse Coded Modulation, PCM),将发送的数据进行脉冲编码,以使接收端可以正确地解码。
NEC
协议的传输速率为38kHz,每个数据包由4个字节组成,其中第一个字节表示设备地址,第二个字节表示设备地址的反码,第三个字节表示数据码,第四个字节表示数据码的反码。
NEC协议可以支持多达256个设备地址,因此可以同时控制多个设备。
总结
红外遥控技术在现代家居中得到广泛应用,它是一种方便、快捷的控制方式,使得我们可以在不接触设备的情况下控制它们。
NEC协议是红外遥控信号最为常用的协议之一,它采用了脉冲编码调制技术,能够支持多达256个设备地址,因此能够满足多设备控制的需求。
红外遥控器程序及原理、程序

Data=0;//收到数据 0 }
if(Ok==1) {
hw_jsm<<=1; hw_jsm+=Data;
if(Num>=32)
{ hw_jsbz=1; break }
EXTI_ClearITPendingBit(EXTI_Line15); }
printf_init(); //printf 初始化
while(1)
{
if(hw_jsbz==1) //如果红外接收到
{
hw_jsbz=0;
//清零
printf("红外接收码 %0.8X\r\n",hw_jsm); //打印
hw_jsm=0;
//接收码清零
}
}
}
1.1 红外遥控简介简介 红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低, 成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用 到计算机系统中。 由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,所以,在 设计红外线遥控器时,不必要像无线电遥控器那样,每套(发射器和接收器)要有不同的遥控 频率或编码(否则,就会隔墙控制或干扰邻居的家用电器),所以同类产品的红外线遥控器, 可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。这对于大批量生产以 及在家用电器上普及红外线遥控提供了极大的方面。由于红外线为不可见光,因此对环境影 响很小,再由红外光波动波长远小于无线电波的波长,所以红外线遥控不会影响其他家用电 器,也不会影响临近的无线电设备。 红外遥控的编码目前广泛使用的是: NEC Protocol 的 PWM(脉冲宽度调制)和 Philips RC-5 Protocol 的 PPM(脉冲位置调制)。 普中科技 STM32 开发板配套的遥控器使用的是 NEC 协议,其特征如下: 1、 8 位地址和 8 位指令长度; 2、地址和命令 2 次传输(确保可靠性) 3、 PWM 脉冲位置调制,以发射红外载波的占空比代表“ 0”和“ 1”; 4、载波频率为 38Khz; 5、位时间为 1.125ms 或 2.25ms; NEC 码的位定义:一个脉冲对应 560us 的连续载波,一个逻辑 1 传输需要 2.25ms ( 560us 脉冲+1680us 低电平),一个逻辑 0 的传输需要 1.125ms( 560us 脉冲+560us 低 电平) 。而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样, 我们在接收头端收到的信号为:逻辑 1 应该是 560us 低+1680us 高,逻辑 0 应该是 560us 低+560us 高。 NEC 遥控指令的数据格式为:同步码头、地址码、地址反码、控制码、控制反码。同步 码由一个 9ms 的低电平和一个 4.5ms 的高电平组成,地址码、地址反码、控制码、控制 反 码均是 8 位数据格式。按照低位在前,高位在后的顺序发送。采用反码是为了增加传输的 可靠性(可 用于校验)。 2.数据码格式 数据格式包括了引导码、用户码、数据码和数据码反码,编码总占 32 位。数据反码是数据 码反相后的编码,编码时可用于对数据的纠错。注意:第二段的用户码也可以在遥控应用电 路中被设置成第一段用户码的反码。
nec红外协议

nec红外协议NEC红外协议。
NEC红外协议是一种用于红外遥控器通信的协议标准,广泛应用于家电、电子设备等领域。
它采用了38kHz的载波频率,通过调制不同的脉宽来实现数据的传输,具有传输距离远、抗干扰能力强等优点。
本文将对NEC红外协议的原理、格式、编码方式等进行详细介绍,以便对该协议有更深入的了解。
NEC红外协议的原理是通过调制38kHz的载波信号来传输数据。
在NEC协议中,逻辑“0”和逻辑“1”分别用不同的脉宽来表示,通常逻辑“0”用560us的脉宽表示,而逻辑“1”用1690us的脉宽表示。
通过这种方式,接收端可以根据脉宽的不同来解析出发送端发送的数据,从而实现通信的目的。
NEC红外协议的格式通常包括引导脉冲、地址码、反码、命令码等部分。
其中,引导脉冲是一个9ms的高电平脉冲和4.5ms的低电平脉冲交替组成,用于唤醒接收器;地址码用来表示遥控器的地址信息;反码是地址码的反码,用于提高数据传输的可靠性;命令码用来表示具体的操作命令,比如开关机、音量调节等。
通过这样的格式组织,NEC红外协议可以实现对各种遥控器指令的准确传输。
NEC红外协议的编码方式是采用了32位的编码格式,其中包括8位的地址码、8位的地址反码、8位的命令码和8位的命令反码。
这种编码方式可以保证数据的准确性和可靠性,同时也便于接收端对数据进行解析和识别。
通过这种编码方式,NEC红外协议可以实现对各种遥控器指令的精准传输。
总的来说,NEC红外协议作为一种广泛应用的红外遥控器通信协议,具有传输距离远、抗干扰能力强、编码方式简单等优点。
通过对NEC红外协议的原理、格式、编码方式等方面的介绍,相信读者对该协议有了更深入的了解,可以更好地应用于实际的产品开发和设计中。
总结一下,NEC红外协议在红外遥控器通信领域有着重要的地位,其原理简单明了,格式清晰规范,编码方式可靠性高。
相信随着科技的不断发展,NEC红外协议将会有更广泛的应用和发展。
NEC协议的红外遥控器驱动程序

是不是觉得红外遥控+51单片机是绝妙组合?但是在编程时才发现超级纠结?其实也没那么纠结,自己摸索摸索,总能找出办法来的。
本程序占用了51单片机的定时器0以及中断1两个资源,为的是使单片机能接收到每一个红外脉冲信号,一个都不能少。
如果舍不得用这两个资源,还有另一种查询的办法,就是不一定每个信号都能收到,可自己琢磨一下。
需要全套NEC协议红外遥控器资料的,到网上找,到处都有,而且很全。
另外,对着资料写程序如果实在写不出,可以找个示波器,把波形录下来好好研究研究。
毕竟有些时候资料会过时,只要里面有一点东西变化了,程序就完全不一样了。
这种弯路,尽量少走。
用于NEC按键码8#endif{TH0=0x19;TL0=0x19; //11.0592MHz晶振,计数230次,大概时间250usET0=1;TR0=0;//定时器0使能,先关着IT1=1;EX1=1; //外部中断1使能,用来接收红外信号EA=1; //开总中断}voidnec_act()//按键功能程序{if((nec_dat[0]==~nec_dat[1])&&(nec_flag==3)){switch(nec_dat[0]){case69:break;case70:break;case71:break;case68:break;case64:break;case67:break;case7:break;case21:break;case9:break;}}{{}}{uintintime=0;//intime:为了不打扰计时器工作,所以用intime把nec_time提出来intime=nec_time;nec_time=0;//nec_time置0,准备计数if(nec_num==0)TR0=1;//开定时器,开始计数if(nec_num==1){if((intime>50)&&(intime<60))nec_flag=1;}if(nec_num==2){if((intime>2)&&(intime<11))nec_flag=2;}if(nec_flag==2){if((nec_num>=2)&&(nec_num<=9)){if((intime>2)&&(intime<6))nec_cod[0]=nec_cod[0]&~(0x01<<(nec_num-2));elseif((intime>7)&&(intime<11))nec_cod[0]=nec_cod[0]|(0x01<<(nec_num-2));}if((nec_num>=10)&&(nec_num<=17)){if((intime>2)&&(intime<6))nec_cod[1]=nec_cod[1]&~(0x01<<(nec_num-10));elseif((intime>7)&&(intime<11))nec_cod[1]=nec_cod[1]|(0x01<<(nec_num-10));}if((nec_num>=18)&&(nec_num<=25)){if((intime>2)&&(intime<6))nec_dat[0]=nec_dat[0]&~(0x01<<(nec_num-18));}}。
红外遥控协议分析之:NEC协议

红外遥控编码传输协议生产厂家对红外遥控的编码做了严格的规范,目前国内外主流的红外遥控编码传输协议有十多种,女口 NEC 、Philips RC-5、Philips RC-6、Philips RC-MM 、Philips RECS80、 RCA 、 X-Sat 、ITT 、JVC 、Sharp 、Nokia NRC17 和 Sony SIRC 等。
国内最常用的规范有两种: NEC 和Sony SIRC 。
这两种规范的调制方式分别为: PPM(脉冲间隔调制)和PWM (脉冲宽度调制)。
谈到这两个概念,我需要具体讲解一下,因为我在 网上查阅相关资料时甚是郁闷,好多说法相互矛盾。
有说NEC 属于PWM 的因为它的脉宽 不同,PPM 的脉宽是固定的。
而细心地朋友如果探究到 NEC 的典型芯片的芯片手册时,会发现上面这种说法是错误的。
比如 UPD6121这款红外远程控制芯片的调制方式为PPM 。
后来终于在一家国外的网站上找到了能够自圆其说的解释。
个人认为比较正确,拿来和大家分享。
要想认清红外遥控编码传输协议的具体内容,我想还是先捡其重点来讲一下, 编码规范中最重要的当属调制这部分了。
而主流的调制方式有两种分别为 PPM 和PWM ,当然其他 还有好几种,这里先不讲解,免得糊涂了。
本文就先介绍下 PPM 和PWM 的区别。
PPM ( Pulse Position Modulation),其实更加准确的说法应该是PDM(Pulse DistaneeModulation)即脉冲间隔调制:------ :----- 225ms ------------- ------- 112ms ---- IE33上图为典型编码规范 NEC 协议的调制图,为PPM 调制。
可以看出不管是“0”还是“1 ”, 有高频调制波的地方(下文称其为脉冲)其宽度都是相同的位560us ,而脉冲间的间隔则是不同的:“1”时为(2.25ms-560us),“0”时为(1.12ms-560us)。
红外遥控的程序

/*红外线接收程序,本程序运行在NEC制下的遥控器下,市面上的遥控器大部份都是NEC 制的,运行程序,按遥控器在数码管上显示相应的地址码-控制码(以16进制显示)分四段,前两段是地址码,后两段为控制吗,根据NEC编码不同,有的是前8位为数据码,后8位为数据据码的反码,有的是16位编码,就没有反码了*/#include <reg51.h>#include <intrins.h>sbit spk=P3^4;sbit hwx=P3^3; //定义红外接收脚,code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//共阴数码管0-9 a-f - 表unsigned char I_tmpdate[4]={0,0,0,0};//显示管数据unsigned char flag,tmp;unsigned char I_lhj[66]; //定义66位数组变量来存储接收的时间参数void delay();//延时子函数void display(unsigned char *Ip,unsigned char Ic);//数字的显示函数;lp为指向数组的地址,lc 为显示的个数void main(void) //入口函数{EA=1; //首先开启总中断EX1=1; //开启外部中断1IT1=1; // 设置成下降沿触发方式while(1){ //循环显示,接收都由display(I_tmpdate,4);if (flag==0x2f){I_tmpdate[0]=10;I_tmpdate[1]=10;I_tmpdate[2]=10;I_tmpdate[3]=10;spk=0;}if (flag==0x07){I_tmpdate[0]=1;I_tmpdate[1]=1;I_tmpdate[2]=1;I_tmpdate[3]=1;}if (flag==0x0b){I_tmpdate[0]=2; I_tmpdate[1]=2; I_tmpdate[2]=2; I_tmpdate[3]=2;} if (flag==0x0f) {I_tmpdate[0]=3; I_tmpdate[1]=3; I_tmpdate[2]=3; I_tmpdate[3]=3;}if (flag==0x13) {I_tmpdate[0]=4; I_tmpdate[1]=4; I_tmpdate[2]=4; I_tmpdate[3]=4;}if (flag==0x17) {I_tmpdate[0]=5; I_tmpdate[1]=5; I_tmpdate[2]=5; I_tmpdate[3]=5;}if (flag==0x1b) {I_tmpdate[0]=6; I_tmpdate[1]=6; I_tmpdate[2]=6; I_tmpdate[3]=6;}if (flag==0x5b) {I_tmpdate[0]=0; I_tmpdate[1]=0; I_tmpdate[2]=0; I_tmpdate[3]=0;spk=1;}if (flag==0x1f){I_tmpdate[0]=7;I_tmpdate[1]=7;I_tmpdate[2]=7;I_tmpdate[3]=7;}if (flag==0x23){I_tmpdate[0]=8;I_tmpdate[1]=8;I_tmpdate[2]=8;I_tmpdate[3]=8;}if (flag==0x27){I_tmpdate[0]=9;I_tmpdate[1]=9;I_tmpdate[2]=9;I_tmpdate[3]=9;}}}void display(unsigned char *Ip,unsigned char Ic)//显示{unsigned char i; //定义变量P2=0; //端口2为输出P1=P1&0xF8; //将P1口的前3位输出0,对应138译门输入脚,全0为第一位数码管for(i=0;i<Ic;i++){ //循环显示P2=table[Ip[i]&0x7f]; //查表法得到要显示数字的数码段if(Ip[i]>0x7f)P2+=0x80;delay(); //延时P2=0; //清0端口,准备显示下位if(i==7) //检测显示完8位否,完成直接退出,不让P1口再加1,否则进位影响到第四位数据break;P1++; //下一位数码管}}void delay(void) //空5个指令{unsigned char i=13;while(i)i--;}void hongwai(void) interrupt 2 //外部中断1 ,INT1(P3^3)连接红外线接收IC数据脚{unsigned char i,j,tmp;unsigned int tmp2;EX1=0;// hwx=1;j=33; //传送一组数包括引导码1位,地址码8位加反码8位,指令码8位加反码8位,总共33位i=0; //从第一维数组开始tmp2=0;while(!hwx){ //NEC制红外波形引导码低电平开始tmp2++; //低电平延时记数if(tmp2==1000) //NEC制引导码判断,防止其它干扰波形进入break;}if(tmp2<1000){ //小于1000个记数的判断为干扰退出接收EX1=1;return;}//P2=0x76; //数码管输出显示H,作为红外接收的指示while(j){ //循环接收33位数据,为何我们用到66位数组,我们可以不接收高电平时间常数,只接低电平常数就//可以判断1或0了,在这里我们都接收//还有一点要知道,接收波形是反向,在没有接收时端口为高电平tmp=0;I_lhj[i]=1; //时间量从1开始while(!hwx){ //检测高低电平的变化I_lhj[i]++; //没变继续加1delay(); //加入延时,是因为我们采用8位二进来存储,如果不加延时,时间量将计满tmp++; //此变量为防止干扰带来的死循环if(tmp==250)break;}i++;tmp=0;I_lhj[i]=1; //时间量从1开始while(hwx){ //检测高低电平的变化I_lhj[i]++; //没变继续加1delay(); //同上tmp++;if(tmp==250)break;}i++;j--;}i=255; //加入循环延时,处理数据while(i){tmp=255;while(tmp){P2=0XF0;tmp--;}i--;}tmp=0;//这里显示了全部的四段码,包括地址位两段,控制位两段,每段用点分开for(i=3;i<19;i++,i++){ //处理地址位前8位,这是3是因为去掉前面的引导码。
(合同范本)NEC协议的红外遥控器驱动程序

NEC协议的红外遥控器按键对应数字一览(合同范本)NEC协议的红外遥控器驱动程序是不是觉得红外遥控+51单片机是绝妙组合?但是在编程时才发现超级纠结?其实也没那么纠结,自己摸索摸索,总能找出办法来的。
本程序占用了51单片机的定时器0以及中断1两个资源,为的是使单片机能接收到每一个红外脉冲信号,一个都不能少。
如果舍不得用这两个资源,还有另一种查询的办法,就是不一定每个信号都能收到,可自己琢磨一下。
需要全套NEC协议红外遥控器资料的,到网上找,到处都有,而且很全。
另外,对着资料写程序如果实在写不出,可以找个示波器,把波形录下来好好研究研究。
毕竟有些时候资料会过时,只要里面有一点东西变化了,程序就完全不一样了。
这种弯路,尽量少走。
本程序只是头文件,具体到应用上还要各位自己动脑筋了,希望对大家有所帮助。
共同学习,共同进步!69**************************************************************** INF_NEC.h用于NEC 协议的遥控器,主控器为 51单片机。
用户码8位,分布于2-17个脉冲; 按键码8位,分布于18-33个脉冲。
皆为前8原码,后8反码。
注意:本驱动占用 51单片机的外部中断1以及定时器0两个资源,编程时注意 不要再乱动这两个资源。
***************************************************************** #include<reg52.h> #define uchar unsigned char#define uint unsigned int#ifndef __INF_NEC__#define __INF_NEC__ extern void nec_init();extern void nec_act();#endifvoid nec_init(){TMOD=(TMOD&0xf0)|0x02; // 定时器0模式2, 8位自动重装TH0=0x19;TL0=0x19;ET0=1;TR0=0;IT1=1;EX1=1;EA=1;} void nec_act()//按键功能程序 {if((nec_dat[0]==~nec_dat[1])&&(nec_flag==3)){switch(nec_dat[0]){case 69: break;case 70: break;case 71: break;case 68:break;case 64:break;case 67:break;case 7:break;case 21:break;/****/uchar nec_flag=0;//nec_flag:遥控码的标志位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
是不是觉得红外遥控+51单片机是绝妙组合?但是在编程时才发现超级纠结?其实也没那么纠结,自己摸索摸索,总能找出办法来的。
本程序占用了51单片机的定时器0以及中断1两个资源,为的是使单片机能接收到每一个红外脉冲信号,一个都不能少。
如果舍不得用这两个资源,还有另一种查询的办法,就是不一定每个信号都能收到,可自己琢磨一下。
需要全套NEC协议红外遥控器资料的,到网上找,到处都有,而且很全。
另外,对着资料写程序如果实在写不出,可以找个示波器,把波形录下来好好研究研究。
毕竟有些时候资料会过时,只要里面有一点东西变化了,程序就完全不一样了。
这种弯路,尽量少走。
本程序只是头文件,具体到应用上还要各位自己动脑筋了,希望对大家有所帮助。
共同学习,共同进步!
/******************************************************************
INF_NEC.h
用于NEC协议的遥控器,主控器为51单片机。
用户码8位,分布于2-17个脉冲;
按键码8位,分布于18-33个脉冲。
皆为前8原码,后8反码。
注意:本驱动占用51单片机的外部中断1以及定时器0两个资源,编程时注意
不要再乱动这两个资源。
*******************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar nec_flag=0;//nec_flag:遥控码的标志位。
0:无信号;1、2:信号采集;3、可用信号uchar nec_num=0;//nec_num:红外码的序号
uint nec_time=0;//nec_time:定时器的计时次数nec_time*250us
uchar nec_cod[2]={0,1};//遥控器的编号,编号0为原码,编号1为反码
uchar nec_dat[2]={0,1};//遥控器的数据,数据0为原码,数据1为反码
#ifndef __INF_NEC__
#define __INF_NEC__
extern void nec_init();
extern void nec_act();
#endif
void nec_init() //外中断1及定时器0的初始化函数
{
TMOD=(TMOD&0xf0)|0x02; //定时器0模式2,8位自动重装
TH0=0x19;
TL0=0x19; //11.0592MHz晶振,计数230次,大概时间250us
ET0=1;TR0=0; //定时器0使能,先关着
IT1=1;EX1=1; //外部中断1使能,用来接收红外信号
EA=1; //开总中断
}
void nec_act()//按键功能程序
{
if((nec_dat[0]==~nec_dat[1])&&(nec_flag==3))
{
switch(nec_dat[0])
{
case 69: break;
case 70: break;
case 71: break;
case 68:break;
case 64:break;
case 67:break;
case 7:break;
case 21:break;
case 9:break;
case 22:break;
case 25:break;
case 13:break;
case 12:break;
case 24:break;
case 94:break;
case 8:break;
case 28:break;
case 90:break;
case 66:break;
case 82:break;
case 74:break;
}
}
}
void timer0(void) interrupt 1
{
nec_time++;
if(nec_time>1000)//长时间无红外遥控信号时关定时器
{
nec_time=0;nec_num=0;nec_flag=0;TR0=0;
}
}
void exint1(void) interrupt 2
{
uint intime=0;//intime:为了不打扰计时器工作,所以用intime把nec_time提出来intime=nec_time;nec_time=0;//nec_time置0,准备计数
if(nec_num==0)TR0=1;//开定时器,开始计数
if(nec_num==1){if((intime>50)&&(intime<60))nec_flag=1;}
if(nec_num==2){if((intime>2)&&(intime<11))nec_flag=2;}
if(nec_flag==2)
{
if((nec_num>=2)&&(nec_num<=9))
{
if((intime>2)&&(intime<6))nec_cod[0]=nec_cod[0]&~(0x01<<(nec_num-2));
else if((intime>7)&&(intime<11))nec_cod[0]=nec_cod[0]|(0x01<<(nec_num-2));
}
if((nec_num>=10)&&(nec_num<=17))
{
if((intime>2)&&(intime<6))nec_cod[1]=nec_cod[1]&~(0x01<<(nec_num-10));
else if((intime>7)&&(intime<11))nec_cod[1]=nec_cod[1]|(0x01<<(nec_num-10));
}
if((nec_num>=18)&&(nec_num<=25))
{
if((intime>2)&&(intime<6))nec_dat[0]=nec_dat[0]&~(0x01<<(nec_num-18));
else if((intime>7)&&(intime<11))nec_dat[0]=nec_dat[0]|(0x01<<(nec_num-18));
}
if((nec_num>=26)&&(nec_num<=33))
{
if((intime>2)&&(intime<6))nec_dat[1]=nec_dat[1]&~(0x01<<(nec_num-26));
else if((intime>7)&&(intime<11))nec_dat[1]=nec_dat[1]|(0x01<<(nec_num-26));
}
}
nec_num++;if(nec_num>35){nec_num=35;nec_flag=3;}
}
如有侵权请联系告知删除,感谢你们的配合!
如有侵权请联系告知删除,感谢你们的配合!。