红外线遥控码单片机测试程序

发布者:Meiren520最新更新时间:2015-07-20 来源: 51hei关键字:红外线遥控码  单片机  测试程序 手机看文章 扫描二维码
随时随地手机看文章
以前在仕创时,总是奇怪 周工为什么可以编出一个能测试任何遥控的遥控码 和用户码的单片机程序!周工还将此程序视为宝贝,每次测试完都将那只已经烧录好的单片机拿回去!!在这几年 本人也接触单片机,尝试写出测试遥控码的程序!!但只是能测试出遥控码 并未能测试出用户码!!!所以当时周工还是相当厉害的!!

       下面放出刚刚编录完成的程序,暂时只能测试遥控码!!
       下载地址:http://www.51hei.com/f/hw51d.rar


测试遥控码(家里电视机待机按键遥控码):

 
 程序是由C语言编写,单片机使用AT89C52       下面是程序:
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

#defineNop(){_nop_(); _nop_(); _nop_(); _nop_(); _nop_();}

volatile ulong IRcode=0x00000000;  
volatile ulong Irdcode=0x00000000;
volatile uint customcode=0x0000;  
volatile uint time_us=0x0000;  

volatile uchar timeH,timeL;  

uchar Lcustomcode;  
uchar Hcustomcode;  
uchar datacode;  
uchar mycode;
uchar Rdatacode;  
uchar uc1ms;
uchar uc10ms;
uchar uc3ms;

uchar ucDispTime;
uchar ucDispOrder;
uchar ucDispCon;
uchar ucSpeakerTime;
unsigned char code LedData[16] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
unsigned char code LedCon[2] = {0x8f,0x4f};
unsigned char ucDispData[2]; 
sbit led1 = P3^7;
sbit led2 = P3^6;
sbit power=P1^0;  
sbit BEEP= P2^1;
bit NewIRcode=0;  
bit DataRight=0;  
bit bSampleOk;
bit bSampling;
bit b10msInt;
bit b1msInt;
bit bKeySound;
bit b1msMain;
bit IR_E;  
bit b3msint;

void SendDataToDispDevice();
void Ir_process();
void display();
void beeping();

void init()

  IP=0x09;  
  TMOD=0x11; 
  TCON=0x01; 
  TH0=0xff;  
TL0=0x47;
  TH1=0x00;  
TL1=0x00;

  EA=1;  
  ET0=1;  
  ET1=1;  
  EX0=1;  
TR1=0;
TR0=1;

}

void TimeProg(void)

b1msMain = b1msInt;
b1msMain=0;
b10msInt = 0;


if(b1msInt == 1)

b1msMain=1;
if(++uc10ms == 10)
{
uc10ms = 0;
b10msInt = 1;
if(bKeySound==1)
{beeping();
bKeySound=0;
}
}

}
}//void TimeProg(void)

void IR_ISR() interrupt 0 using 1 
{
static uchar cn;

TR1=0;
timeH=TH1;
timeL=TL1;
TH1=0;
TL1=0;
  TR1=1;  

time_us=(unsigned int)timeH;
time_us=time_us<<8;
time_us=time_us|timeL;

  if(time_us>12200&&time_us<13000) {cn=1;IRcode=0;}  
if(cn<34)
{
if(time_us>950&&time_us<1120) //0
{
IRcode=IRcode|0x00000000;
if(cn<33) IRcode=IRcode>>1;
}

else if(time_us>1920&&time_us<2120) //1t > 1950 && t < 2150

IRcode=IRcode|0x80000000;
if(cn<33) IRcode=IRcode>>1;
}


  //else if(time_us>10000&&time_us<11000) {Irdcode=IRcode;cn=34; }  
    }
cn++;
if(cn==34) 
{ NewIRcode=1;
TR1=0; 

Irdcode= IRcode; cn=0; 
 }  

}
[page]

void Timer0_ISR() interrupt 1 using 2  
{
TR0=0;
  TH0=0xff;  
TL0=0x47;
TR0=1;
if(++uc1ms == 5)
{
uc1ms = 0;
b1msInt=1;
if(++uc3ms==8)
{
uc3ms=0;
b3msint=1;
  SendDataToDispDevice();
}


}
}//void Timer0IntProg() interrupt 1 using 1

void Timer1_ISR() interrupt 3 using 3  

TR1=0;
  TH1=0x00;  
TL1=0x00;
TR1=1;

}
void SendDataToDispDevice()
{
unsigned char n;
//watchdog();
 if(++ucDispOrder >= 2) ucDispOrder = 0; 
 
if(ucDispOrder==0) 
{led1=0;
led2=1;
Nop();
Nop();

}
if(b3msint==1)
{if(ucDispOrder==1) 
{led2=0;
led1=1;
Nop();
Nop();
}
}
  n = LedData[ucDispData[ucDispOrder]];
P0=n;



} //void SendDataToDispDevice()

void main()
{

init();
beeping();
while(1)
{
TimeProg();
Ir_process();
display(); 

}

}

void Ir_process()

{

  if(NewIRcode==1)
{
  NewIRcode=0; 
  customcode=(Irdcode>>16);  
     Lcustomcode=customcode>>8;
  datacode=(unsigned char)(customcode&0x00ff);  


  Rdatacode=Lcustomcode;  

if(~Rdatacode!=datacode) 
{ DataRight=0;
Irdcode=0;
datacode=Rdatacode=0;
  } 

else 
{ DataRight=1;
IR_E=1;
mycode=datacode;}
if(DataRight==1) { bKeySound = 1;DataRight=0; }

}



}

void display()
{
/* unsigned char a[2];
a[0] = mycode & 0x0f;
mycode = mycode >> 4;
a[1] = mycode & 0x0f;
ET0 = 0;
ucDispData[0] = a[0];
ucDispData[1] = a[1];
ET0 = 1;*/
if(IR_E==1)
{
ET0 = 0;
ucDispData[0] = mycode & 0x0f;
mycode = mycode >> 4;
ucDispData[1] = mycode & 0x0f;
IR_E=0;
ET0 = 1;
}
}

void delay(unsigned char x) //x*0.14MS
{
unsigned char a;
while(x--)
{
for (a = 0; a<13; a++) {;}
}
}


/**********************************************************/
void beeping()
{
unsigned char i;

for (i=0;i<100;i++)
{
delay(4);
  BEEP=!BEEP;  

BEEP=1;
   }

关键字:红外线遥控码  单片机  测试程序 引用地址:红外线遥控码单片机测试程序

上一篇:51单片机PWM细分控制步进电机的研究初稿
下一篇:原创作品LED流星雨灯(51单片机程序代码)产品分享!

推荐阅读最新更新时间:2024-03-16 14:25

大学生赛车手齐聚奥运馆 智取瑞萨MCU车王桂冠
比赛赛道不到决赛最后一刻亮相,都是“最高机密”;参赛选手不仅是能修车的组装高手,还是擅长编程的万能程序员;比赛现场的惊险程度不亚于真实的山地竞技、沙漠越野。11月14日,这场针对大学生的高水平“极品飞车”——2010瑞萨超级MCU模型车大赛在中国农业大学奥运馆开赛,170支参赛队激烈角逐后,来自华中科技大学的华中科技大学一队以23秒01的成绩蝉联冠军,摘得了本年度的“车王”桂冠。 作为我国规模最大的大学生技能活动——“全国大学生IT&AT技能大赛”的系列赛事之一,瑞萨超级MCU模型车大赛由教育部教育管理信息中心主办,赛迪顾问承办,整个大赛得到了全球领先的半导体供应商日本瑞萨电子株式会社及在华全资子公司瑞萨电子(中国
[单片机]
采用C51与插拔式FLASH闪存设计无纸记录仪
  ATMEL公司推出的带有看门狗功能的单片机AT89C55WD带有20K的程序存储器,是8051系列中一款较为先进的产品,其看门狗功能可以大大提高产品的稳定性,大容量的内部程序存储器可以容纳功能丰富的软件。   以往的许多无纸记录仪均采用3.5英寸软盘作为数据存贮介质,但软盘存贮的可靠性差、存储容量有限、成本较高等诸多缺点实在难以克服。   作为一种高科技的非易失性存储设备,FLASH闪存首先在数码相机、PDA、移动电话等数字产品当中得到了应用,随着工艺的进步和价格的下降,逐步向其他应用领域扩展,其容量大、功耗低、速度快、不易受损等优点正受到人们越来越多的青睐,而且最大的好处是,随着技术水平的进步,FLASH闪存的容量也在不断
[测试测量]
51mcu模拟ps2键盘发送数据
这个是程序是来自我以前开发的一个项目,其中里面的的void ps_send(uchar x) 这个函数,便可实现向电脑发送按键的数据 你只要对照 ps2 扫描码的表填入适当的参数即可 #include "STC89C51.H" #include"keyboard.h" #include INTRINS.H #define nop() _nop_() uchar *receive_buf;//接收来自计算机的数据 //uchar key; unsigned char key_buf ; /******延时子程序********/ void delay_ms(uchar a) {uchar i; uchar j; for(j=0;j
[单片机]
瑞萨电子宣布将全面支持面向未来汽车级MCU和SoC的ISO/SAE 21434标准
网络安全管理系统更新确保贯穿产品生命周期的整体网络安全 全球半导体解决方案供应商瑞萨电子集团(TSE:6723)今日宣布,自2022年1月起的新开发项目中,瑞萨的汽车级微控制器(MCU)和片上系统(SoC)解决方案将完全满足ISO/SAE 21434道路车辆网络安全工程国际标准。瑞萨此举秉承公司对汽车网络安全的持续性承诺,旨在建立并实施强大的网络安全管理系统(CSMS),并使其成为联合国欧洲经济委员会(UNECE)新法规 UN R155 的组成部分。 这一承诺还向OEM(original equipment manufacturers,原始设备制造商)和一级供应商重申瑞萨将继续履行其CSMS责任。自2022年1月开始,瑞萨
[汽车电子]
瑞萨电子宣布将全面支持面向未来汽车级<font color='red'>MCU</font>和SoC的ISO/SAE 21434标准
单片机开发中NOR_FLASH的应用
在单片机开发中,NOR_FLASH常用的有4M和8M的大小: 4M的FLASH在程序中可以这样表示:Ptr 0x220000 8M的FLASH在程序中可以这样表示:Ptr 0x400000(最大只能读到0x3fffff) 有了这个关系,在判断NOR_FLASH好坏的方法上我们可以采用计算checksum的方式来校验。 在程序中,我们一般把地址的指针定义为unsigned short *ptr 类型。然后通过指针不断的往后移动可以简引用获取到FLASH中的每一个byte,如果此时定义成unsigned short类型,那么用一个temp变量来接收的话,一次是可以接收到2个byte的数据,如果此时定义成unsign
[单片机]
在<font color='red'>单片机</font>开发中NOR_FLASH的应用
196系列单片机在空调逆变器中的运用
0 引言 随着国内经济的飞速发展,空调车、豪华车也进入了新的发展阶段。空调逆变器是一种新型高效无污染“绿色”能源,其应用前景非常广阔。 SPWM技术是空调逆变器中主要的控制技术,要生成SPWM脉冲常采用两种方法:一是由模拟电路生成;二是由单片机等数字电路生成。前者电路复杂,抗干扰性能差,有温漂现象,系统可靠性和一致性低;数字方法则利用计算机实时计算,这样系统一致性很高,没用温漂现象,同时调试工作量大大降低。INTEL公司推出的16位微处理器N87C196MC/MD是专为电机拖动设置的低成本单片机芯片,片内集成了一个3相波形发生器WFG(Wave Form Generator),这一外设装置大大简化了产生SPWM波形的控制软
[单片机]
【51单片机实验】5-串行接口与键盘接口技术应用
一、实验目的 1.掌握51单片机串行口的应用设计 2.掌握按键的工作原理和消抖动的方法 二、实验设备 1、微机一台,Keil C集成开发环境 2、DP-51PRO.NET综合实验箱 3、Proteus仿真软件 三、实验内容 1、P1接8个按键或拨位开关,P2接8个发光LED,编程实现读入单片机P1状态,通过串行方式1实现自发、自收,并将接收到的内容从P2口的LED显示出来。(注意:TXD(P3.1)和RXD(P3.0)的接线。—实验箱的要求,仿真请忽略) 程序及必要的注释: /*单片机自发自收,将P1口信息传给P2口*/ #include reg51.h void main () { SCON
[单片机]
【51<font color='red'>单片机</font>实验】5-串行接口与键盘接口技术应用
解析8051单片机的三种数据传输方式
单片机CPU与外部设备交换信息通常有如下几种方式:无条件传送方式,查询传送方式和中断传送方式。我们以单片机与微型打印机接口为例讲述这三种方式。假定用户要打印三个数据,这三个数据保存在单片机的内部数据存储器10H,11H,和12H中,8051用并口P2与微型打印机的并行数据口DB进行数据交换。 (1)无条件传送方式 这种数据传送方式中没有联络信号,即CPU总是认为打印机在如何时候都是处于“准备好”的状态。这种传送方式中只需要在程序中加入数据送往P2的指令,数据传送便可以实现。但这种数据传送方式有一个致命弱点,数据易丢失,这是因为CPU的速度相当快,而打印机的速度相对来说较慢,其结果是在打印机打印一个数据的时间内,CPU已送来了多
[单片机]
解析8051<font color='red'>单片机</font>的三种数据传输方式
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved