发 帖  
原厂入驻New
[问答] 求指导,单片机红外遥控实现LED闪烁程序及PWM调光
153 单片机 红外遥控 来自手机
分享
求指导,想要实现按键4按下LED4延时0.5秒闪烁,按其他键或者再按一下熄灭;按键2按下LED2稍暗,按其他键或者再按一下熄灭,按键3按下LED2稍亮,按其他键或者再按一下熄灭,程序应该怎么修改呢?程序及按键编码值如下:
按键编码值:
按键1:00-FF-0C-F3
按键2:00-FF-18-E7
按键3:00-FF-5E-A1
按键4:00-FF-08-7F
按键5:00-FF-1C-E3
按键6:00-FF-5A-A5
按键7:00-FF-42-BD
按键8:00-FF-52-AD

程序:

#include <reg52.h>
#include <intrins.h>
#define  NOP()   _nop_()   
#define uchar unsigned char
#define uint  unsigned int
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_()};

void delay(uchar x);
void delay1(int ms);
void delayms(uint);
void beep(void);

sbit IRIN = P3^2;        
sbit LED1 = P1^0;        
sbit LED2 = P1^1;  
sbit LED3 = P1^2;  
sbit LED4 = P1^3;  
sbit LED5 = P1^4;  
sbit LED6 = P1^5;  
sbit LED7 = P1^6;
sbit LED8 = P1^7;
sbit BEEP = P2^3;      
uchar IRCOM[7];
unsigned char Y1,Y2,Y3,Y4,Y5,Y6,Y7,Y8,Y9,i,j;

main()
{
    IE = 0x81;                 
    TCON = 0x01;                  
    IRIN=1;
    BEEP=1;        
    LED1=1;
    LED2=1;
    LED3=1;
    LED4=1;
    LED5=1;
    LED6=1;
    LED7=1;
    LED8=1;
    delay1(10);              
   while(1);
}

void IR_IN(void) interrupt 0   
{
  unsigned char j,k,N=0;
         EX0 = 0;   
         delay(15);
         if (IRIN==1)
                                {
                            EX0 =1;
          return;
                                }                     
    while (!IRIN)           
    {delay(1);}

    for (j=0;j<4;j++)         
                {
                        for (k=0;k<8;k++)        
                        {
                                while (IRIN)            
                                {delay(1);}
                                while (!IRIN)         
                                {delay(1);}
                                while (IRIN)         
                                {
                                        delay(1);
                                        N++;           
                                        if (N>=30)
                                        {
                                         EX0=1;
                                         return;
                                        }               
                                }                                 
                                IRCOM[j]=IRCOM[j] >> 1;                  
                                if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  
                                N=0;
                        }
                }

   if (IRCOM[2]!=~IRCOM[3])
   {
                 EX0=1;
     return;
         }

   IRCOM[5]=IRCOM[2] & 0x0F;   
   IRCOM[6]=IRCOM[2] >> 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;

   Y1=Y2=Y3=Y4=Y5=Y6=Y7=Y8=Y9=0;
               
   switch(IRCOM[2])
   {
                        case 0x0C: Y1=0x01; break;
      case 0x18: Y2=0x01; break;
      case 0x5E: Y3=0x01; break;
      case 0x08: Y4=0x01; break;
      case 0x1C: Y5=0x01; break;
      case 0x5A: Y6=0x01; break;
      case 0x42: Y7=0x01; break;
      case 0x52: Y8=0x01; break;


   }
                        
                        if(Y1&0xFF)LED1=0;               
      else LED1=1;         
      if(Y2&0xFF)LED2=0;
      else LED2=1;
      if(Y3&0xFF)LED3=0;
      else LED3=1;
      if(Y4&0xFF)LED4=0;
      else LED4=1;
      if(Y5&0xFF)LED5=0;
      else LED5=1;
      if(Y6&0xFF)LED6=0;
      else LED6=1;
      if(Y7&0xFF)LED7=0;
      else LED7=1;
      if(Y8&0xFF)LED8=0;
      else LED8=1;                                 

    beep();
    EX0 = 1;

}


void beep(void)
{
  unsigned char i;
  for (i=0;i<100;i++)
   {
   delay(4);
   BEEP=!BEEP;               
   }
  BEEP=1;                     
}

void delay(unsigned char x)   
{
        unsigned char i;
  while(x--)
        {
                for (i = 0; i<13; i++) {}
        }
}

void delay1(int ms)
{
        unsigned char y;
  while(ms--)
        {
                for(y = 0; y<250; y++)
                {
   _nop_();
   _nop_();
   _nop_();
   _nop_();
                }
        }
}
2
2020-8-26 15:28:10   评论 分享淘帖 邀请回答

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /8 下一条

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