分享一個51單片機主控的紅外發射與紅外接受的程序
單片機源程序如下:
- #include "ir_send.h"
- /*------------初始化IO------------*/
- void ir_init(void)
- {
- P2M0 = 0x80; //P2.7強推挽
- P2M1 = 0x00;
- TMOD = 0x01; //T0 16位 定時
- IR = 0;
- }
- /*-------發射數據 + 載波---------*/
- void ir_t(bit BT , uint p)
- {
- TH0 = p>>8;
- TL0 = p;
- TF0=0;
- TR0=1; //啟動定時器0
- if(BT == 0) //BT=0時,不發射38KHz載波只延時;BT=1發射38KHz脈沖且延時
- {
- while(!TF0);
- }
- else while(1) //38KHz載波,(低電平)占空比5:26
- {
- IR = 1;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;
- IR = 0;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- if(TF0)break;if(TF0)break;
- }
- TR0=0; //關閉定時器0
- TF0=0;
- IR =0;
- }
- /*-----------發送一幀數據-----------*/
- void ir_send_byt(uchar temp)
- {
- uchar i;
- for (i = 0; i < 8; i++ ) //循環8次移位
- {
- ir_t( 1 , m_56 ); //高電平0.65mS
- if( temp & 0x01 )
- ir_t( 0 , m1_6 ); //先發送最低位
- else
- ir_t( 0 , m_56 );
- temp >>= 1;
- }
- }
- /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
- 函數:NEC編碼發送程序
- ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
- void ir_send(uchar p)
- {
- ir_t( 1 , m9 ); //高電平9mS
- ir_t( 0 , m4_5 ); //低電平4.5mS
- /*┈ 發送4幀數據┈*/
- ir_send_byt( user_h ); //用戶碼高8位
- ir_send_byt( user_l ); //用戶碼低8位
- ir_send_byt( p ); //操作碼
- ir_send_byt( ~p ); //操作碼反碼
- /*┈┈ 結束碼 ┈┈*/
- ir_t( 1 , m_56 );
- ir_t( 0 , m40 );
- /*┈┈ 重復碼 ┈┈*/
- while(0)
- {
- ir_t( 1 , m9 );
- ir_t( 0 , m2_25 );
- ir_t( 1 , m_56 );
- ir_t( 0 , m40 );
- ir_t( 0 , m56 );
- }
- }
復制代碼
0.png (36.28 KB, 下載次數: 34)
下載附件
2018-10-24 19:30 上傳
所有資料51hei提供下載:
0822、單片機之紅外發射接受.zip
(70.32 KB, 下載次數: 33)
2018-10-24 18:50 上傳
點擊文件名下載附件
單片機紅外發射接受 下載積分: 黑幣 -5
|