欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: AT89C2051單片機電燈紅外遙控接收板 [打印本頁]

作者: shuige169    時間: 2014-12-13 22:24
標題: AT89C2051單片機電燈紅外遙控接收板
這個AT89C2051單片機電燈紅外遙控接收板,單片機選用的是AT89C2051,制作時省去了數碼管顯示部分的內容,紅處接收頭的輸入端為單片機的P3.2口,輸出端為單片機的P1.1口,P1.1輸出經三極管推動斷電器來控制電燈的開關。單片機供電部分這里沒有單獨進行設計,愛好者可以根據自己的實際情況靈活選擇用其它方式供電。AT89C2051單片機電燈紅外遙控接收板程序附后。


  1. #include<reg52.h>   

  2. sbit IR=P3^2;  //紅外接口

  3. sbit R1=P1^0;        //輸出1

  4. sbit R2=P1^1;

  5. sbit R3=P1^2;

  6. sbit R4=P1^3;

  7. sbit R5=P1^4;

  8. sbit R6=P1^5;

  9. sbit R7=P1^6;

  10. sbit R8=P1^7;         //輸出8

  11. #define DataPort P0 //定義數據端口

  12. sbit LATCH1=P2^2;// 段鎖存

  13. sbit LATCH2=P2^3;//                /*------------------------------------------------

  14.                 全局變量聲明

  15. ------------------------------------------------*/


  16. unsigned char code DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};// 顯示段碼值


  17. 0~9

  18. unsigned char  irtime;//紅外用全局變量


  19. bit irpro_ok,irok;

  20. unsigned char IRcord[4];

  21. unsigned char irdata[33];


  22. /*------------------------------------------------

  23.                   函數聲明

  24. ------------------------------------------------*/


  25. void Ir_work(void);

  26. void Ircordpro(void);


  27. /*------------------------------------------------

  28.                   定時器0中斷處理

  29. ------------------------------------------------*/


  30. void tim0_isr (void) interrupt 1 using 1

  31. {

  32.   irtime++;  //用于計數2個下降沿之間的時間

  33. }


  34. /*------------------------------------------------

  35.                   外部中斷0中斷處理

  36. ------------------------------------------------*/

  37. void EX0_ISR (void) interrupt 0 //外部中斷0服務函數

  38. {

  39.   static unsigned char  i;             //接收紅外信號處理

  40.   static bit startflag;                //是否開始處理標志位

  41. if(startflag)                        

  42. {

  43.     if(irtime<63&&irtime>=33)//引導碼 TC9012的頭碼,9ms+4.5ms

  44.         i=0;

  45.     irdata[i]=irtime;//存儲每個電平的持續時間,用于以后判斷是0還是1

  46.     irtime=0;

  47.     i++;

  48. if(i==33)

  49.            {

  50.         irok=1;

  51. i=0;

  52.         }

  53.   }

  54. else

  55. {

  56. irtime=0;

  57. startflag=1;

  58. }

  59. }


  60. /*------------------------------------------------

  61.                 定時器0初始化

  62. ------------------------------------------------*/

  63. void TIM0init(void)//定時器0初始化

  64. {

  65.   TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值

  66.   TH0=0x00; //重載值

  67.   TL0=0x00; //初始化值

  68.   ET0=1;    //開中斷

  69.   TR0=1;   

  70. }

  71. /*------------------------------------------------

  72.                   外部中斷0初始化

  73. ------------------------------------------------*/

  74. void EX0init(void)

  75. {

  76.         IT0 = 1;   //指定外部中斷0下降沿觸發,INT0 (P3.2)

  77.         EX0 = 1;   //使能外部中斷

  78.         EA = 1;    //開總中斷

  79. }

  80. /*------------------------------------------------

  81.                   鍵值處理

  82. ------------------------------------------------*/


  83. void Ir_work(void)//紅外鍵值散轉程序

  84. {

  85.     switch(IRcord[3])//判斷第4個數碼值,電視遙控和機頂盒遙控不一樣,所以加了兩端,兩個遙控器都能用


  86. ,實際用在燈上沒用這么多路

  87.     {

  88. case 0x07:DataPort=DuanMa[1];R1=~R1;break;//1 顯示相應的按鍵值

  89. case 0x0b:DataPort=DuanMa[2];R2=~R2;break;//2

  90. case 0x0f:DataPort=DuanMa[3];R3=~R3;break;//3

  91. case 0x6f:DataPort=DuanMa[3];R3=~R3;break;//3

  92. case 0x13:DataPort=DuanMa[4];R4=~R4;break;//4

  93. case 0x17:DataPort=DuanMa[5];R5=~R5;break;//5

  94. case 0x1b:DataPort=DuanMa[6];R6=~R6;break;//6

  95. case 0x1f:DataPort=DuanMa[7];R7=~R7;break;//7

  96. case 0x23:DataPort=DuanMa[8];R8=~R8;break;//8

  97. case 0x27:DataPort=DuanMa[0];P1=0xf0;break;//off

  98.     case 0x03:DataPort=DuanMa[0];P1=0xf0;break;//off

  99.              default:break;

  100.    }

  101.    switch(IRcord[2])//判斷第三個數碼值

  102.    {

  103.      case 0x10:DataPort=DuanMa[1];R1=~R1;break;//1 顯示相應的按鍵值

  104.      case 0x03:DataPort=DuanMa[2];R2=~R2;break;//2

  105.      case 0x01:DataPort=DuanMa[3];R3=~R3;break;//3

  106.      case 0x06:DataPort=DuanMa[4];R4=~R4;break;//4

  107.      case 0x09:DataPort=DuanMa[5];R5=~R5;break;//5

  108.      case 0x1d:DataPort=DuanMa[6];R6=~R6;break;//6

  109.      case 0x1f:DataPort=DuanMa[7];R7=~R7;break;//7

  110.      case 0x0d:DataPort=DuanMa[8];R8=~R8;break;//8

  111.      case 0x27:DataPort=DuanMa[0];P1=0xf0;break;//off

  112.      case 0x6f:DataPort=DuanMa[0];P1=0xf0;break;//off

  113.      default:break;

  114.    }         

  115.    irpro_ok=0;//處理完成標志

  116. }

  117. /*------------------------------------------------

  118.                 紅外碼值處理

  119. ------------------------------------------------*/

  120. void Ircordpro(void)//紅外碼值處理函數

  121. {

  122.    unsigned char i, j, k;

  123.    unsigned char cord,value;

  124.    k=1;

  125.    for(i=0;i<4;i++)      //處理4個字節

  126.    {

  127.       for(j=1;j<=8;j++) //處理1個字節8位

  128.       {

  129.          cord=irdata[k];

  130.          if(cord>7)//大于某值為1,這個和晶振有絕對關系,這里使用12M計算,此值可以有一定誤差

  131.          value|=0x80;

  132.          if(j<8)

  133. {

  134.    value>>=1;

  135. }

  136.          k++;

  137.      }

  138.      IRcord[i]=value;

  139.      value=0;     

  140.   }

  141.   irpro_ok=1;//處理完畢標志位置1

  142. }


  143. /*------------------------------------------------

  144.                     主函數

  145. ------------------------------------------------*/

  146. void main(void)

  147. {

  148.    P1=0xf0;

  149.    EX0init(); //初始化外部中斷

  150.    TIM0init();//初始化定時器


  151.    DataPort=0xfe; //取位碼 第一位數碼管選通,即二進制1111 1110

  152.    LATCH2=1;      //位鎖存

  153.    LATCH2=0;

  154.    while(1)//主循環

  155.    {

  156.       if(irok)                        //如果接收好了進行紅外處理

  157.       {   

  158. Ircordpro();

  159.         irok=0;

  160.       }

  161.       if(irpro_ok)                   //如果處理好后進行工作處理,如按對應的按鍵后顯示對應的數字等

  162.       {

  163. Ir_work();

  164.       }

  165.    }

  166. }
復制代碼



AT89C2051單片機電燈紅外遙控接收板程序.rar (30.79 KB, 下載次數: 167)




作者: lising    時間: 2014-12-17 20:07
學習研究。
作者: pps111    時間: 2014-12-19 16:04
一般吧~~和我找人設計的差小小
作者: pps111    時間: 2014-12-19 16:04
等下發給你參考
作者: 51hei電控2112312    時間: 2014-12-21 04:29
很好,正需要
作者: xsynet    時間: 2015-1-6 12:35
請問樓主,我接好了,但按下遙控器后,p3.2高達4.5V,什么原因?謝謝

作者: lxl2255    時間: 2015-1-7 09:45
good  想看看
作者: xsynet    時間: 2015-1-11 15:58
要是有PCB就好了
作者: xsynet    時間: 2015-1-11 15:58
有PCB嗎
作者: VECENT_LIN    時間: 2015-1-14 17:23
謝謝!!!
作者: shahai    時間: 2015-1-15 09:50
感謝樓主,這個對我有用
作者: fzg63031525    時間: 2015-1-15 10:15
資料不錯!下載來學習一下!
作者: blj178    時間: 2015-1-15 14:59
學習研究。
作者: hj0787    時間: 2015-1-15 19:49
不錯呀,研究研究
作者: 兔匪先生    時間: 2015-1-15 23:53
可以學習一下
作者: 雪中梅花    時間: 2015-1-16 20:32
謝謝樓主的奉獻
作者: jcyya    時間: 2015-1-16 23:17
謝謝樓主分享!學習了。
作者: 雪中梅花    時間: 2015-2-20 19:02
謝謝樓主的奉獻
作者: meilidianzhi    時間: 2015-2-23 22:23
謝謝了
作者: meilidianzhi    時間: 2015-2-23 22:23

作者: fontex    時間: 2015-2-26 09:59
很好,正需要。
作者: 姍姍    時間: 2015-3-10 10:10
先下載下來學習下。。。。
作者: 18246288682    時間: 2015-4-14 22:14
學習一下 好東西啊
作者: 茂茂耶    時間: 2015-4-15 18:48
好好看看
作者: 星星一眨眼    時間: 2015-4-15 18:58
感謝樓主分享,我又學到東西了
作者: 壯志凌云3811    時間: 2015-4-16 07:48
學習一下思路
作者: leichyi    時間: 2015-4-25 09:26
好東西
作者: leichyi    時間: 2015-4-25 09:27
要多幾路就好了
作者: bhjyqjs    時間: 2015-6-2 08:45
程序雖然是網絡公開的資料,但樓主的動手能力真棒!萬用板焊的板子,有的元件還是二手的,卻做出了成功的作品,值得學習!頂一個!!!
作者: ky3830446    時間: 2015-7-20 04:49
太好了!!
作者: 華呆    時間: 2015-7-31 23:20
謝謝樓主的貢獻
作者: goodlbg123    時間: 2015-10-3 11:18
下載有時間仿制學習一下
作者: goodlbg123    時間: 2015-10-3 11:41
上個電路圖吧
作者: 用戶2111157    時間: 2015-10-5 15:12
下載下來好好研究學習
作者: moose    時間: 2015-10-11 14:12
感謝樓主
作者: shishi007    時間: 2015-10-26 15:57
下來研究一下。。。。
作者: micmiutom    時間: 2017-5-1 16:37

 一般吧~~和我找人設計的差小小
作者: bhjyqjs    時間: 2017-5-9 10:43
好東西,謝樓主分享!




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1