找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4132|回复: 5
打印 上一主题 下一主题
收起左侧

红外遥控数码管显示键码用户码求问

[复制链接]
跳转到指定楼层
楼主
//数码管永远都是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, 下载次数: 108)

所用的开发板和无线模块

所用的开发板和无线模块
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:194864 发表于 2017-4-29 21:05 | 只看该作者
可加QQ512127058谈有偿帮助
回复

使用道具 举报

板凳
ID:162136 发表于 2017-4-30 10:22 | 只看该作者
天祥天子的资料都比较详细,慢慢看看和教程才能题解代码,光烧个程序看效果学不到知识。
回复

使用道具 举报

地板
ID:194864 发表于 2017-5-1 10:08 | 只看该作者
bayga456 发表于 2017-4-30 10:22
天祥天子的资料都比较详细,慢慢看看和教程才能题解代码,光烧个程序看效果学不到知识。

郭天祥好像没有红外教程
回复

使用道具 举报

5#
ID:258520 发表于 2017-12-7 11:23 | 只看该作者
解决了吗 我现在和你做的一样 也是不显示 能请教一下吗 QQ947048848
回复

使用道具 举报

6#
ID:251085 发表于 2018-5-8 22:19 | 只看该作者
我的也是有这种问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表