久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2812|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

求指導(dǎo),單片機(jī)紅外遙控實(shí)現(xiàn)LED閃爍程序及PWM調(diào)光

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
求指導(dǎo),想要實(shí)現(xiàn)按鍵4按下LED4延時(shí)0.5秒閃爍,按其他鍵或者再按一下熄滅;按鍵2按下LED2稍暗,按其他鍵或者再按一下熄滅,按鍵3按下LED2稍亮,按其他鍵或者再按一下熄滅,程序應(yīng)該怎么修改呢?程序及按鍵編碼值如下:按鍵編碼值:
按鍵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_();
                }
        }
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:147710 發(fā)表于 2020-8-26 16:30 | 只看該作者
你這個(gè)程序功能代碼互相交叉,牽一發(fā)動(dòng)全身,沒(méi)有修改價(jià)值,先按照之前的按鍵控制LED的例子先做一遍,各功能模塊要獨(dú)立出來(lái):LED顯示,蜂鳴器驅(qū)動(dòng),鍵值解析,紅外接收,單獨(dú)封裝成一個(gè)函數(shù),先把這些一個(gè)個(gè)調(diào)試正常,然后一個(gè)個(gè)組合起來(lái)。另外,定時(shí)中斷中再用delay很不妥。
回復(fù)

使用道具 舉報(bào)

板凳
ID:230118 發(fā)表于 2020-8-26 17:44 | 只看該作者
用個(gè)小狀態(tài)機(jī)描述比較清晰:
idle state :   ledOff();
                  if (capture(Key4))
                  {
                        shine(LED4);
                        goto  state  1;
                   }

                  if (capture(Key2))
                  {
                        darken(LED2)
                        goto  state  2;
                   }

                   if (capture(Key3))
                  {
                        brighten(LED2)
                        goto  state  3;
                   }

state 1、state2、state3:
                   if (capture(anykey))
                   {
                         goto state idle;
                   }

偽代碼,自己實(shí)現(xiàn)函數(shù)
回復(fù)

使用道具 舉報(bào)

地板
ID:626891 發(fā)表于 2020-8-26 18:07 來(lái)自手機(jī) | 只看該作者
XTXB 發(fā)表于 2020-8-26 16:30
你這個(gè)程序功能代碼互相交叉,牽一發(fā)動(dòng)全身,沒(méi)有修改價(jià)值,先按照之前的按鍵控制LED的例子先做一遍,各功 ...

這個(gè)程序搞了好久,把各個(gè)功能模塊分出來(lái),然后再組合,對(duì)于我們初學(xué)者來(lái)說(shuō)很難的,不知道從何入手
回復(fù)

使用道具 舉報(bào)

5#
ID:147710 發(fā)表于 2020-8-26 22:02 | 只看該作者
你上次不是提過(guò)類(lèi)似問(wèn)題么,我給的參考程序有沒(méi)有敲一遍?首先在IO口加幾個(gè)按鍵代替紅外接收,把LED按照需求點(diǎn)亮,
然后再單獨(dú)調(diào)通紅外接收。
最后組合在一起。
別急,花點(diǎn)時(shí)間把這些吃透,以后就輕松了。
做項(xiàng)目其實(shí)都是大同小異。
你這個(gè)我以前玩過(guò)。







回復(fù)

使用道具 舉報(bào)

6#
ID:626891 發(fā)表于 2020-8-27 10:16 來(lái)自手機(jī) | 只看該作者
我有開(kāi)發(fā)板的,就是不知道怎么組合程序

S00827-10150649.png (541.8 KB, 下載次數(shù): 38)

S00827-10150649.png
回復(fù)

使用道具 舉報(bào)

7#
ID:147710 發(fā)表于 2020-8-27 12:53 | 只看該作者
截個(gè)圖看看,你完成的單個(gè)功能。
你這個(gè)需求由于有紅外編碼,對(duì)時(shí)序要求比較嚴(yán),先把單個(gè)功能高質(zhì)量完成才行,別一開(kāi)始就搞組合功能,到時(shí)不能工作都不知道如何查起。
比如先做一個(gè)簡(jiǎn)單功能,把這個(gè)功能封裝成函數(shù),有了封裝換一個(gè)不同的遙控器就不至于全部推倒重來(lái)。
別想著只用幾行代碼就能解決所有問(wèn)題,要舍得多聲明變量,多聲明函數(shù),思維要有層次,不要眉毛胡子一把抓,結(jié)果啥都沒(méi)抓到。
我給你的代碼有你所缺乏的編程思維,認(rèn)真做一遍后,你目前的很多問(wèn)題都可迎刃而解。
千萬(wàn)不要小瞧按鍵點(diǎn)燈程序,你試著完成下面需求:
1,單擊按鍵在按下時(shí)馬上點(diǎn)亮
2,單擊按鍵在抬起后才點(diǎn)亮
3,雙擊點(diǎn)亮,
4,長(zhǎng)按3秒點(diǎn)亮
5,連續(xù)按3次點(diǎn)亮
6,按住按鍵不放,1秒后,LED每秒鐘閃爍3次,松開(kāi)手后,LED熄滅

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久高清| 亚洲免费在线观看av | 欧美成人精品一区二区三区 | h视频网站在线观看 | 亚洲精品一区二区三区蜜桃久 | av毛片| 国产成人精品免费视频 | 国产精品久久久久久一区二区三区 | 日韩一区二区黄色片 | 黄色成人av | 亚洲精品久久嫩草网站秘色 | 亚洲欧美国产毛片在线 | 一区二区在线 | 99精品视频免费在线观看 | 911精品国产| 在线观看精品 | 精品日韩一区 | 久久精品久久久久久 | 成人教育av | 精品中文字幕在线观看 | 国产精品福利视频 | 成人国产在线视频 | 2023亚洲天堂 | 国产精品久久久久久福利一牛影视 | 久久精品网 | 91综合网| 视频一区中文字幕 | 中文字幕一区二区不卡 | 久久综合久色欧美综合狠狠 | 久久久久久久久久久久久久久久久久久久 | 欧美精品一区二区免费视频 | 久久精品二区亚洲w码 | 欧美人成在线视频 | 亚洲成人av一区二区 | 欧美狠狠操| 国产美女视频一区 | 国产精品久久久久久52avav | 色香蕉在线| 国产精品一区二区视频 | 亚洲大片一区 | 综合激情久久 |