0
问答首页 最新问题 热门问题 等待回答标签广场
我要提问

单片机

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

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;

}

提问者:jhdfvs 地点:- 浏览次数:1377 提问时间:10-19 10:22
我有更好的答案
提 交
撰写答案
提 交
1 / 3
1 / 3
相关单片机
具有音调控制的单片机立体声前置放大器
用于单片机与电子装置中的开关电源
单片机软硬件复位的条件都有啥
电动机的单片机控制
单片机应用系统开发实例导航