《红外线遥控解码接收程序-C语言123》由会员分享,可在线阅读,更多相关《红外线遥控解码接收程序-C语言123(9页珍藏版)》请在金锄头文库上搜索。
1、红外线遥控解码接收程序-C 语言#include #define uchar unsigned char #define uint unsigned int #define IR_RE P3_2 bit k=0; /红外解码判断标志位,为0 则为有效信号,为1则为无效uchar date4=0,0,0,0; /date 数组为存放地址原码,反码,数据原码,反码/*-延时 1ms 程子程序 -*/ delay1000() uchar i,j; i=5; doj=95; doj-; while(j); i-; while(i); /*-延时 882us 子程序 -*/ delay882() uch
2、ar i,j; i=6; doj=71; doj-; while(j); i-; while(i); /*-延时 2400us程子程序 -*/ delay2400() uchar i,j; i=5; doj=237; doj-; while(j); i-; while(i); /* /* /*-*/ /*-红外解码程序(核心 )-*/ /*-*/ void IR_decode() uchar i,j; while(IR_RE=0); delay2400(); if(IR_RE=1) /延时 2.4ms 后如果是高电平则是新码 delay1000(); delay1000(); for(i=0;
3、i=1; datei=datei|0x00; else if(IR_RE=1) delay1000(); datei=1; datei=datei|0x80; /1 位数据接收结束 /32 位二进制码接收结束 /* /* /*-外部中断0 程序 -*/ /*-主要用于处理红外遥控键值-*/ void int0() interrupt 0 uchar i; k=0; EX0=0; /检测到有效信号关中断,防止干扰for(i=0;i里的评论有很好的诠释. 以上程序段可以应用在51/52 单片机里 .下面的程序可以应用在STC12C5410/STC12C2052 型号的单片机里面. /在 STC12
4、C5410 上运用红外线解码程序.主要的问题在于延迟上。#include #define uchar unsigned char #define uint unsigned int #define IR_RE P3_2 bit k=0; /红外解码判断标志位,为0 则为有效信号,为1则为无效uchar date4=0,0,0,0; /date 数组为存放地 址原码,反码,数据原码,反码/*-延时 1ms 程子程序 -*/ delay1000() uchar i,j; i=200; doj=13; doj-; while(j); i-; while(i); /* /*-延时 882us 子程序
5、-*/ delay882() uchar i,j; i=84; doj=30; doj-; while(j); i-; while(i); /*-延时 2400us程子程序 -*/ delay2400() uchar i,j; i=200; doj=34; doj-; while(j); i-; while(i); /* /* /*-*/ /*-红外解码程序(核心 )-*/ /*-*/ void IR_decode() uchar i,j; while(IR_RE=0); delay2400(); if(IR_RE=1) /延时 2.4ms 后如果是高电平则是新码 delay1000(); d
6、elay1000(); for(i=0;i=1; datei=datei|0x00; else if(IR_RE=1) delay1000(); datei=1; datei=datei|0x80; /1 位数据接收结束 /32 位二进制码接收结束 /* /* /*-外部中断0 程序 -*/ /*-主要用于处理红外遥控键值-*/ void int0() interrupt 0 uchar i; k=0; EX0=0; /检测到有效信号关中 断,防止干扰for(i=0;i #define uchar unsigned char #define uint unsigned int #define
7、IR_RE P3_2 bit k=0; /红外解码判断标志位,为 0 则为有效信号,为1 则为无效uchar date4=0,0,0,0; /date 数组为存放地址原码,反码,数据原码,反码/*-延时 1ms 程子程序 -*/ delay1000() uchar i,j; i=5; doj=95; doj-; while(j); i-; while(i); /*-延时 882us 子程序 -*/ delay882() uchar i,j; i=6; doj=71; doj-; while(j); i-; while(i); /*-延时 2400us程子程序 -*/ delay2400() u
8、char i,j; i=5; doj=237; doj-; while(j); i-; while(i); /* /* /*-*/ /*-红外解码程序(核心 )-*/ /*-*/ void IR_decode() uchar i,j; while(IR_RE=0); delay2400(); if(IR_RE=1) /延时 2.4ms 后如果是高电平则是新码 delay1000(); delay1000(); for(i=0;i=1; datei=datei|0x00; else if(IR_RE=1) delay1000(); datei=1; datei=datei|0x80; /1 位数据接收结束 /32 位二进制码接收结束 /* /* /*-主要用于处理红外遥控键值-*/ void jiema() uchar i; k=0; for(i=0;i8;i+) delay1000(); if(IR_RE=1) /刚开始为9ms 的引导码 . k=1; break; if(k=0) IR_decode(); /如果接收到的是有效信号,则调用解码程序P0=date3; delay2400(); delay2400(); delay2400(); /* /* void main() SP=0x60; /堆栈指针while(1) while(IR_RE=0) jiema(); /*