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

QQ登錄

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

帖子
查看: 3876|回復(fù): 11
打印 上一主題 下一主題
收起左側(cè)

請(qǐng)教一下,單片機(jī)開(kāi)發(fā)板上紅外遙控LED的問(wèn)題??

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:191929 發(fā)表于 2017-6-10 21:22 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
本帖最后由 惜緣2008 于 2017-6-10 22:04 編輯

請(qǐng)教一下,開(kāi)發(fā)板上紅外遙控LED的問(wèn)題??就是按遙控鍵,開(kāi)發(fā)板上P1口燈一直不亮,是沒(méi)解碼成功嗎?
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char   

  4. sbit ir=P3^2;                  //紅外接口的位聲明
  5. sbit fm=P2^3;                //蜂鳴器的位聲明

  6. uchar irtime;
  7. bit irprosok,irok;
  8. uchar ircode[4];
  9. uchar irdata[33];
  10. uchar startflag;
  11. uchar  bitnum;
  12. uchar pwm,num;

  13. void delay(uint ms)   //延時(shí)函數(shù)
  14. {
  15.     uchar i;
  16.     while(ms--)
  17.     {
  18.         for(i=0;i<120;i++);
  19.     }
  20. }

  21. void bee()                //蜂鳴器函數(shù)
  22. {
  23.     fm=0;
  24.     delay(100);
  25.     fm=1;
  26.     delay(100);
  27. }

  28. void timer0init(void)//定時(shí)器0初始化 256*(1/12m)*12=0.256ms
  29. {

  30.     TMOD=0x12;//定時(shí)器0工作方式1,TH0是重裝值,TL0是初值
  31.     TH0=0x00; //重載值
  32.     TL0=0x00; //初始化值
  33.     EA=1;
  34.     ET0=1;    //開(kāi)中斷
  35.     TR0=1;   
  36. }

  37. void tim0_isr (void) interrupt 1 using 1  //定時(shí)器0中斷服務(wù)函數(shù)
  38. {
  39.         irtime++;  //用于計(jì)數(shù)2個(gè)下降沿之間的時(shí)間
  40. }


  41. void int0init(void)  //外部中斷0初始化
  42. {
  43.         IT0 = 1;   //指定外部中斷0下降沿觸發(fā),INT0 (P3.2)
  44.         EX0 = 1;   //使能外部中斷
  45.         EA = 1;    //開(kāi)總中斷
  46. }

  47. void timer1init()                                //定時(shí)器1初始化,讓定時(shí)器1每隔500ms中斷一次
  48. {
  49.         TMOD=0x12;
  50.         TH1=(65536-500)/256;
  51.         TL1=(65536-500)%256;
  52.         EA=1;
  53.         ET1=1;
  54.         TR1=1;
  55. }

  56. void int1() interrupt 3        //定時(shí)器500us中斷一次后,進(jìn)入此中斷函數(shù),讓num值每次加1,并判斷num與pwm值,若小于pwm值,則輸出高電平,反之輸出低電平
  57. {
  58.         TR1=0;
  59.         TH1=(65536-500)/256;
  60.         TL1=(65536-500)%256;
  61.         num++;
  62.         if(num>32)
  63.         {
  64.                 num=0;
  65.         }
  66.         if(num<=pwm)
  67.                 {
  68.                     P1=0xff;
  69.                 }
  70.         else
  71.                 {
  72.                     P1=0x00;
  73.                 }
  74.         TR1=1;
  75. }



  76. void int0 () interrupt 0 //外部中斷0服務(wù)函數(shù)
  77. {
  78.         if(startflag)
  79.                  {
  80.                   if(irtime>32&&irtime<63)  //8-16ms
  81.                         {
  82.                            bitnum=0;
  83.                         }
  84.                         irdata[bitnum]=irtime;
  85.                         irtime=0;
  86.                         bitnum++;
  87.                         if(bitnum==33)
  88.                           {
  89.                            bitnum=0;
  90.                            irok=1;
  91.                           }
  92.                  }
  93.         else
  94.                  {
  95.                          irtime=0;
  96.                          startflag=1;
  97.                  }
  98. }


  99. void irpros(void) // 紅外碼值處理
  100. {
  101.         uchar mun,k,i,j;
  102.         k=1;
  103.         for(j=0;j<4;j++)
  104.         {
  105.                 for(i=0;i<8;i++)
  106.                 {
  107.                         mun=mun>>1;
  108.                         if(irdata[k]>6)
  109.                         {
  110.                                 mun=mun | 0x80;
  111.                         }
  112.                                 k++;
  113.                 }
  114.                 ircode[j]=mun;
  115.         }
  116.         irprosok=1;
  117. }


  118. void ir_work(void) //紅外鍵值處理
  119. {
  120.         switch(ircode[2])   //判斷第三個(gè)數(shù)碼值
  121.             {
  122.                          case 0x0c:                                //按鍵1 點(diǎn)亮全部LED燈
  123.                                 {
  124.                                         pwm=0;
  125.                                 }
  126.                          break;                                       

  127.                          case 0x18:                                //按鍵2增加PWM,讓LED燈變亮-----這里的程序不知道該怎么寫(xiě),寫(xiě)了好幾遍都不能進(jìn)行PWM調(diào)光        
  128.                                 {
  129.                                         for(pwm=32;pwm>0;pwm--);
  130.                             }
  131.                         break;                                

  132.                         case 0x5e:                                //這個(gè)是按鍵3,讓LED變成30%的亮度,即分段調(diào)光
  133.                                 {
  134.                                         pwm=23;
  135.                                 }
  136.                         break;        
  137.                         
  138.                         case 0x08:pwm=32;break;                        //按鍵4,熄滅全部LED燈

  139.             default:pwm=32;break;                         //默認(rèn)值,默認(rèn)上電后LED燈是熄滅狀態(tài)
  140.                 }         
  141.                   irprosok=0;//處理完成標(biāo)志
  142. }


  143. void main(void)
  144. {
  145.         int0init(); //初始化外部中斷
  146.         timer0init();//初始化定時(shí)器
  147.         timer1init();
  148.         num=0;
  149.         pwm=32;   //讓PWM值是32,即讓單片機(jī)上電后LED流水燈的狀態(tài)是熄滅的。
  150.         while(1)//主循環(huán)
  151.                 {
  152.                 if(irok)       //如果接收好了進(jìn)行紅外處理
  153.                   {   
  154.                    irpros();
  155.                    irok=0;
  156.                   }
  157.                
  158.                 if(irprosok)  //如果處理好后進(jìn)行工作處理
  159.                   {
  160.                    ir_work();
  161.                   }
  162.                 }
  163. }
復(fù)制代碼

IMG_20170610_211431.jpg (4.57 MB, 下載次數(shù): 100)

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

使用道具 舉報(bào)

12#
ID:191929 發(fā)表于 2017-6-11 16:24 | 只看該作者
4657575 發(fā)表于 2017-6-11 14:48
這個(gè)有點(diǎn)難我無(wú)能為力

恩,一起加油,弄出來(lái)后會(huì)發(fā)出來(lái)共享的
回復(fù)

使用道具 舉報(bào)

11#
ID:210106 發(fā)表于 2017-6-11 14:48 | 只看該作者
這個(gè)有點(diǎn)難我無(wú)能為力
回復(fù)

使用道具 舉報(bào)

10#
ID:191929 發(fā)表于 2017-6-11 12:09 | 只看該作者
謝謝你的資料,我會(huì)靠自己弄出來(lái)的
回復(fù)

使用道具 舉報(bào)

9#
ID:191929 發(fā)表于 2017-6-11 11:57 | 只看該作者
中斷部分沒(méi)學(xué)好
回復(fù)

使用道具 舉報(bào)

8#
ID:191929 發(fā)表于 2017-6-11 11:55 | 只看該作者
yzwzfyz 發(fā)表于 2017-6-11 11:29
1、因?yàn)槌绦虿皇悄銓?xiě)的
2、你也不想認(rèn)真讀一下程序

哈哈,被看到了,程序是找來(lái)的,程序看了一天,也改了一部分,沒(méi)成功
回復(fù)

使用道具 舉報(bào)

7#
ID:191929 發(fā)表于 2017-6-11 11:53 | 只看該作者
HC6800-ES-V2.0 發(fā)表于 2017-6-11 10:03
大致瀏覽了一下你的程序,發(fā)現(xiàn)一個(gè)重要問(wèn)題——紅外遙控器發(fā)出的信號(hào),是有規(guī)則的,你的接收,也要按這個(gè)規(guī) ...

謝謝,非常感謝
回復(fù)

使用道具 舉報(bào)

6#
ID:191929 發(fā)表于 2017-6-11 11:52 | 只看該作者
xlbtlmy 發(fā)表于 2017-6-10 22:41
有示波器或是邏輯分析儀嘛?截一個(gè)波形圖

沒(méi)有,不好意思
回復(fù)

使用道具 舉報(bào)

5#
ID:123289 發(fā)表于 2017-6-11 11:29 | 只看該作者
1、因?yàn)槌绦虿皇悄銓?xiě)的
2、你也不想認(rèn)真讀一下程序
回復(fù)

使用道具 舉報(bào)

地板
ID:164602 發(fā)表于 2017-6-11 10:03 | 只看該作者
大致瀏覽了一下你的程序,發(fā)現(xiàn)一個(gè)重要問(wèn)題——紅外遙控器發(fā)出的信號(hào),是有規(guī)則的,你的接收,也要按這個(gè)規(guī)則來(lái),我沒(méi)有看到相應(yīng)的程序內(nèi)容。
這個(gè)項(xiàng)目我搞過(guò),分享給你。有程序、有資料。

紅外遙控.rar

2.48 MB, 下載次數(shù): 26

全套資料

回復(fù)

使用道具 舉報(bào)

板凳
ID:189134 發(fā)表于 2017-6-10 22:41 | 只看該作者
有示波器或是邏輯分析儀嘛?截一個(gè)波形圖
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:191929 發(fā)表于 2017-6-10 21:24 | 只看該作者
剛開(kāi)始學(xué)紅外遙控,被難到了,希望有人幫幫我,先謝謝了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表