打印

单片机红外接收,点亮数码管

[复制链接]
599|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tianye02|  楼主 | 2016-8-25 08:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
9键遥控器,单片机红外接收,驱动数码管显示的程序该怎么写?  不知道我这么写的对不对?

#include "stc15f2k60s2.h"
#define uchar unsigned char
#define uint  unsigned int
int i;

sbit IRIN = P3^6;         //红外接收器数据线
uchar IRCOM[7];
unsigned char code a[] ={0x98,0x08,0x88,0x48,0xc8,0x28,0xa8,0x68,0xe8,0x18 };   


/**************************** 延时函数 ***********************************/
void delay(unsigned int a)
{
while(a--);
}

void delay1(unsigned char x)    //x*0.14MS   1个for循环8个机器周期   =8*14*0.001=0.112ms
{
unsigned char i;
  while(x--)
{
  for (i = 0; i<13; i++) {}
}
}



void main(void)
{   
    IE = 0x81;                 //允许总中断中断,使能 INT0 外部中断
    TCON = 0x01;               //触发方式为脉冲负边沿触发
   
    IRIN=1;                    //I/O口初始化
    P20=0;        //数码管初始化
P21=0;
P22=0;
P23=0;
P41=0;
P42=0;
P43=0;
P44=0;
while(1);
}

void IR_IN() interrupt 0
{
  unsigned char j,k,N=0;
     EX0 = 0;   
// delay1(15);
     delay1(120); //0.07
  if (IRIN==1)
     { EX0 =1;
    return;
   }
                           //确认IR信号出现
  while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
    {delay1(8);}
for (j=0;j<7;j++)         //收集四组数据
{
  for (k=0;k<8;k++)        //每组数据有8位
  {
   while (IRIN)            //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
     {delay1(8);}
    while (!IRIN)          //等 IR 变为高电平
     {delay1(8);}
     while (IRIN)           //计算IR高电平时长
      {
    delay1(8);
    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;
  }
}
   
   if (IRCOM[5]!=0x00)  
   { EX0=1;
     return; }
if(IRCOM[6]== a[1]) ;
    {
  P21=1;
  P22=1;
  P23=1;
  P20=0;
  P41=1;
  P42=1;
  P43=1;
  P44=0;
    }
if(IRCOM[6]== a[2]) ;
{
  P21=1;
  P22=0;
  P23=0;
         P20=0;
  P41=1;
  P42=0;
  P43=0;
  P44=0;
    }
if(IRCOM[6]== a[3]) ;
{
  P21=0;
  P22=1;
   P23=1;
         P20=0;
  P41=1;
  P42=1;
  P43=0;
  P44=1;        
}
if(IRCOM[6]== a[4]) ;
{
  P21=1;
  P22=1;
  P23=0;
         P20=0;
  P41=1;
  P42=1;
  P43=0;
  P44=1;        
}
if(IRCOM[6]== a[5]) ;
{
  P21=1;
  P22=0;
  P23=0;
         P20=0;
  P41=1;
  P42=0;
  P43=1;
  P44=1;        
}
if(IRCOM[6]== a[6]) ;
{
  P21=1;
  P22=1;
  P23=0;
         P20=0;
  P41=0;
  P42=1;
  P43=1;
  P44=1;        
}
if(IRCOM[6]== a[7]) ;
{
  P21=1;
  P22=1;
  P23=1;
         P20=0;
  P41=0;
  P42=1;
  P43=1;
  P44=1;        
}
if(IRCOM[6]== a[8]) ;
{
  P21=1;
  P22=0;
  P23=0;
         P20=0;
  P41=1;
  P42=1;
  P43=0;
  P44=0;        
}
if(IRCOM[6]== a[9]) ;
{
  P21=1;
  P22=1;
  P23=1;
         P20=0;
  P41=1;
  P42=1;
  P43=1;
  P44=1;        
}
if(IRCOM[6]== a[10]) ;
{
  P21=1;
  P22=1;
  P23=0;
         P20=0;
  P41=1;
  P42=1;
  P43=1;
  P44=1;        
}
    EX0 = 1;
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

20

帖子

1

粉丝