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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)紅外接收與發(fā)射源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:578019 發(fā)表于 2019-7-4 18:48 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
自己做的實驗,紅外接收與發(fā)射,程序什么的都在里面。

單片機(jī)源程序如下:
  1. /********************************* 航太電子*******************************
  2. * 實 驗 名 :紅外遙控發(fā)射
  3. * 實驗說明 :燒錄成功后,將單片機(jī)的紅外發(fā)射口對著另外一個運(yùn)行 遙控鍵值解碼實驗 程序的單片機(jī),
  4. *            按下相應(yīng)的矩陣鍵盤按鍵即可實現(xiàn)鍵值發(fā)送
  5. * 實驗平臺 :航太DIY51單片機(jī)開發(fā)板V1.0
  6. * 連接方式 :CN19的HW_DRI接CN15的P16
  7.              CN6接CN14,KEY1到KEY8分別對應(yīng)P30到P37
  8.                    CN5接CN16,按pin編號從小到大連接,L1到L8分別接P00到P07
  9. * 注    意 :程序通過關(guān)斷和打開TR1來實現(xiàn)發(fā)送低電平和高電平,打開TR1時,發(fā)送38k高電平載波,接收端經(jīng)過反相后接收到低電平,
  10. *            關(guān)斷TR1時,發(fā)送端不發(fā)送載波,接收端經(jīng)反相后接收到高電平
  11. ****************************************************************************************/
  12. #include <reg52.h>

  13. #define FOSC 11059200L //晶振設(shè)置,默認(rèn)使用11.0592M Hz
  14. //#define FOSC 12000000L //晶振設(shè)置,使用12M Hz
  15. //#define FOSC 24000000L //晶振設(shè)置,使用24M Hz

  16. //IO接口定義
  17. sbit IR_OUT=P1^6 ;

  18. #define LED_PORT P0
  19. #define KEY_PORT P3

  20. unsigned char KeyScan();
  21. void LEDdisplay(unsigned char num);

  22. /*******************************************************************************
  23. * 函 數(shù) 名 :Delayms
  24. * 函數(shù)功能 :實現(xiàn) ms級的延時
  25. * 輸    入 :ms
  26. * 輸    出 :無
  27. *******************************************************************************/
  28. void Delayms(unsigned int ms)
  29. {
  30.         unsigned int i,j;
  31.         for(i=0;i<ms;i++)
  32.         #if FOSC == 11059200L
  33.                 for(j=0;j<114;j++);
  34.         #elif FOSC == 12000000L
  35.           for(j=0;j<123;j++);
  36.         #elif FOSC == 24000000L
  37.                 for(j=0;j<249;j++);
  38.         #else
  39.                 for(j=0;j<114;j++);
  40.         #endif
  41. }

  42. /*******************************************************************************
  43. * 函 數(shù) 名 :Init_Timer
  44. * 函數(shù)功能 :定時器1初始化 13us產(chǎn)生一次中斷 用于產(chǎn)生38K載波
  45. * 輸    入 :無
  46. * 輸    出 :無
  47. *******************************************************************************/
  48. void Init_Timer(void)
  49. {
  50.         TMOD=0x21;         //T0 mode 1      T1 mode 2         
  51.         TH1=256-(1000*11.002/38.0/12)/2+0.5;                                                
  52.         //特殊
  53.         TL1=TH1;
  54.         ET1=1;
  55.         EA=1;
  56. }

  57. /*******************************************************************************
  58. * 函 數(shù) 名 :Send_Start_Bit
  59. * 函數(shù)功能 :發(fā)送引導(dǎo)碼  發(fā)送方:9ms高電平 4.5ms低電平
  60. * 輸    入 :無
  61. * 輸    出 :無
  62. *******************************************************************************/
  63. void Send_Start_Bit(void)    //TR1的值=發(fā)送的電平
  64. {
  65.         //9ms 1
  66.         TH0=(65536-8295)/256;  
  67.         TL0=(65536-8295)%256;
  68.         TR0=1;
  69.         TR1=1;
  70.         
  71.         while(!TF0);
  72.         
  73.         TR1=0;
  74.         TF0=0;
  75.         TR0=0;
  76.         
  77.         IR_OUT=1;
  78.         //4.5ms 0
  79.         TH0=(65536-4146)/256;  
  80.         TL0=(65536-4146)%256;
  81.         TR0=1;
  82.         TR1=0;
  83.         
  84.         while(!TF0);
  85.         
  86.         TR1=0;
  87.         TF0=0;
  88.         TR0=0;
  89.         
  90.         IR_OUT=1;
  91. }

  92. /*******************************************************************************
  93. * 函 數(shù) 名 :Send_Bit_0
  94. * 函數(shù)功能 :發(fā)送bit0
  95. * 輸    入 :無
  96. * 輸    出 :無
  97. *******************************************************************************/
  98. void Send_Bit_0(void)
  99. {
  100.         //0.565ms 1
  101.         TH0=(65536-521)/256;  
  102.         TL0=(65536-521)%256;
  103.         TR0=1;
  104.         TR1=1;
  105.         
  106.         while(!TF0);
  107.         
  108.         TR1=0;
  109.         TF0=0;
  110.         TR0=0;
  111.         
  112.         IR_OUT=1;
  113.         //0.565ms 0
  114.         TH0=(65536-521)/256;  
  115.         TL0=(65536-521)%256;
  116.         TR0=1;
  117.         TR1=0;
  118.         
  119.         while(!TF0);
  120.         
  121.         TR1=0;
  122.         TF0=0;
  123.         TR0=0;
  124.         
  125.         IR_OUT=1;
  126. }

  127. /*******************************************************************************
  128. * 函 數(shù) 名 :Send_Bit_1
  129. * 函數(shù)功能 :發(fā)送bit1
  130. * 輸    入 :無
  131. * 輸    出 :無
  132. *******************************************************************************/
  133. void Send_Bit_1(void)
  134. {
  135. //0.565ms 1
  136.         TH0=(65536-521)/256;  
  137.         TL0=(65536-521)%256;
  138.         TR0=1;
  139.         TR1=1;
  140.         
  141.         while(!TF0);
  142.         
  143.         TR1=0;
  144.         TF0=0;
  145.         TR0=0;
  146.         
  147.         IR_OUT=1;
  148.         //1.685ms 0
  149.         TH0=(65536-1563)/256;  
  150.         TL0=(65536-1563)%256;
  151.         TR0=1;
  152.         TR1=0;
  153.         
  154.         while(!TF0);
  155.         
  156.         TR1=0;
  157.         TF0=0;
  158.         TR0=0;
  159.         
  160.         IR_OUT=1;  
  161. }

  162. /*******************************************************************************
  163. * 函 數(shù) 名 :Send_over
  164. * 函數(shù)功能 :發(fā)送一個結(jié)束碼,因為最后一個位只有遇到下降沿才能讀取(發(fā)射端的上升沿)
  165. * 輸    入 :無
  166. * 輸    出 :無
  167. *******************************************************************************/
  168. void Send_over(void)            //
  169. {
  170. //0.500ms 1                            //小于0.5ms 接收端很難識別到
  171.         TH0=(65536-500)/256;  
  172.         TL0=(65536-500)%256;
  173.         TR0=1;
  174.         TR1=1;
  175.         
  176.         while(!TF0);
  177.         
  178.         TR1=0;
  179.         TF0=0;
  180.         TR0=0;
  181.         
  182.         IR_OUT=1;
  183.         //0.500ms 0
  184.         TH0=(65536-500)/256;  
  185.         TL0=(65536-500)%256;
  186.         TR0=1;
  187.         TR1=0;
  188.         
  189.         while(!TF0);
  190.         
  191.         TR1=0;
  192.         TF0=0;
  193.         TR0=0;
  194.         
  195.         IR_OUT=1;  
  196. }

  197. /*******************************************************************************
  198. * 函 數(shù) 名 :Send_Char
  199. * 函數(shù)功能 :發(fā)送一個8位的字節(jié),注意反碼也要發(fā)送
  200. * 輸    入 :add 地址  date 數(shù)據(jù)
  201. * 輸    出 :無
  202. *******************************************************************************/
  203. void Send_Char(unsigned char add,unsigned char date)
  204. {
  205.         unsigned char i,j1,j2,j3,j4;
  206.         j1=add;
  207.          j2=~add;
  208.         j3=date;
  209.         j4=~date;
  210.         Send_Start_Bit();                                                                 

  211.   //發(fā)射引導(dǎo)碼
  212.         for(i=0;i<8;i++)
  213.         {
  214.                 if(j1&0x01)
  215.                         Send_Bit_1();
  216.                 else
  217.                         Send_Bit_0();
  218.                 j1=j1>>1;                                                                 

  219.                 //先發(fā)射低位
  220.         }

  221.         for(i=0;i<8;i++)
  222.         {
  223.                 if(j2&0x01)
  224.                         Send_Bit_1();
  225.                 else
  226.                         Send_Bit_0();
  227.                 j2=j2>>1;                                                                 

  228.                 //先發(fā)射低位
  229.         }

  230.         for(i=0;i<8;i++)
  231.         {
  232.                 if(j3&0x01)
  233.                         Send_Bit_1();
  234.                 else
  235.                         Send_Bit_0();
  236.                 j3=j3>>1;                                                                 

  237.                 //先發(fā)射低位
  238.         }
  239.         
  240.         for(i=0;i<8;i++)
  241.         {
  242.                 if(j4&0x01)
  243.                         Send_Bit_1();
  244.                 else
  245.                         Send_Bit_0();
  246.                 j4=j4>>1;                                                                 

  247.                 //先發(fā)射低位
  248.         }
  249.         
  250.         Send_over();                                                                        

  251.         //結(jié)束符
  252. }

  253. /*******************************************************************************
  254. * 函 數(shù) 名 :T1_ISR
  255. * 函數(shù)功能 :定時器1中斷服務(wù)函數(shù),用于產(chǎn)生38k載頻
  256. * 輸    入 :無
  257. * 輸    出 :無
  258. *******************************************************************************/
  259. void T1_ISR(void) interrupt 3
  260. {
  261.         IR_OUT=!IR_OUT;
  262. }

  263. /*******************************************************************************
  264. * 函 數(shù) 名 :main
  265. * 函數(shù)功能 :主函數(shù)
  266. * 輸    入 :無
  267. * 輸    出 :無
  268. *******************************************************************************/
  269. void main(void)
  270. {
  271.     unsigned char date = 0;
  272.         unsigned char disp_data = 0;
  273.         IR_OUT=1;
  274.         Init_Timer();
  275.         while(1)
  276.         {
  277. //        Send_Start_Bit();

  278. //        Send_Bit_1();
  279.         // Send_Char(date+2,date);
  280.         // date++;        
  281.         // Delayms(1000);
  282.         // if(date == 100) date = 0;
  283.         
  284.         date = KeyScan();
  285.         if(date != 0xff)
  286.         {
  287.                 disp_data = date;
  288.                 Send_Char(0x55,date);
  289.         }
  290.         LEDdisplay(disp_data);
  291.         }
  292. }

  293. /*******************************************************************************
  294. * 函 數(shù) 名 :KeyScan
  295. * 函數(shù)功能 :4*4鍵盤掃描
  296. * 輸    入 :無
  297. * 輸    出 :num 獲取的鍵值,若沒有鍵值則返回 0xff
  298. *******************************************************************************/
  299. unsigned char KeyScan()
  300. {
  301.         unsigned char temp,num;
  302.         num = 0xff;
  303.         KEY_PORT=0xfe;
  304.         temp=KEY_PORT;
  305.         temp=temp&0xf0;
  306.         while(temp!=0xf0)
  307.         {
  308.                 Delayms(5); //延時消抖
  309.                 temp=KEY_PORT;
  310.                 temp=temp&0xf0;
  311.                 while(temp!=0xf0)
  312.                 {
  313.                         temp=KEY_PORT;
  314.                 switch(temp)
  315.                         {
  316.                                 case 0xee:num=1;
  317.                                         break;
  318.                                 case 0xde:num=2;
  319.                                         break;
  320.                                 case 0xbe:num=3;
  321.                                         break;
  322.                                 case 0x7e:num=4;
  323.                                         break;
  324.                         }
  325.                 while(temp!=0xf0)
  326.                         {
  327.                                 temp=KEY_PORT;
  328.                                 temp=temp&0xf0;
  329.                         }
  330.                 }
  331.         }

  332.         KEY_PORT=0xfd;
  333.         temp=KEY_PORT;
  334.         temp=temp&0xf0;
  335.         while(temp!=0xf0)
  336.         {
  337.                 Delayms(5); //延時消抖
  338.                 temp=KEY_PORT;
  339.                 temp=temp&0xf0;
  340.                 while(temp!=0xf0)
  341.                 {
  342.                         temp=KEY_PORT;
  343.                 switch(temp)
  344.                         {
  345.                                 case 0xed:num=5;
  346.                                         break;
  347.                                 case 0xdd:num=6;
  348.                                         break;
  349.                                 case 0xbd:num=7;
  350.                                         break;
  351.                                 case 0x7d:num=8;
  352.                                         break;
  353.                         }
  354.                 while(temp!=0xf0)
  355.                         {
  356.                                 temp=KEY_PORT;
  357.                                 temp=temp&0xf0;
  358.                         }
  359.                 }
  360.         }

  361.         KEY_PORT=0xfb;
  362.         temp=KEY_PORT;
  363.         temp=temp&0xf0;
  364.         while(temp!=0xf0)
  365.         {
  366.                 Delayms(5); //延時消抖
  367.                 temp=KEY_PORT;
  368.                 temp=temp&0xf0;
  369.                 while(temp!=0xf0)
  370.                 {
  371.                         temp=KEY_PORT;
  372.                 switch(temp)
  373.                         {
  374.                                 case 0xeb:num=9;
  375.                                         break;
  376.                                 case 0xdb:num=10;
  377.                                         break;
  378.                                 case 0xbb:num=11;
  379.                                         break;
  380.                                 case 0x7b:num=12;
  381.                                         break;
  382.                         }
  383.                 while(temp!=0xf0)
  384.                         {
  385.                                 temp=KEY_PORT;
  386.                                 temp=temp&0xf0;
  387.                         }
  388.                 }
  389.         }

  390.         KEY_PORT=0xf7;
  391.         temp=KEY_PORT;
  392.         temp=temp&0xf0;
  393.         while(temp!=0xf0)
  394.         {
  395.                 Delayms(5); //延時消抖
  396.                 temp=KEY_PORT;
  397.                 temp=temp&0xf0;
  398.                 while(temp!=0xf0)
  399.                 {
  400.                         temp=KEY_PORT;
  401.                 switch(temp)
  402.                         {
  403.                                 case 0xe7:num=13;
  404.                                         break;
  405.                                 case 0xd7:num=14;
  406.                                         break;
  407.                                 case 0xb7:num=15;
  408.                                         break;
  409.                                 case 0x77:num=0;
  410.                                         break;
  411.                         }
  412.                 while(temp!=0xf0)
  413.                         {
  414.                                 temp=KEY_PORT;
  415.                                 temp=temp&0xf0;
  416.                         }
  417.                 }
  418.         }
  419. return num;
  420. }

  421. /*******************************************************************************
  422. * 函 數(shù) 名 :LEDdisplay
  423. * 函數(shù)功能 :LED以二進(jìn)制的方式顯示值
  424. * 輸    入 :num 要顯示的值
  425. * 輸    出 :無
  426. *******************************************************************************/
  427. void LEDdisplay(unsigned char num)
  428. {
  429.         LED_PORT = num;
  430. }
復(fù)制代碼

所有程序51hei提供下載:
01.7z (22.59 KB, 下載次數(shù): 61)



紅外發(fā)射接線圖.jpg (2 MB, 下載次數(shù): 55)

紅外發(fā)射接線圖.jpg

紅外遙控接收接線圖.jpg (2.84 MB, 下載次數(shù): 60)

紅外遙控接收接線圖.jpg

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:499701 發(fā)表于 2019-7-5 12:29 | 只看該作者
學(xué)習(xí)了,謝謝分享
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美在线观看视频 | 91精品无人区卡一卡二卡三 | 国产精品一码二码三码在线 | 欧美国产精品一区二区三区 | 最新国产精品视频 | 国产精品色一区二区三区 | 五月天激情电影 | 久久亚洲国产精品日日av夜夜 | 91电影在线播放 | 久久久精品一区二区 | 在线国产视频 | 二区成人| 精品1区2区| 色久五月 | 国产亚洲一区精品 | 91伊人| 亚洲欧美日韩精品久久亚洲区 | 久久高清国产视频 | 精品成人| 日韩精品一区二区三区中文在线 | 国产99视频精品免视看9 | 日韩电影中文字幕 | 国产91久久精品一区二区 | 亚洲午夜精品一区二区三区他趣 | 色视频在线播放 | www.久久久.com | 国内精品久久精品 | 中文字幕一区二区三区四区五区 | 久久久久无码国产精品一区 | 日韩一区二区av | 久久国产精品一区二区三区 | 欧美天堂在线观看 | 日本电影韩国电影免费观看 | 久久九精品 | 国产美女精品视频 | 国产 欧美 日韩 一区 | 国产日韩av一区二区 | 国产成人精品一区二 | 中文字幕一区二区三区四区五区 | 国产精品s色 | 亚洲毛片在线观看 |