急求红外发射与解码的c程序

作者&投稿:人璐 (若有异议请与网页底部的电邮联系)
51单片机红外解码C程序~

单片机采用外部中断P3.3管脚和红外接收头的信号线相连,中断方式为边沿触发方式。并用定时器0计算中断的间隔时间,来区分前导码、二进制的“1”、“0”码。并将8位操作码提取出来在数码管上显示。
// 解码值在Im[2]中,当IrOK=1时解码有效。 
/* 51单片机红外遥控解码程序 */
//用遥控器对准红外接收头,按下遥控器按键,在数码管前两位上就会显示对应按键的编码
#include
#define uchar unsigned char 
sbit dula=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar f;
#define Imax 14000    //此处为晶振为11.0592时的取值, 
#define Imin 8000    //如用其它频率的晶振时,
#define Inum1 1450    //要改变相应的取值。
#define Inum2 700 
#define Inum3 3000
unsigned char Im[4]={0x00,0x00,0x00,0x00};
uchar show[2]={0,0};
unsigned long m,Tc;
unsigned char IrOK;
void delay(uchar i)
{
  uchar j,k; 
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
void display()
{
   dula=0;
   P0=table[show[0]];
   dula=1;
   dula=0;
   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(5);
   P0=table[show[1]];
   dula=1;
   dula=0;
   P0=0xfd;
   wela=1;
   wela=0;
   delay(5);
} //外部中断解码程序
void intersvr1(void) interrupt 2 using 1
{
 Tc=TH0*256+TL0;                                               //提取中断时间间隔时长
 TH0=0; 
    TL0=0;              //定时中断重新置零
 if((Tc>Imin)&&(Tc<Imax))
      { 
  m=0;
        f=1;
  return;
      }       //找到启始码
   if(f==1)
      {
        if(Tc>Inum1&&Tc<Inum3) 
    {
   Im[m/8]=Im[m/8]>>1|0x80; m++; 
       }
      if(Tc>Inum2&&Tc<Inum1) 
        {
         Im[m/8]=Im[m/8]>>1; m++; //取码
  }
  if(m==32) 
   {
         m=0;  
         f=0;
         if(Im[2]==~Im[3]) 
      {
           IrOK=1; 
   }
        else IrOK=0;   //取码完成后判断读码是否正确
     }
               //准备读下一码
   }
}
/*演示主程序*/
void main(void)
{
    unsigned int  a;
 m=0;
    f=0;
 EA=1;
 IT1=1;EX1=1;
 TMOD=0x11;  
 TH0=0;TL0=0;
 TR0=1;//ET0=1;
 while(1)
 {
       if(IrOK==1) 
  {
      show[1]=Im[2] & 0x0F;     //取键码的低四位
           show[0]=Im[2] >> 4;  
           IrOK=0;
  }
           for(a=100;a>0;a--)
          {
    display();
   }
 }
}
解码程序这个就能实现

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit IR=P3^2; //红外接口标志

#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^6;//定义锁存使能端口 段锁存
sbit LATCH2=P2^7;// 位锁存
/*------------------------------------------------
全局变量声明
------------------------------------------------*/

//unsigned char code dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0~9
unsigned char irtime;//红外用全局变量

bit irpro_ok,irok;
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; //接收红外信号处理
static bit startflag; //是否开始处理标志位

if(startflag)
{
if(irtime=33)//引导码 TC9012的头码,9ms+4.5ms
i=0;
irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是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[2])//判断第三个数码值
{
case 0x0c:DataPort=dofly_DuanMa[1];break;//1 显示相应的按键值
case 0x18:DataPort=dofly_DuanMa[2];break;//2
case 0x5e:DataPort=dofly_DuanMa[3];break;//3
case 0x08:DataPort=dofly_DuanMa[4];break;//4
case 0x1c:DataPort=dofly_DuanMa[5];break;//5
case 0x5a:DataPort=dofly_DuanMa[6];break;//6
case 0x42:DataPort=dofly_DuanMa[7];break;//7
case 0x52:DataPort=dofly_DuanMa[8];break;//8
case 0x4a:DataPort=dofly_DuanMa[9];break;//9
default:break;
} */
P1=IRcord[2];

irpro_ok=0;//处理完成标志

}
/*------------------------------------------------
红外码值处理
------------------------------------------------*/
void Ircordpro(void)//红外码值处理函数
{
unsigned char i, j, k;
unsigned char cord,value;

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;
value=0;
}
irpro_ok=1;//处理完毕标志位置1
}

/*------------------------------------------------
主函数
------------------------------------------------*/
void main(void)
{
EX0init(); //初始化外部中断
TIM0init();//初始化定时器

DataPort=0xfe; //取位码 第一位数码管选通,即二进制1111 1110
LATCH2=1; //位锁存
LATCH2=0;

while(1)//主循环
{
if(irok) //如果接收好了进行红外处理
{
Ircordpro();
irok=0;
}
if(irpro_ok) //如果处理好后进行工作处理,如按对应的按键后显示对应的数字等
{
Ir_work();
}
}
}

(1)发送程序
#include <reg52.h>

static bit OP; //红外发射管的亮灭
static unsigned int count; //延时计数器
static unsigned int endcount; //终止延时计数
static unsigned int temp; //按键
static unsigned char flag; //红外发送标志
static unsigned char num;
sbit ir_in=P3^4;
char iraddr1; //十六位地址的第一个字节
char iraddr2; //十六位地址的第二个字节
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 2009-8-11 <br>4 <br>红外数据传输 <br>0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; //共阳数码管 0~~f
void SendIRdata(char p_irdata);
void delay(unsigned int);
void keyscan();

/******************主函数**************************/
void main(void)
{
num=0;
P2=0x3f;
count = 0;
flag = 0;
OP = 0;
ir_in= 0;

EA = 1; //允许CPU中断
TMOD = 0x11; //设定时器0和1为16位模式1
ET0 = 1; //定时器0中断允许

TH0 = 0xFF;
TL0 = 0xE6; //设定时值0为38K 也就是每隔26us中断一次
TR0 = 1;//开始计数

iraddr1=3;//00000011
iraddr2=252;//11111100

do{keyscan(); <br>}while(1);
}

/***********************定时器0中断处理 **********************/
void timeint(void) interrupt 1
{
TH0=0xFF;
TL0=0xE6; //设定时值为38K 也就是每隔26us中断一次
count++;

if (flag==1)
{
OP=~OP;
}
else
{
OP = 0;
}
ir_in= OP;
}

void SendIRdata(char p_irdata)
{ 2009-8-11
5
红外数据传输
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
{ 2009-8-11
6
红外数据传输
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;
}
2009-8-11
7
红外数据传输
endcount=10;
flag=1;
count=0;
do{}while(count<endcount);
flag=0;
}

void delay(unsigned int z)
{
unsigned char x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

/*********************4×4键盘扫描按下按键发射数据************************/
void keyscan()
{
P1=0xfe;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
P2=table[num-1];
SendIRdata(table[num-1]);
}
P1=0xfd;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8; 2009-8-11
8
红外数据传输
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
P2=table[num-1];
SendIRdata(table[num-1]);
}
P1=0xfb;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
}
P2=table[num-1];
SendIRdata(table[num-1]);
}
P1=0xf7;
temp=P1;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P1;
switch(temp)
{
case 0xe7:num=13;
break;
case 0xd7:num=14;
break;
case 0xb7:num=15;
break;
case 0x77:num=16;
break;
}
while(temp!=0xf0)
{
temp=P1;
temp=temp&0xf0;
} 2009-8-11
9
红外数据传输
P2=table[num-1];
SendIRdata(table[num-1]);
}
}
(2)接收程序
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int

uchar dis_num,num,num1,num2,num3;
sbit led=P1^0;

unsigned char code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e}; //共阳数码管 0~~f

sbit prem =P3^2; //定义遥控头的接收脚

uchar ram[4]={0,0,0,0};//存放接受到的4个数据 地址码16位+按键码8位+按键码取反的8位

void delaytime(uint time) //延迟90uS
{
uchar a,b;
for(a=time;a>0;a--)
{
for(b=40;b>0;b--);
}
}

void rem()interrupt 0 //中断函数
{
uchar ramc=0; //定义接收了4个字节的变量
uchar count=0; //定义现在接收第几位变量
uint i=0; //此处变量用来在下面配合连续监测9MS 内是否有高电平
prem=1;

for(i=0;i<1100;i++) //以下FOR语句执行时间为8MS左右
{
if(prem) //进入遥控接收程序首先进入引导码的前半部判断,即:是否有9MS左右的低电平
return; //引导码错误则退出
}

while(prem!=1); //等待引导码的后半部 4.5 MS 高电平开始的到来。
delaytime(50); //延时大于4.5MS时间,跨过引导码的后半部分,来到真正遥控数据32位中
//第一位数据的0.56MS开始脉冲

for(ramc=0;ramc<4;ramc++)//循环4次接收4个字节
{ for(count=0;count<8;count++) //循环8次接收8位(一个字节)
{
while(prem!=1); //开始判断现在接收到的数据是0或者1 ,首先在这行本句话时,
//保已经进入数据的0.56MS 低电平阶段
//等待本次接受数据的高电平的到来。
delaytime(9);//高电平到来后,数据0 高电平最多延续0.56MS,而数据1,高电平可 2009-8-11
10
红外数据传输
//延续1.66MS大于0.8MS 后我们可以再判断遥控接收脚的电平,
if(prem) //如果这时高电平仍然在继续那么接收到的数据是1的编码
{
ram[ramc]=(ram[ramc]<<1)+1;//将目前接收到的数据位1放到对应的字节中
delaytime(11); //如果本次接受到的数据是1,那么要继续延迟1MS,这样才能跨入
//下个位编码的低电平中(即是开始的0.56MS中)
}
else //否则目前接收到的是数据0的编码
ram[ramc]=ram[ramc]<<1; //将目前接收到的数据位0放到对应的字节中
} //本次接收结束,进行下次位接收,此接收动作进行32次,正好完成4个字节的接收
}

if(ram[2]!=(~(ram[3]&0x7f))) //本次接收码的判断
{
for(i=0;i<4;i++) //没有此对应关系则表明接收失败,清除接受到的数据
ram[i]=0;
return ;
}

dis_num=ram[2]; //将接收到的按键数据赋给显示变量
}

main()
{
IT0=1; //设定INT0为边沿触发
EX0=1; //打开外部中断0
EA=1; //全局中断开关打开
while(1)
{
switch(dis_num)
{
case 0x81: num=0; break;
case 0xcf: num=1; break;
case 0x92: num=2; break;
case 0x86: num=3; break;
case 0xcc: num=4; break;
case 0xa4: num=5; break;
case 0xa0: num=6; break;
case 0x8f: num=7; break;
case 0x80: num=8; break;
case 0x84: num=9; break;
case 0x88: num=10;break;
case 0xe0: num=11;break;
case 0xb1: num=12;break;
case 0xc2: num=13;break;
case 0xb0: num=14;break;
case 0xb8: num=15;break;
}
P2=table[num];
P1=0x01;
delaytime(5);
}
}


急求红外发射与解码的c程序
(1)发送程序 include <reg52.h> static bit OP; \/\/红外发射管的亮灭 static unsigned int count; \/\/延时计数器 static unsigned int endcount; \/\/终止延时计数 static unsigned int temp; \/\/按键 static unsigned char flag; \/\/红外发送标志 static unsigned char num;sbit ir_in=P3...

红外编码和解码的原理是什么
1. 红外通信技术利用电磁波谱中波长较长的红外线进行信息传输。2. 红外编码涉及将信息转换为红外光脉冲序列,通常通过红外发射器实现。3. 红外解码则是将接收到的红外信号序列恢复为原始信息的过程,通常通过红外接收器完成。4. 红外通信广泛应用于遥控器、智能手机、电视机等设备,具有远距离、高速度、...

红外编码和解码的原理是什么
红外编码是指将信息转化为红外信号的过程。这通常是通过使用红外发射器来实现的,红外发射器会将信息转化为红外光脉冲的序列,然后发送出去。红外解码是指将接收到的红外信号转化为可读的信息的过程。这通常是通过使用红外接收器来实现的,红外接收器会接收到红外光脉冲的序列,然后将其转化为原来的信息。红...

红外编码的解码的一些学习经验(附代码)
发射方使用38KHzPWM波信号驱动红外发射二极管,输出低电平,二极管不工作;接收方收到低电平时,输出高电平。为了实现红外信号的解码和编码,可以使用STM32的定时器实现输入捕获功能,解码红外信号;同时,使用STM32的定时器PWM输出实现红外信号的编码功能。红外解码的代码示例如下:\/\/遥控器接收状态 \/\/bit7:...

红外遥控接收发射原理及ESP8266实现
红外遥控的奥秘:发射与接收原理解析,以及ESP8266的应用实战<\/ 在智能家居的舞台上,红外遥控技术以其高效率、低成本和易于实现的优势,广泛应用于各类家电设备。它基于近红外光的传输,波长范围在0.76um到1.5um之间,而接收器件的波长则通常在0.8um到0.94um之间。让我们一起探索红外遥控的发射和...

求红外解码c程序带详细解释
include<reg52.h> \/\/包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit IR=P3^2; \/\/红外接口标志 define DataPort P0 \/\/定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^6;\/\/定义锁存使能端口 段锁存 sbit LATCH2=P2^7;\/\/ 位锁存 \/*--- 全局变量...

红外遥控的编码和解码以及译码的定义
常用的红外遥控系统一般分发射和接收两个部分。发射部分的主要元件为红外发光二极管。它实际上是一只特殊的发光二极管;由于其内部材料不同于普通发光二极管,因而在其两端施加一定电压时,它便发出的是红外线而不是可见光。目前大量的使用的红外发光二极管发出的红外线波长为940mm左右,外形与普通φ5发光...

...这个红外解码程序是什么意思。如何我用遥控器发射一个数字,他是如何...
你要明白,你按数字键1,其实它是发射一个红外代码。一个遥控器的红外代码应由以下三部分组成:引导码,前16为用户识别码(即不同产家不用型号不同遥控有不同用户码),后16位为操作码(里面8位功能码及8位功能反码,这16位就是遥控器上不同按键的区分)。上面32位码都是二进制数,即“0”、...

学习红外解码与控制应该怎么去学
1 红外遥控系统 通用红外遥控系统由发射和接收两大部分组成,应用编\/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器、解调、解码电路。2 遥控发射器及其编码 遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以...

红外发送与接收技术
1红外遥控发射装置 一般的红外遥控系统是由红外遥控信号编码发送器、红外信号接收器和外围电路等三部分组成。红外遥控信号编码发送器有8键、32键、64键输入等多种型号。实际使用中常用10个左右的按键输入,因为采用32键以上的红外遥控信号编码发送器具有价格高、功耗大、芯片外型尺寸大等缺点。8键输入的风扇...

承德市18647317271: 求红外解码c程序带详细解释 -
叶殃百合: #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit IR=P3^2; //红外接口标志#define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^6;//定义锁存使能端口 段锁存 ...

承德市18647317271: 用C语言编写一个红外发送和接收的程序??? -
叶殃百合: |给你一段430单片机遥控器解码的程序吧,也就是接收部分 毕竟世界太现实只能这么帮你#ifndef _IR_#define _IR_ char t0,t1,t2; uchar IR; void DelayIR() { uint i=130; while(i--); } void init_port2(void) { P2DIR&=~BIT0; P2SEL&=~BIT0; P2IES|=BIT0; ...

承德市18647317271: 求红外解码c程序带详细解释
叶殃百合: #include&lt;reg52.h&gt; //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit IR=P3^2; //红外接口标志 #define DataPort P0 //定义数据端口 程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^6;//定义锁存使能端口 段...

承德市18647317271: 求一份红外遥控程序(发射和接受)汇编...谢谢 -
叶殃百合: ORG 0000H AJMP MAIN ORG 0003H ;外部中断P3.2脚INT0入口地址 AJMP INTT0 ;转入外部中断服务子程序(解码程序) ORG 0100H MAIN: SETB EA SETB IT0 SETB EX0 AJMP $;******************以下为进入P3.2脚外部中断子程序,也就...

承德市18647317271: 本人是单片机初学求C语言红外遥控解码程序并用数码管显示带注悉
叶殃百合: #include &lt;reg51.h&gt; #include &lt;intrins.h&gt; #define uchar unsigned char #define uint unsigned int sbit IRIN = P3^2; //遥控输入脚 sbit BEEP = P3^7; //蜂鸣器 sbit RELAY= P3^6; //继电器 uchar IR_buf[4]={0x00,0x00,0x00,0x00};//IR_buf[0]...

承德市18647317271: 红外线遥控器解码C语言程序代码 SM0038接受头 -
叶殃百合: ////////////////////////////////////////晶振频率为6MHz 一个机器周期2us ////实现按键地址码、指令码的数码管显示////2010-06-01 ////////////////////////////////////////#include<reg52.h>#define uchar unsigned char#define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; bit ...

承德市18647317271: 帮我写个单片机(89C52RC)红外解码程序,只要把接受到得红外信号放在一个数组就可以. -
叶殃百合: #include<reg52.h> unsigned char distemp; unsigned char irtime;//红外用全局变量 bit irpro_ok,irok; static unsigned char i; sbit zhongduan=P3^3; unsigned char IRcord[4]; unsigned char irdata[33]; void main(void) { IT1 = 1; // 配置为下降沿中断1 / ...

承德市18647317271: 我是单片机初学者,想实现红外在3米以内报警,一个接收端一个发射有没有能给个完整C语言程序的呀 -
叶殃百合: 我现场给你编 有点错误你自己调试吧 但是大概思路你可以这样来设计 首先你给那个发射管一个引脚,给接收管一个引脚,再给蜂鸣器一个引脚 你那个发射管独立设计为一个电路 用单片机和接收管来检测是否收到了红外信号 如果受到信号则蜂...

承德市18647317271: 求51单片机红外遥控器(电视遥控或者其他的红外遥控器)解码C程序!要数码管显示键码值的!
叶殃百合: 主函数 #include &lt;reg51.h&gt; #include &lt;intrins.h&gt; #define NOP() _nop_() /* 定义空指令 */ //译码器管脚定义 sbit LS138A=P2^2; //管脚定义 sbit LS138B=P2^3; sbit LS138C=P2^4; //此表为 LED 的字模, 共阴数码管 0-9 - unsigned ...

承德市18647317271: 51单片机P3.7接红外接收头,P3.6接LED,已知红外遥控器数字1键的键值0CH,用C语言怎么编程让按数字1键 -
叶殃百合: 需要知道你所选用的红外遥控器用什么协义,32位的还是42位还是48位的,设计一个红外解码的程序模块,在时间中断里轮询,依晶振情况设置合适的时间溢出值,每毫秒到少采样5次,要能每毫秒采样10-20次更好,解码成功,设置键值变量并把信号标记置1, 而主程序里则要轮询检查这个信号标记,发现有信号就读键值做相应的动作,并把信号标记清0......

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网