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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

紅外線遙控Proteus仿真電路+發射+接收程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:127637 發表于 2016-6-22 22:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機的紅外線遙控Proteus仿真電路+發射+接收程序


仿真圖:


紅外發射程序:
  1. /***************************************************************
  2.         作品:紅外線發射
  3.   單片機:STC89C52RC
  4.     晶振:12M
  5. 編譯環境:Keil uVision4 V9.00
  6. ***************************************************************/
  7. //
  8. //        發射引腳(接PNP三極管b極)
  9. //        PNP三極管e極接2Ω電阻,c極接紅外發射管
  10.      
  11. #include <REG51.h>
  12. #include <intrins.h>
  13. #define uchar unsigned char
  14. #define uint  unsigned int

  15. #define SBM   0x80                //識別碼

  16. #define m9    (65536-9000)               //約9mS
  17. #define m4_5  (65536-4500)               //約4.5mS
  18. #define m1_6  (65536-1630)               //約1.65mS
  19. #define m_65  (65536-580)               //約0.65mS
  20. #define m_56  (65536-560)               //約0.56mS
  21. #define m40   (65536-40000)       //約40mS
  22. #define m56   (65536-56000)       //56mS
  23. #define m2_25 (65536-2250)        //約2.25mS

  24. sbit IR  = P3^6;                                  //定義發射引腳(接PNP三極管基極)
  25. sbit LED = P3^7;                                  //發射指示燈

  26. uchar KEY(void);
  27. void  SanZhuan(void);
  28. void  ZZ(uchar x);
  29. void  Z0(uchar temp);
  30. void  TT0(bit BT,uint x);
  31. void  YS(uchar time);

  32. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  33. 函數功能:主函數
  34. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  35. void main(void)
  36. {

  37.   TMOD = 0x01;         //T0 16位工作方式
  38.   IR=1;                                   //發射端口常態為高電平

  39.   while(1)
  40.   {
  41.    SanZhuan();
  42.   }
  43. }
  44. /***************************************************************
  45. 函數功能:             4×4矩陣鍵盤
  46.                            鍵值                    
  47. P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
  48. │     │    │    │    │    │    │    │    ┃
  49. │     │    │    └────13   14   15   16   ┃   
  50. │     │    └─────────9    10   11   12   ┃   
  51. │     └──────────────5    6    7    8    ┃   
  52. └────────────────────1    2    3    4    ┃  
  53. ***************************************************************/
  54. uchar KEY(void)
  55. {
  56. uchar H,L;            //行值,列值
  57. H=0;
  58. L=0;
  59. P1 = 0xf0;            //將鍵盤端口行值設為1,列值設為0
  60. if(P1!= 0xf0)         //檢測是否有按鍵按下,如果有則hangval必不為0x0f
  61.    {
  62.     YS(10);            //按鍵去抖動,延時10毫秒
  63.     if(P1!=0xf0)       //確實有按鍵按下
  64.       {
  65.        H  = P1&0xf0;   //按鍵后得到按鍵的行標志位,將行標志位賦值給hangval
  66.        P1 = 0x0f;      //翻轉鍵盤接口輸出
  67.        L  = P1&0x0f;   //得到列標志位
  68.       }
  69.         return (H+L);
  70.    }
  71.   return 0;
  72. }
  73. /***************************************************************
  74. 函數功能:散轉程序
  75. 入口參數:v
  76. //
  77. //  13 14 15 16
  78. //  9  10 11 12
  79. //  5  6  7  8
  80. //  1  2  3  4
  81. ***************************************************************/
  82. void SanZhuan(void)
  83. {
  84. uchar v;
  85. v = KEY();

  86. switch(v)
  87. {
  88.   case 0x77:ZZ(0x01);v=0;break;                //"  "
  89.   case 0xb7:ZZ(0x02);v=0;break;                //"  "
  90.   case 0xd7:ZZ(0x03);v=0;break;                //"  "
  91.   case 0xe7:ZZ(0x04);v=0;break;                //"  "
  92.   case 0x7b:ZZ(0x05);v=0;break;                //"  "
  93.   case 0xbb:ZZ(0x06);v=0;break;                //"  "
  94.   case 0xdb:ZZ(0x07);v=0;break;                //"  "
  95.   case 0xeb:ZZ(0x08);v=0;break;                //"  "
  96.   case 0x7d:ZZ(0x09);v=0;break;                //"  "
  97.   case 0xbd:ZZ(0x10);v=0;break;                //"  "
  98.   case 0xdd:ZZ(0x11);v=0;break;                //"  "
  99.   case 0xed:ZZ(0x12);v=0;break;                //"  "
  100.   case 0x7e:ZZ(0x13);v=0;break;                //"  "
  101.   case 0xbe:ZZ(0x14);v=0;break;                //"  "
  102.   case 0xde:ZZ(0x15);v=0;break;                //"  "
  103.   case 0xee:ZZ(0x16);v=0;break;                //"  "
  104.   default:v=0;
  105. }
  106. }
  107. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  108. 函數功能:發送主程序
  109. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  110. void ZZ(uchar x)
  111. {
  112.   TT0(1,m9);                   //高電平9mS
  113.   TT0(0,m4_5);               //低電平4.5mS

  114.   /*┈ 發送4幀數據 ┈*/
  115.   Z0(SBM);                                                                                                                                       
  116.   Z0(~SBM);
  117.   Z0(x);
  118.   Z0(~x);

  119.   /*┈┈ 結束碼 ┈┈*/
  120.   TT0(1,m_65);
  121.   TT0(0,m40);

  122.   /*┈┈ 重復碼 ┈┈*/
  123.   while(KEY())
  124.    {
  125.         TT0(1,m9);
  126.         TT0(0,m2_25);

  127.         TT0(1,m_56);
  128.         TT0(0,m40);
  129.                 TT0(0,m56);
  130.                
  131.                 LED = !LED;                  //指示燈                                          
  132.     }

  133.    LED = 1;                    

  134. }
  135. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  136. 函數功能:單幀發送程序
  137. 入口參數:1幀數據
  138. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  139. void Z0(uchar temp)
  140. {
  141.   uchar v;
  142.   for (v=0;v<8;v++)                     //循環8次移位
  143.        {     
  144.                  TT0(1,m_65);                        //高電平0.65mS         
  145.                          if(temp&0x01) TT0(0,m1_6); //發送最低位
  146.                          else          TT0(0,m_56);     
  147.                          temp >>= 1;                //右移一位
  148.         }   
  149. }

  150. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  151. 函數功能:38KHz脈沖發射 + 延時程序
  152. 入口參數:(是否發射脈沖,延時約 x (uS))
  153. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  154. void TT0(bit BT,uint x)
  155. {
  156.   TH0 = x>>8;                    //輸入T0初始值
  157.   TL0 = x;
  158.   TF0=0;                                //清0
  159.   TR0=1;                                //啟動定時器0
  160.   if(BT == 0) while(!TF0);        //BT=0時不發射38KHz脈沖只延時;BT=1發射38KHz脈沖且延時;
  161.   else while(1)                            //38KHz脈沖,占空比5:26
  162.          {
  163.                   IR = 0;
  164.                   if(TF0)break;
  165.               if(TF0)break;
  166.                   IR = 1;
  167.                 if(TF0)break;
  168.                  if(TF0)break;
  169.                  if(TF0)break;
  170.                   if(TF0)break;
  171.                  if(TF0)break;
  172.                  if(TF0)break;
  173.                  if(TF0)break;
  174.                  if(TF0)break;
  175.                  if(TF0)break;
  176.                   if(TF0)break;
  177.                  }
  178.   TR0=0;                                //關閉定時器0
  179.   TF0=0;                                //標志位溢出則清0

  180.   IR =1;                                //脈沖停止后,發射端口常態為高電平
  181. }
  182. /***************************************************************
  183. 函數功能:按鍵消抖    延時程序
  184. 入口參數:1ms×time       (晶振=12MHz)
  185. ***************************************************************/
  186. void YS(uchar time)
  187. {
  188.      uchar i,j;
  189.          for(i=0; i<time; i++)
  190.      for(j=0; j<247; j++)_nop_();
  191. }
復制代碼

紅外接收程序:
  1. // STC 12T系列單片機紅外接收NEC解碼程序。適用于市場上用量最大的HT6121/6122及其兼容的IC編碼。
  2. // 使用外部中斷0接收P3.2
  3. //
  4. #include <REGX52.H>
  5. #include <intrins.h>
  6. #define uchar unsigned char   
  7. #define uint  unsigned int  

  8. uchar code tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0xFF};

  9. sbit        IR    = P3^2;                 

  10. uchar        N[4];                                 //識別碼,操作碼存放
  11. uchar   X1,X2,X3,X4;

  12. void XSQ(void);
  13. void YS(uchar time);

  14. /****************** 主函數 *******************/
  15. void main(void)
  16. {        
  17.   X1=X2=X3=X4 = 0;
  18.   
  19.   IT0 = 1;
  20.   EX0 = 1;
  21.   EA  = 1;

  22.   while(1)
  23.   {
  24.    XSQ();
  25.   }
  26. }

  27. /**********************數碼管顯示函數************************/
  28. void XSQ(void)
  29. {
  30.          P2_7=1;P0=tab[X1];P2_0=0;YS(1);        //識別碼
  31.      P2_0=1;P0=tab[X2];P2_1=0;YS(1);
  32.      P2_1=1;P0=tab[16];P2_2=0;YS(1);
  33.      P2_2=1;P0=tab[16];P2_3=0;YS(1);
  34.      P2_3=1;P0=tab[16];P2_4=0;YS(1);
  35.      P2_4=1;P0=tab[16];P2_5=0;YS(1);
  36.      P2_5=1;P0=tab[X3];P2_6=0;YS(1);        //操作碼
  37.      P2_6=1;P0=tab[X4];P2_7=0;YS(1);
  38. }

  39. /********************** 外部中斷函數************************/
  40. void exint0() interrupt 0
  41. {          
  42.    uint cnt;
  43.    uchar i;

  44.    EX0 = 0;
  45.    cnt = 0;       
  46.        
  47.    while(!IR) cnt++;                               //記錄引導碼時間
  48.    if(cnt < 1000){EX0=1;return;}                   //9ms的計數值(12MHz:1000< cnt <1500)
  49.           
  50.    cnt = 0;                         
  51.    while(IR) if(cnt++ > 400){EX0=1;return;}        //防卡死,超時保護(12MHz: > 300)   
  52.    if(cnt < 200){EX0=1;return;}                    //(12MHz不分頻: <260)            

  53.    for(i=0; i<32; i++)                             //讀取32位位碼
  54.        {
  55.          cnt = 0;                                                                                                                                               
  56.          while(!IR);                       
  57.          while(IR) if(cnt++ > 200){EX0=1;return;}  //超時保護(12MHz:>=200)
  58.          N[i/8] >>= 1;
  59.          if(cnt>60) N[i/8] |= 0x80;                //0和1的計數界線(12MHz:< 109)   
  60.        }

  61.          if(N[0] == ~N[1] && N[2] == ~N[3])            //校驗識別碼,操作碼       
  62.            {
  63.                    X1 = N[0]/16;
  64.                 X2 = N[0]%16;
  65.                 X3 = N[2]/16;
  66.                 X4 = N[2]%16;
  67.            }

  68.         EX0 = 1;                 
  69. }

  70. /***************************************************************
  71. 函數功能:按鍵消抖    延時程序
  72. 入口參數:1ms×time       (晶振=12MHz)
  73. ***************************************************************/
  74. void YS(uchar time)
  75. {
  76.      uchar i,j;
  77.          for(i=0; i<time; i++)
  78.      for(j=0; j<247; j++)_nop_();
  79. }
復制代碼

全部資料下載:
紅外線遙控Proteus仿真電路 發射 接收程序.zip (969.31 KB, 下載次數: 676)

評分

參與人數 8黑幣 +83 收起 理由
18925405284 + 8 共享資料的黑幣獎勵!
ptlantu + 1 很給力!
逆天改命 + 4 很給力!
yangkefeng + 5 很給力!
Alexander123 + 5 絕世好帖!
liuzifan + 5 很給力!
591593350 + 5 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:220361 發表于 2017-7-17 17:53 | 只看該作者
mark一下,搞了半天,把Proteus換成7.5版本 終于打開了,如圖

51hei.png (15.1 KB, 下載次數: 127)

51hei.png
回復

使用道具 舉報

板凳
ID:217448 發表于 2017-7-22 09:47 | 只看該作者
好東西啊,謝謝啦 好資料,51黑有你更精彩!!!
回復

使用道具 舉報

地板
ID:251860 發表于 2017-11-27 08:51 | 只看該作者
好東西謝謝啦!!
回復

使用道具 舉報

5#
ID:242883 發表于 2017-11-27 18:25 | 只看該作者
謝謝分享!!
回復

使用道具 舉報

6#
ID:253421 發表于 2017-11-29 23:06 | 只看該作者
為什么我下載的只能顯示一個端口,另外一個沒有現象
回復

使用道具 舉報

7#
ID:255751 發表于 2017-11-30 16:52 來自手機 | 只看該作者
你好,請問這么下載啊
回復

使用道具 舉報

8#
ID:255751 發表于 2017-11-30 16:54 來自手機 | 只看該作者
lizanai         發表于 2017-11-27 08:51
好東西謝謝啦!!

請問這個下下來的話,有沒有仿真圖
回復

使用道具 舉報

9#
ID:255751 發表于 2017-11-30 21:41 | 只看該作者
我還仿真圖片都看不清楚呢
回復

使用道具 舉報

10#
ID:67179 發表于 2017-12-12 23:33 | 只看該作者
謝謝分享
回復

使用道具 舉報

11#
ID:272625 發表于 2018-1-9 00:07 | 只看該作者
好資料,非常感謝樓主!
回復

使用道具 舉報

12#
ID:86450 發表于 2018-1-9 07:24 | 只看該作者
好東西啊,謝謝啦

評分

參與人數 1黑幣 +5 收起 理由
woaiproteus + 5 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

13#
ID:295641 發表于 2018-4-3 17:00 | 只看該作者
老鐵能給發一份嗎
回復

使用道具 舉報

14#
ID:301862 發表于 2018-4-4 10:19 | 只看該作者
好東西啊,謝謝啦
回復

使用道具 舉報

15#
ID:316707 發表于 2018-4-27 13:18 | 只看該作者
老鐵能給發一份嗎?
回復

使用道具 舉報

16#
ID:337271 發表于 2018-5-27 18:18 | 只看該作者
TT0的函數里面占空比怎么控制的?
回復

使用道具 舉報

17#
ID:339366 發表于 2018-5-30 12:00 | 只看該作者
有兩個源代碼  怎么一起使用呢
回復

使用道具 舉報

18#
ID:73182 發表于 2018-7-6 14:49 | 只看該作者
有用,非常感謝
回復

使用道具 舉報

19#
ID:363696 發表于 2018-7-7 01:11 | 只看該作者
TFS00133144 發表于 2017-11-30 16:54
請問這個下下來的話,有沒有仿真圖

有仿真圖的,跟上面圖片發的差不多
回復

使用道具 舉報

20#
ID:406130 發表于 2018-10-7 14:42 | 只看該作者
好東西啊,謝謝啦
回復

使用道具 舉報

21#
ID:425365 發表于 2018-11-12 22:56 | 只看該作者
好東西,謝謝啦
回復

使用道具 舉報

22#
ID:425365 發表于 2018-11-12 22:57 | 只看該作者
如果protues里沒有IRLINK怎么辦?
回復

使用道具 舉報

23#
ID:425561 發表于 2018-11-13 11:01 | 只看該作者

好東西啊,謝謝啦
回復

使用道具 舉報

24#
ID:428934 發表于 2018-11-18 22:55 | 只看該作者
很給力!
回復

使用道具 舉報

25#
ID:352449 發表于 2018-12-8 17:00 | 只看該作者
好東西啊,謝謝啦
回復

使用道具 舉報

26#
ID:441087 發表于 2018-12-9 08:32 | 只看該作者
好東西,下來學習下,謝謝分享
回復

使用道具 舉報

27#
ID:342505 發表于 2019-1-15 15:07 | 只看該作者
頂一個,下載過來試試看
回復

使用道具 舉報

28#
ID:469417 發表于 2019-1-17 22:54 | 只看該作者
沒有一點實際意思,很明顯的38KHZ載波沒有,發射與接收如同接通的導線
回復

使用道具 舉報

29#
ID:454000 發表于 2019-1-28 16:10 | 只看該作者
刀刀見紅 發表于 2019-1-17 22:54
沒有一點實際意思,很明顯的38KHZ載波沒有,發射與接收如同接通的導線

嗯!真的是那么個事,還是用實物做實驗才有效果!
回復

使用道具 舉報

30#
ID:536936 發表于 2019-5-13 14:33 | 只看該作者
給力,謝謝大佬
回復

使用道具 舉報

31#
ID:281604 發表于 2019-5-25 00:03 | 只看該作者
樓主神人!!
回復

使用道具 舉報

32#
ID:562648 發表于 2019-6-14 21:37 | 只看該作者
。。。。這個程序有問題吧
回復

使用道具 舉報

33#
ID:412391 發表于 2019-9-19 15:39 | 只看該作者
非常好的東西,學習啦
回復

使用道具 舉報

34#
ID:686797 發表于 2020-1-16 22:46 | 只看該作者
Mark一下,有幣了再來!
回復

使用道具 舉報

35#
ID:358536 發表于 2020-5-4 19:31 | 只看該作者
謝謝大神的程序
回復

使用道具 舉報

36#
ID:748647 發表于 2020-5-10 21:08 | 只看該作者
難說哎 感覺不可以
回復

使用道具 舉報

37#
ID:811971 發表于 2020-8-6 18:03 | 只看該作者
為什么我下載的只能顯示一個端口,另外一個沒有現象
回復

使用道具 舉報

38#
ID:438852 發表于 2020-12-16 22:56 | 只看該作者
zyjywll 發表于 2020-8-6 18:03
為什么我下載的只能顯示一個端口,另外一個沒有現象

我也是
回復

使用道具 舉報

39#
ID:927862 發表于 2021-6-4 12:27 | 只看該作者
proteus 全圖及元件名稱可以發一下嗎
回復

使用道具 舉報

40#
ID:927862 發表于 2021-6-4 15:02 | 只看該作者
Proteus7.5才能打開仿真 右邊的單片機是發送,程序沒有讓屏幕顯示 左側單片機是接受
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一 | 日韩精品一区二 | 青青草综合网 | 日韩亚洲一区二区 | 日韩精品一区二区三区 | 九九热在线观看视频 | 久久亚洲一区二区三区四区 | 亚洲一区二区三区免费观看 | 99re在线视频 | 福利视频网站 | 欧美视频偷拍 | 国产精品美女久久久久aⅴ国产馆 | 欧美一区二区三区在线播放 | 日韩免费视频一区二区 | 国内自拍第一页 | www.婷婷| 99riav国产一区二区三区 | 亚洲成人免费在线观看 | 国产亚洲精品美女久久久久久久久久 | 国产精品亚洲成在人线 | 国产美女久久 | av一区在线| 精品久久国产 | 国产精品高清在线 | 久久一区二区三区四区 | 欧美综合在线视频 | 成人国产精品久久久 | 久久久久综合 | 久久国产精品免费一区二区三区 | 欧美精品一二区 | 国产一级在线 | 久久国产高清视频 | 精品久久电影 | 成人免费视频一区二区 | 中日字幕大片在线播放 | 黄色精品视频网站 | 欧美日韩综合 | 久久精品一区二区三区四区 | 欧美日韩在线国产 | 国产一级毛片精品完整视频版 | 欧美一级片在线播放 |