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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4162|回復: 9
打印 上一主題 下一主題
收起左側

基于單片機的紅外遙控系統設計

  [復制鏈接]
跳轉到指定樓層
樓主
本帖最后由 PROTUSE 于 2018-6-24 19:20 編輯

         本設計采用51單片機作為遙控發射接收芯片,HS003B作為紅外一體化接收發射管,在此基礎上設計了一個簡易的智能紅外遙控系統。系統包括接收和發射兩大部分,發射部分有16個按鍵,接收部分含有8盞彩色LED燈、一片二位數碼管和蜂鳴器系統。發射部分通過鍵盤掃描判斷哪個鍵被按下,經過單片機編碼程序進行編碼,控制紅外發射電路發送信號。接收部分解碼信號,實現相應的輸出。本設計方案結合紅外遙控設計簡單、作方便、成本低廉等特點。
總體方案
     紅外遙控系統由紅外發射裝置和紅外接收設備兩大部分組成。紅外發射裝置又由鍵盤電路、紅外編碼芯片、電源和紅外發射電路組成。紅外接收設備可由紅外接收電路、紅外解碼芯片、電源和應用電路組成。 紅外接收端主要包括紅外接收模塊和解調單片機。其中,紅外線接收模塊包括光電轉換放大器和解調電路。
軟件設計
遙控碼的發射   

當某個操作按鍵按下時,單片機先讀出鍵值,然后根據鍵值設定遙控碼的脈沖個數,再調制成38kHz方波由紅外線發光管發射出去。

通常,紅外遙控是將遙控信號(二進制脈沖碼)調制在38KHz的載波上,經緩沖放大后送至紅外發光二極管,轉化為紅外信號發射出去的。為了提高抗干擾性能和降低電源消耗,將上述的遙控編碼脈沖對頻率為38KHz(周期為26us)的載波信號進行脈幅調制(PAM),再經緩沖放大后送到紅外發光管,將遙控信號發射出去。

紅外信號發射過程:首先發射9ms高電平和4.5ms低電平的引導碼,再發送16位地址碼的前8位,16位地址碼的后8位,8位按鍵數據和8位按鍵數據反碼。

在實踐中,采用紅外線遙控方式時,由于受遙控距離,角度等影響,使用效果不是很好,如采用調頻或調幅發射接收碼,可提高遙控距離,并且沒有角度影響。

發射控制程序由主程序和鍵掃描程序、編碼發送程序組成,在主程序中,采用鍵掃描子程序完成各個按鍵的功能,遙控發射主程序的流程圖
紅外接收

紅外遙控解碼程序主要工作為等待紅外線信號出現,并跳過引導信號,搜集連續32位的編碼數據,并存入內存的連續空間。其位信號判別的原則是:以判斷各個位的波寬信號來決定高低信號(0或1)。

位解碼原理如下:
1)解碼為0:高電平寬度0.56ms+低電平寬度0.56ms。
2)解碼為1:高電平寬度0.56ms+低電平寬度1.68ms。

編碼數據讀取后,經過單片機將編碼數據與鍵盤代碼進行比對,即可解調出具體的按鍵值,便可知按下哪個鍵,而做出相應的控制處理,完成紅外遙控的動作。
發射程序


附上proteus仿真工程 程序 論文

單片機源程序如下:
  1. #include <REG51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. #define SBM   0x80               
  6. #define m9    (65536-9000)            
  7. #define m4_5  (65536-4500)            
  8. #define m1_6  (65536-1630)            
  9. #define m_65  (65536-580)        
  10. #define m_56  (65536-560)        
  11. #define m40   (65536-40000)      
  12. #define m56   (65536-56000)      
  13. #define m2_25 (65536-2250)      
  14. sbit IR  = P3^6;                        
  15. sbit LED = P3^7;                        
  16. uchar KEY(void);
  17. void  SanZhuan(void);
  18. void  ZZ(uchar x);
  19. void  Z0(uchar temp);
  20. void  TT0(bit BT,uint x);
  21. void  YS(uchar time);
  22. void main(void)
  23. { TMOD = 0x01;         
  24.   IR=1;                          
  25.   while(1)
  26.   {SanZhuan();}
  27. }
  28. uchar KEY(void)
  29. {uchar H,L;            
  30. H=0;
  31. L=0;
  32. P1 = 0xf0;            
  33. if(P1!= 0xf0)         
  34.    { YS(10);            
  35.     if(P1!=0xf0)     
  36.       {H  = P1&0xf0;  
  37.        P1 = 0x0f;     
  38.        L  = P1&0x0f;   
  39.       }
  40.        return (H+L);
  41.    }
  42.   return 0;
  43. }
  44. void SanZhuan(void)
  45. { uchar v;
  46. v = KEY();
  47. switch(v)
  48. {case 0x77:ZZ(0x01);v=0;break;   
  49.   case 0xb7:ZZ(0x02);v=0;break;         
  50.   case 0xd7:ZZ(0x03);v=0;break;         
  51.   case 0xe7:ZZ(0x04);v=0;break;         
  52.   case 0x7b:ZZ(0x05);v=0;break;         
  53.   case 0xbb:ZZ(0x06);v=0;break;         
  54.   case 0xdb:ZZ(0x07);v=0;break;         
  55.   case 0xeb:ZZ(0x08);v=0;break;         
  56.   case 0x7d:ZZ(0x09);v=0;break;         
  57.   case 0xbd:ZZ(0x10);v=0;break;         
  58.   case 0xdd:ZZ(0x11);v=0;break;   
  59.   case 0xed:ZZ(0x12);v=0;break;         
  60.   case 0x7e:ZZ(0x13);v=0;break;         
  61.   case 0xbe:ZZ(0x14);v=0;break;         
  62.   case 0xde:ZZ(0x15);v=0;break;         
  63.   case 0xee:ZZ(0x16);v=0;break;         
  64.   default:v=0;
  65. }
  66. }
  67. void ZZ(uchar x)
  68. {  TT0(1,m9);               
  69.    TT0(0,m4_5);        
  70.    Z0(SBM);                                                                                                                    
  71.    Z0(~SBM);
  72.    Z0(x);
  73.    Z0(~x);
  74.    TT0(1,m_65);
  75.    TT0(0,m40);
  76.    while(KEY())
  77.    {  TT0(1,m9);
  78.       TT0(0,m2_25);
  79.       TT0( 1,m_56);
  80.       TT0(0,m40);
  81.           TT0(0,m56);
  82.           LED = !LED;                                       
  83.     }
  84. LED = 1;            
  85. }
  86. void Z0(uchar temp)
  87. {  uchar v;
  88.   for (v=0;v<8;v++)                    
  89.        {    TT0(1,m_65);                           
  90.                       if(temp&0x01) TT0(0,m1_6);
  91.                       else  TT0(0,m_56);     
  92.                       temp >>= 1;               
  93.         }   
  94. }
  95. void TT0(bit BT,uint x)
  96. {
  97.   TH0 = x>>8;               
  98.   TL0 = x;
  99.   TF0=0;                           
  100.   TR0=1;                           
  101.   if(BT == 0) while(!TF0);
  102.   else while(1)                  
  103.          {
  104.                 IR = 0;
  105.                 if(TF0)break;
  106.             if(TF0)break;
  107.                 IR = 1;
  108.            if(TF0)break;
  109.           if(TF0)break;
  110.           if(TF0)break;
  111.                 if(TF0)break;
  112.           if(TF0)break;
  113.           if(TF0)break;
  114.           if(TF0)break;
  115.           if(TF0)break;
  116.           if(TF0)break;
  117.                 if(TF0)break;
  118.                }
  119.   TR0=0;                           
  120.   TF0=0;                          
  121.   IR =1;                       
  122. }
  123. void YS(uchar time)
  124. {    uchar i,j;
  125.         for(i=0; i<time; i++)
  126.      for(j=0; j<247; j++)_nop_();
  127. }
  128. 接收程序
  129. #include<reg51.h>
  130. sbit IRIN=P3^2;
  131. sbit SPK=P0^0;
  132. sbit RELAY=P2^7;
  133. sbit P3_0=P3^0;
  134. sbit P3_1=P3^1;
  135. unsigned char IRDATA[7];
  136. unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90};
  137. unsigned char X1,X2;
  138. void IRZ();
  139. void XSQ();
  140. void main()
  141. { EA=1;
  142. EX0=1;
  143. IT0=1;
  144. P1=0xff;
  145. P2=0xc0;
  146. P3_0=0;
  147. P3_1=0;
  148. SPK=1;
  149. IRIN=1;
  150. IRZ();
  151. XSQ();
  152. }
  153. void delay(unsigned char x)
  154. { unsigned char i;
  155. while(x--)
  156. {for(i=0;i<10;i++){}}
  157. }
  158. void fs_d()
  159. {unsigned char i;
  160. for(i=0;i<100;i++)
  161. {delay(4);
  162.   SPK=~SPK;
  163. }
  164. SPK=1;
  165. }
  166. void IR_IN() interrupt 0 using 0
  167. { unsigned char j,k,n=0;
  168. EX0=0;
  169.   delay(20);
  170.   if(IRIN==1)
  171.    {EX0=1;
  172.     return;
  173. }
  174. while(!IRIN){delay(1);}
  175. for(j=0;j<4;j++)
  176. {for(k=0;k<8;k++)
  177. {while(IRIN) {delay(1);}
  178. while(!IRIN) {delay(1);}
  179. while(IRIN)
  180. {delay(1);
  181.   n++;
  182. if(n>=30)
  183. { EX0=1;
  184. return;}
  185. }
  186. IRDATA[j]=IRDATA[j]>>1;
  187. if(n>=8){IRDATA[j]=IRDATA[j]|0x80;}
  188. n=0;}
  189. }
  190. if(IRDATA[2]!=~IRDATA[3])
  191. {EX0=1;
  192. return;
  193. }
  194. else {}
  195. fs_d();
  196. EX0=1;
  197. }
  198. void XSQ()

  199. { while(1)
  200. { X1 =IRDATA[2]/16;
  201.   X2 =IRDATA[2]%16;
  202. P3_0=1;P3_1=1;P2=tab[X1];P3_0=1;delay(200);
  203. P3_0=1;P3_1=0;P2=tab[X2];delay(200);
  204. }
  205. }
  206. void IRZ()
  207. { while(1)
  208.    {
  209.    switch(IRDATA[2])
  210.          {   case 0x01:{P1=0xee;break;}
  211.              case 0x02:{P1=0xdd;break;}
  212.         case0x03:{P1=0xbb;break;}
  213.         case 0x04:{P1=0X77;break;}
  214.          case0x05:{P1=0xf0;break;}
  215.         case0x06:{P1=0x0f;break;}
  216.           case 0x07:{P1=0xaa;break;}
  217.              case 0x08:{P1=0x55;break;}
  218.         case0x09:{P1=0xe7;break;}
  219.             case 0x10:{P1=0xdb;break;}
  220.         case0x11:{P1=0xbd;break;}
  221.              case 0x12:{P1=0x7e;break;}
  222.         case0x13:{P1=0xc3;break;}
  223.         case0x14:{P1=0x3c;break;}
  224.         case0x15:{P1=0x00;break;}
  225.         case0x16:{P1=0xff;break;}
  226.     }
  227.         X1 = IRDATA[2]/16;
  228.      X2 = IRDATA[2]%16;
  229.      P2=tab[X2];P3_1=1;delay(10);P3_1=0;
  230.      P2=tab[X1];P3_0=1;delay(10);P3_0=0;
  231.        }
  232. }
復制代碼



總電路.jpg (370.81 KB, 下載次數: 76)

總電路.jpg

解壓.jpg (232.13 KB, 下載次數: 86)

解壓.jpg

紅外遙控控制電路設計.rar

389.12 KB, 下載次數: 79, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2018-6-15 01:32 | 只看該作者
樓主能補一下壓縮包嗎?
回復

使用道具 舉報

板凳
ID:351137 發表于 2018-6-24 11:31 來自手機 | 只看該作者
admin 發表于 2018-6-15 01:32
樓主能補一下壓縮包嗎?

可以可以,給忘記了
回復

使用道具 舉報

地板
ID:353024 發表于 2018-6-25 14:31 | 只看該作者
想看!!
回復

使用道具 舉報

5#
ID:360797 發表于 2018-6-28 21:49 | 只看該作者
樓主能不能給一下注釋啊,有些看不懂
回復

使用道具 舉報

6#
ID:374869 發表于 2018-7-19 15:07 | 只看該作者
樓主,你好,這個程序好像沒有關機模式(單片機進行掉電模式),遙控器可以關和打開掉風扇嗎
回復

使用道具 舉報

7#
ID:491250 發表于 2019-3-15 10:20 | 只看該作者
厲害了。!
回復

使用道具 舉報

8#
ID:491285 發表于 2019-3-15 10:51 | 只看該作者
謝謝分享。。。!
回復

使用道具 舉報

9#
ID:660762 發表于 2019-12-10 16:53 | 只看該作者
問一下,這個電路仿真能正常運行嗎
回復

使用道具 舉報

10#
ID:452928 發表于 2020-1-6 01:50 | 只看該作者
呔,妖怪哪里跑 發表于 2019-12-10 16:53
問一下,這個電路仿真能正常運行嗎

可以的,但是給的程序好像有點和電路不匹配
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线视频 亚洲 | 亚洲一区免费在线 | 国产成人精品免高潮在线观看 | 久久不射电影网 | 国产综合第一页 | 国产精品久久久久久久久免费丝袜 | 国产精品国产三级国产aⅴ原创 | 亚洲www| 国产视频第一页 | 亚洲国产二区 | 成人免费观看男女羞羞视频 | 国产在线观看不卡一区二区三区 | 久久久一二三区 | 国产一区二区三区在线观看免费 | 久久国产婷婷国产香蕉 | 亚洲精品一区二区三区在线 | 久久专区 | 亚洲高清中文字幕 | 天堂av中文在线 | 久久久久久久久久一区 | 国产精品a级 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | www.亚洲 | 国产 日韩 欧美 中文 在线播放 | av超碰 | 韩国精品在线观看 | 亚洲aⅴ精品 | 欧美 日韩 中文 | 毛片a| 91精品国产91久久久久久 | 精品久久99| 日韩和的一区二在线 | 亚洲日本视频 | 成人av资源在线 | 狠狠狠干 | 久久久久久亚洲 | 日日夜夜精品视频 | 欧美激情一区二区 | 欧美激情久久久 | 日韩综合网 | 欧美一级黄色片免费观看 |