标题: 红外遥控数码管显示键码用户码求问 [打印本页]

作者: 单元15号    时间: 2017-4-29 20:43
标题: 红外遥控数码管显示键码用户码求问
//数码管永远都是0,不管按哪个遥控键都不变。能帮忙看看是哪里出问题了吗?

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit IRIN=P3^3;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code table2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar disp[8];
uchar ircode[4]; //数码管显示缓冲
sbit duan=P2^6;
sbit wei=P2^7;
void init_int0()
{
    IE = 0x84;                 //允许总中断中断,使能 INT1 外部中断
    TCON = 0x10;               //触发方式为脉冲负边沿触发   
    IRIN=1;                    //I/O口初始化
}
void data_pros()
{
   disp[0]=ircode[0]>>4;
   disp[1]=ircode[0]&0x0f;
   disp[2]=ircode[2]>>4;
   disp[3]=ircode[2]&0x0f;
}
void delayms(uint x)
{
   uint i,j;
   for(i=x;i>0;i--)
     for(j=110;j>0;j--);
}
void delay(unsigned char x)    //x*0.14MS
{
unsigned char i;
  while(x--)
{
  for (i = 0; i<13; i++) {}
}
}
void display()
{
    uchar i;
        for(i=0;i<4;i++)
        {
          duan=1;
          P0=table[disp[i]];
          duan=0;
          P0=0xff;
          wei=1;
          P0=table2[i];
          wei=0;
          delayms(5);
       
        }
}
void IR_IN() interrupt 2 using 0
{
  unsigned char j,k,N=0;
     EX1 = 0;   
         delay(15);
         if (IRIN==1)
     { EX1 =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)
         { EX1=1;
         return;}                  //0.14ms计数过长自动离开。
      }                        //高电平计数完毕               
     ircode[j]=ircode[j] >> 1;                  //数据最高位补“0”
     if (N>=8) {ircode[j] = ircode[j] | 0x80;}  //数据最高位补“1”
     N=0;
  }//end for k
}//end for j
if (ircode[2]!=~ircode[3])
   { EX1=1;
     return; }
     EX1 = 1;
}
void main()
{  
   init_int0();
   duan=0;
   wei=0;
   while(1)
   {
             data_pros();
          display();
   }
}

IMG_2471.JPG (662.01 KB, 下载次数: 150)

所用的开发板和无线模块

所用的开发板和无线模块

作者: 单元15号    时间: 2017-4-29 21:05
可加QQ512127058谈有偿帮助
作者: bayga456    时间: 2017-4-30 10:22
天祥天子的资料都比较详细,慢慢看看和教程才能题解代码,光烧个程序看效果学不到知识。
作者: 单元15号    时间: 2017-5-1 10:08
bayga456 发表于 2017-4-30 10:22
天祥天子的资料都比较详细,慢慢看看和教程才能题解代码,光烧个程序看效果学不到知识。

郭天祥好像没有红外教程
作者: makaichuang123    时间: 2017-12-7 11:23
解决了吗 我现在和你做的一样 也是不显示 能请教一下吗 QQ947048848
作者: 2016135032    时间: 2018-5-8 22:19
我的也是有这种问题




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1