微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于液晶显示遥控键码值的问题

关于液晶显示遥控键码值的问题

时间:10-02 整理:3721RD 点击:


本人最近学习到了51单片机红外遥控部分内容,但是如下程序很是不懂,关于液晶显示遥控键码值的问题,我想问的是,红外遥控的说明资料是每种都不一样吗》我学习的板子没有带这部分内容,怎么办呢


void IR_IN() interrupt 0 using 0

{

unsigned char j,k,N=0;

    EX0 = 0;   

        delay(15);

        if (IRIN==1)

    { EX0 =1;

          return;

         }

                           //确认IR信号出现

while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。

   {delay(1);}

for(j=0;j<4;j++)         //收集四组数据

{

  for(k=0;k<8;k++)        //每组数据有8位

  {

  while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。

    {delay(1);}

   while (!IRIN)          //等 IR 变为高电平

    {delay(1);}

    while (IRIN)           //计算IR高电平时长

      {

   delay(1);

   N++;           

   if (N>=30)

        { EX0=1;

        return;}                  //0.14ms计数过长自动离开。

     }                        //高电平计数完毕               

    IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”

    if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”

    N=0;

}//end for k

}//end for j

   

   if(IRCOM[2]!=~IRCOM[3])

   {EX0=1;

    return; }

  IRCOM[5]=IRCOM[2] & 0x0F;     //取键码的低四位

  IRCOM[6]=IRCOM[2] >> 4;      //右移4次,高四位变为低四位

  if(IRCOM[5]>9)

    {IRCOM[5]=IRCOM[5]+0x37;}

  else

         IRCOM[5]=IRCOM[5]+0x30;

  if(IRCOM[6]>9)

    {IRCOM[6]=IRCOM[6]+0x37;}

  else

         IRCOM[6]=IRCOM[6]+0x30;

    lcd_pos(0x4b);            

    lcd_wdat(IRCOM[6]);        //第一位数显示

    lcd_pos(0x4c);            

    lcd_wdat(IRCOM[5]);        //第二位数显示

    beep();

    EX0 = 1;

}


有好几种,红外线通信的,前几天也在做这个

N++;           
   if (N>=30)
        { EX0=1;
        return;}                  //0.14ms计数过长自动离开。
     }                        //高电平计数完毕               
    IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
    if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”
    N=0;
}//end for k
}//end for j
   
   if(IRCOM[2]!=~IRCOM[3])
   {EX0=1;
    return; }
  IRCOM[5]=IRCOM[2] & 0x0F;     //取键码的低四位
  IRCOM[6]=IRCOM[2] >> 4;      //右移4次,高四位变为低四位
  if(IRCOM[5]>9)

IRCOM[6]=IRCOM[2] >> 4;      //右移4次,高四位变为低四位
  if(IRCOM[5]>9)
    {IRCOM[5]=IRCOM[5]+0x37;}
  else
         IRCOM[5]=IRCOM[5]+0x30;
  if(IRCOM[6]>9)
    {IRCOM[6]=IRCOM[6]+0x37;}
  else
         IRCOM[6]=IRCOM[6]+0x30;
    lcd_pos(0x4b);            
    lcd_wdat(IRCOM[6]);        //第一位数显示
    lcd_pos(0x4c);            
    lcd_wdat(IRCOM[5]);        //第二位数显示
    beep();
    EX0 = 1;

void IR_IN() interrupt 0 using 0
{
unsigned char j,k,N=0;
    EX0 = 0;   
        delay(15);
        if (IRIN==1)
    { EX0 =1;
          return;
         }
                           //确认IR信号出现
while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
   {delay(1);}
for(j=0;j<4;j++)         //收集四组数据
{
  for(k=0;k<8;k++)        //每组数据有8位
  {
  while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
    {delay(1);}
   while (!IRIN)          //等 IR 变为高电平
    {delay(1);}
    while (IRIN)           //计算IR高电平时长
      {
   delay(1);
   N++;           
   if (N>=30)
        { EX0=1;
        return;}                  //0.14ms计数过长自动离开。
     }                        //高电平计数完毕               
    IRCOM[j]=IRCOM[j] >> 1;                  //数据最高位补“0”
    if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  //数据最高位补“1”
    N=0;
}//end for k
}//end for j
   
   if(IRCOM[2]!=~IRCOM[3])
   {EX0=1;
    return; }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top