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

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

QQ登錄

只需一步,快速開始

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

proteus仿真紅外線遙控模擬

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
  紅外線編碼是數(shù)據(jù)傳輸和家用電器遙控常用的一種通訊方法,其實(shí)質(zhì)是一種脈寬調(diào)制的串行通訊。家電遙控中常用的紅外線編碼電路有μPD6121G型HT622型和7461型等。
    這里就以這些電路的編碼格式來仿真怎樣使用單片機(jī)的捕獲中斷功能來實(shí)現(xiàn)其解碼。    紅外線通訊的發(fā)送部分主要是把待發(fā)送的數(shù)據(jù)轉(zhuǎn)換成一定格式的脈沖,然后驅(qū)動(dòng)紅外發(fā)光管向外發(fā)送數(shù)據(jù)。接收部分則是完成紅外線的接收、放大、解調(diào),還原成同步發(fā)射格式相同(但高、低電位剛好相反的脈沖信號(hào))。這些工作通常由一體化的接收頭來完成,主要輸出TTL兼容電平。最后通過解碼把脈沖信號(hào)轉(zhuǎn)換成數(shù)據(jù),從而實(shí)現(xiàn)數(shù)據(jù)的傳輸。
   本單元就是來完成一體化接收頭接受到的紅外遙控器編碼后的輸出數(shù)據(jù),所以只要單片機(jī)完成本單元的解碼任務(wù),并成功實(shí)現(xiàn)之后,只要將IR引腳接上紅外接收頭之后就可以實(shí)現(xiàn)紅外遙控的功能了。
  這是我積累前人經(jīng)驗(yàn)和自己實(shí)踐的成果,并且已經(jīng)有硬件的成功案例,并非只是理論.

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:
  1. #include <AT89X51.h>

  2. static bit OP;        //紅外發(fā)射管的亮滅
  3. static unsigned int count;       //延時(shí)計(jì)數(shù)器
  4. static unsigned int endcount; //終止延時(shí)計(jì)數(shù)
  5. static unsigned char Flag;      //紅外發(fā)送標(biāo)志
  6. char iraddr1;  //十六位地址的第一個(gè)字節(jié)
  7. char iraddr2;  //十六位地址的第二個(gè)字節(jié)

  8. void SendIRdata(char p_irdata);
  9. void delay();
  10. char getkey()
  11. {
  12.           P1=0xfe;P3_6=P3_7=1;P3_3=1;
  13.           if(!P1_4)return 1;   //ON
  14.           if(!P1_5)return 2;   //7
  15.           if(!P1_6)return 3;   //8
  16.           if(!P1_7)return 4;   //9
  17.           if(!P3_6)return 5;   //X
  18.           if(!P3_7)return 6;   //÷
  19.           P1=0xfd;
  20.           if(!P1_4)return 11; //+-
  21.           if(!P1_5)return 12; //4
  22.           if(!P1_6)return 13; //5
  23.           if(!P1_7)return 14; //6
  24.           if(!P3_6)return 15; //-
  25.           if(!P3_7)return 16; //MRC
  26.           P1=0xfb;
  27.           if(!P1_4)return 21; //%
  28.           if(!P1_5)return 22; //1
  29.           if(!P1_6)return 23; //2
  30.           if(!P1_7)return 24; //3
  31.           if(!P3_6)return 25; //+
  32.           if(!P3_7)return 26; //M-
  33.           P1=0xf7;
  34.           if(!P1_4)return 31; //□
  35.           if(!P1_5)return 32; //0
  36.           if(!P1_6)return 33; //.
  37.           if(!P1_7)return 34; //=
  38.           if(!P3_6)return 35; //+
  39.           if(!P3_7)return 36; //M+

  40.           P1=0xfF;P3_3=0;
  41.           if(!P1_4)return 41; //
  42.           if(!P1_5)return 42; //
  43.           if(!P1_6)return 43; //
  44.           if(!P1_7)return 44; //
  45.           if(!P3_6)return 45; //
  46.           if(!P3_7)return 46; //
  47.           return 0;
  48. }

  49. void main(void)
  50. {
  51.   char key;
  52.   count = 0;
  53.   Flag = 0;
  54.   OP = 0;
  55.   P3_4 = 1;
  56.   EA = 1; //允許CPU中斷
  57.   TMOD = 0x11; //設(shè)定時(shí)器0和1為16位模式1
  58.   ET0 = 1; //定時(shí)器0中斷允許

  59.   P1=0xff;
  60.   TH0 = 0xFF;
  61.   TL0 = 0xE6; //設(shè)定時(shí)值0為38K 也就是每隔26us中斷一次  
  62.   TR0 = 1;//開始計(jì)數(shù)

  63.   iraddr1=0xff;
  64.   iraddr2=0xff;


  65.   do{
  66.           key=getkey();
  67.       if(key==1)SendIRdata(0x12);//set
  68.       if(key==11)SendIRdata(0x0b);//exit
  69.       if(key==25||key==35)SendIRdata(0x1a);//+
  70.       if(key==15)SendIRdata(0x1e);//-
  71.       if(key==6)SendIRdata(0x0e);//↑ ÷
  72.       if(key==16)SendIRdata(0x1d);//↓ MRC

  73.       if(key==26)SendIRdata(0x1f);//← M-
  74.       if(key==36)SendIRdata(0x1b);//→ M+
  75.       if(key==32)SendIRdata(0x00);//0
  76.       if(key==22)SendIRdata(0x01);//1
  77.       if(key==23)SendIRdata(0x02);//2

  78.       if(key==24)SendIRdata(0x03);//3
  79.       if(key==12)SendIRdata(0x04);//4
  80.       if(key==13)SendIRdata(0x05);//5
  81.       if(key==14)SendIRdata(0x06);//6
  82.       if(key==2)SendIRdata(0x07);//7
  83.       if(key==3)SendIRdata(0x08);//8

  84.       if(key==4)SendIRdata(0x09);//9
  85.       if(key==21)SendIRdata(0x2A);//%
  86.       if(key==5)SendIRdata(0x2B);//X
  87.       if(key==33)SendIRdata(0x2C);//.
  88.       if(key==34)SendIRdata(0x2D);//=
  89.       if(key==31)SendIRdata(0x2E);//□

  90.       if(key==41)SendIRdata(0x2F);//
  91.       if(key==42)SendIRdata(0x30);//
  92.       if(key==43)SendIRdata(0x31);//
  93.       if(key==44)SendIRdata(0x32);//
  94.       if(key==45)SendIRdata(0x33);//
  95.       if(key==46)SendIRdata(0x34);//
  96.   }while(1);
  97. }
  98. //定時(shí)器0中斷處理
  99. void timeint(void) interrupt 1
  100. {
  101.   TH0=0xFF;
  102.   TL0=0xE6; //設(shè)定時(shí)值為38K 也就是每隔26us中斷一次
  103.   count++;

  104. }


  105. void SendIRdata(char p_irdata)
  106. {
  107.   int i;
  108.   char irdata=p_irdata;

  109.   //發(fā)送9ms的起始碼
  110.   endcount=223;
  111.   Flag=1;
  112.   count=0;
  113.   P3_4=0;
  114.   do{}while(count<endcount);

  115.   //發(fā)送4.5ms的結(jié)果碼
  116.   endcount=117;
  117.   Flag=0;
  118.   count=0;
  119.   P3_4=1;
  120.   do{}while(count<endcount);

  121.   //發(fā)送十六位地址的前八位
  122.   irdata=iraddr1;
  123.   for(i=0;i<8;i++)
  124.   {

  125.      //先發(fā)送0.56ms的38KHZ紅外波(即編碼中0.56ms的低電平)
  126.      endcount=10;
  127.      Flag=1;
  128.      count=0;
  129.          P3_4=0;
  130.      do{}while(count<endcount);

  131.     //停止發(fā)送紅外信號(hào)(即編碼中的高電平)
  132.      if(irdata-(irdata/2)*2)  //判斷二進(jìn)制數(shù)個(gè)位為1還是0
  133.      {
  134.        endcount=15;  //1為寬的高電平
  135.      }
  136.     else
  137.      {
  138.      endcount=41;   //0為窄的高電平
  139.      }
  140.     Flag=0;
  141.     count=0;
  142.         P3_4=1;
  143.     do{}while(count<endcount);

  144.     irdata=irdata>>1;
  145.   }

  146.   //發(fā)送十六位地址的后八位
  147.   irdata=iraddr2;
  148.   for(i=0;i<8;i++)
  149.   {
  150.      endcount=10;
  151.      Flag=1;
  152.      count=0;
  153.          P3_4=0;
  154.      do{}while(count<endcount);

  155.      if(irdata-(irdata/2)*2)
  156.      {
  157.         endcount=15;
  158.      }
  159.      else
  160.      {
  161.        endcount=41;
  162.      }
  163.      Flag=0;
  164.      count=0;
  165.          P3_4=1;
  166.      do{}while(count<endcount);

  167.      irdata=irdata>>1;
  168.   }

  169.   //發(fā)送八位數(shù)據(jù)
  170.   irdata=~p_irdata;
  171.   for(i=0;i<8;i++)
  172.   {
  173.      endcount=10;
  174.      Flag=1;
  175.      count=0;
  176.          P3_4=0;
  177.      do{}while(count<endcount);

  178.      if(irdata-(irdata/2)*2)
  179.      {
  180.          endcount=15;
  181.      }
  182.      else
  183.      {
  184.        endcount=41;
  185.      }
  186.      Flag=0;
  187.      count=0;
  188.          P3_4=1;
  189.      do{}while(count<endcount);

  190.      irdata=irdata>>1;
  191.   }

  192.   //發(fā)送八位數(shù)據(jù)的反碼
  193.   irdata=p_irdata;
  194.   for(i=0;i<8;i++)
  195.   {
  196.      endcount=10;
  197.      Flag=1;
  198.      count=0;
  199.          P3_4=0;
  200.      do{}while(count<endcount);

  201.      if(irdata-(irdata/2)*2)
  202.      {
  203.          endcount=15;
  204.      }
  205.      else
  206.      {
  207.        endcount=41;
  208.      }
  209. ……………………

  210. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
紅外遙控模擬.rar (60.53 KB, 下載次數(shù): 639)



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

使用道具 舉報(bào)

沙發(fā)
ID:428114 發(fā)表于 2018-11-17 11:57 | 只看該作者
有點(diǎn)復(fù)雜
回復(fù)

使用道具 舉報(bào)

板凳
ID:448340 發(fā)表于 2019-1-20 21:04 | 只看該作者
發(fā)送和接收模塊的代碼都有嗎
回復(fù)

使用道具 舉報(bào)

地板
ID:448340 發(fā)表于 2019-1-21 10:00 | 只看該作者

protues仿真用的是的IRLINK模塊嗎?
回復(fù)

使用道具 舉報(bào)

5#
ID:334838 發(fā)表于 2019-3-30 11:54 | 只看該作者
老哥,發(fā)送代碼里,那個(gè)發(fā)送9ms起始碼,endcount為什么是223呀?不是每個(gè)中斷的時(shí)間為26us嗎? 26*223=5798us ,是這樣算的嗎?
回復(fù)

使用道具 舉報(bào)

6#
ID:412391 發(fā)表于 2019-9-19 15:41 | 只看該作者
非常好的東西,學(xué)習(xí)啦
回復(fù)

使用道具 舉報(bào)

7#
ID:401053 發(fā)表于 2020-1-26 14:13 | 只看該作者
仿真圖
回復(fù)

使用道具 舉報(bào)

8#
ID:701386 發(fā)表于 2020-3-2 20:43 | 只看該作者
有其它遙控類分享么
回復(fù)

使用道具 舉報(bào)

9#
ID:669246 發(fā)表于 2020-11-22 14:38 | 只看該作者
比較復(fù)雜。。。學(xué)習(xí)中
回復(fù)

使用道具 舉報(bào)

10#
ID:288629 發(fā)表于 2021-1-29 11:39 | 只看該作者
正在尋找中的內(nèi)容,感謝樓主的奉獻(xiàn)啦!
回復(fù)

使用道具 舉報(bào)

11#
ID:288629 發(fā)表于 2021-3-10 15:23 | 只看該作者
最近正在做遙控控制的內(nèi)容,不知道能否用得上
回復(fù)

使用道具 舉報(bào)

12#
ID:991606 發(fā)表于 2021-12-14 08:38 來自手機(jī) | 只看該作者
正在尋找中的內(nèi)容,感謝樓主的奉獻(xiàn)啦! 回復(fù)
回復(fù)

使用道具 舉報(bào)

13#
ID:961467 發(fā)表于 2022-4-27 08:41 | 只看該作者
有試驗(yàn)成功的嗎
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人免费视频网站高清观看视频 | 毛片免费视频 | 在线观看中文字幕 | 中文字幕一区二区三区四区不卡 | 欧美日韩亚洲一区 | 91欧美精品 | 欧美精品一区在线发布 | 黄a网站 | 国产亚洲精品a | 视频一区二区中文字幕 | 精品久久中文字幕 | 国产污视频在线 | 国产精品久久久久久久久久三级 | 国产午夜精品视频 | 亚洲性视频在线 | 日韩成人国产 | 精品乱码久久久久 | 激情久久网 | 国产精品久久久久久久久久久免费看 | 精品一二区| 最近中文字幕在线视频1 | 99pao成人国产永久免费视频 | 久久亚洲国产精品日日av夜夜 | 成人1区 | av在线播放一区二区 | 美女艹b| 成人一区二区三区在线观看 | 欧美男人天堂 | 久久久免费精品 | 日韩精品成人免费观看视频 | 国产亚洲一区二区精品 | 日本不卡在线观看 | 亚洲网站在线观看 | 偷派自拍 | 成年人在线视频 | 日本精品久久 | 一区二区三区四区在线视频 | 97视频免费| 91亚洲国产成人久久精品网站 | 日本一区二区视频 | 精品福利在线 |