发 帖  
[问答]

基于51单片机红外控制LED灯的程序

3042 51单片机 来自手机
2020-8-19 23:27:54   评论 分享淘帖 邀请回答 举报
3个回答
2020-8-20 10:30:56 评论

举报

2020-8-20 10:32:05 评论

举报

2020-8-20 12:03:05 2 评论

举报

2 条评论
  • 2020-8-23 08:36

    闪烁控制在定时器里完成,设置一个标志,标志有效则开始闪烁,标志无效则关闭闪烁。你的需求里并没有关闭闪烁的条件,所以你需要设置一个按键或其他条件关闭闪烁,当这个条件有效后,控制闪烁标志来关闭闪烁

    jf_39852578 回复 人中狼: 2020-8-26 15:30

    应该怎么修改呢? 程序如下:  #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_();                 }         } }

撰写答案

你正在撰写答案

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

您需要登录后才可以回帖 登录/注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
快速回复 返回顶部 返回列表
关注微信公众号

电子发烧友网

电子发烧友william hill官网

社区合作
刘勇
联系电话:15994832713
邮箱地址:liuyong@huaqiu.com
社区管理
elecfans短短
微信:elecfans_666
邮箱:users@huaqiu.com
关闭

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

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

技术社区

HarmonyOS技术社区

RISC-V MCU技术社区

FPGA开发者技术社区

-

OpenHarmony开源社区

OpenHarmony开源社区

-

嵌入式william hill官网

ARM技术william hill官网

STM32/STM8技术william hill官网

嵌入式技术william hill官网

单片机/MCUwilliam hill官网

RISC-V技术william hill官网

瑞芯微Rockchip开发者社区

FPGA|CPLD|ASICwilliam hill官网

DSPwilliam hill官网

-

威廉希尔官方网站 图及DIY

威廉希尔官方网站 设计william hill官网

DIY及创意

电子元器件william hill官网

专家问答

-

电源技术william hill官网

电源技术william hill官网

无线充电技术

-

综合技术与应用

机器人william hill官网

USBwilliam hill官网

电机控制

模拟技术

音视频技术

综合技术交流

上位机软件(C/Python/Java等)

-

无线通信william hill官网

WIFI技术

蓝牙技术

天线|RF射频|微波|雷达技术

-

EDA设计william hill官网

PCB设计william hill官网

DigiPCBAwilliam hill官网

Protel|AD|DXPwilliam hill官网

PADS技术william hill官网

Allegrowilliam hill官网

multisimwilliam hill官网

proteuswilliam hill官网 |仿真william hill官网

KiCad EDA 中文william hill官网

DFM|可制造性设计william hill官网

-

测试测量william hill官网

LabVIEWwilliam hill官网

Matlabwilliam hill官网

测试测量技术

传感技术

-

招聘/交友/外包/交易/杂谈

项目外包

供需及二手交易

工程师杂谈|交友

招聘|求职|工程师职场

-

官方社区

发烧友官方/活动

华秋商城

华秋威廉希尔官方网站