|
很多朋友都需要的51紅外控制繼電器的仿真分享給51黑電子論壇的朋友們
單片機紅外線遙控LED和繼電器仿真原理圖(proteus工程文件可到本帖附件下載):
0.png (33.6 KB, 下載次數: 69)
下載附件
2017-3-29 22:19 上傳
單片機源程序:
- //----------------------------------------------------------------------------------------------------------------------------------
- // 程序名:HW6-2.c
- // 程序功能:紅外線遙控LED
- // --------------------------------------------------------------------------------------------------------------------------------
- #include<reg51.h> //頭文件
- sbit IRIN=P3^2; //定義紅外IR信號輸入位
- sbit SPK=P0^0; //定義蜂鳴器接口
- sbit RELAY=P2^7; //定義繼電器接口
- unsigned char IRDATA[7]; //定義數組,存儲紅外接收到的數據
- //-------------------------------------- 主函數 --------------------------------------
- void main()
- {
- EA=1; // 允許總中斷
- EX0=1; // 允許外部中斷INT0中斷
- IT0=1; // 外部中斷INT0采用脈沖觸發方式
- P1=0x00; // 設置P1初始值
- SPK=1; // 設置SPK初始值
- IRIN=1; // IR 輸入位設置為高電平
- while(1); // 無限循環
- }
- //--------------------------------------- 延時函數 ------------------------------------
- void delay(unsigned char x) //延時約x*0.1ms
- {
- unsigned char i;
- while(x--)
- {for(i=0;i<10;i++){}}
- }
- //------------------------------------- 發聲函數 -------------------------------------
- void fs_d ( )
- {
- unsigned char i;
- for(i=0;i<100;i++)
- {
- delay(4);
- SPK=~SPK;
- }
- SPK=1;
- }
- //------------------------------------- 中斷解碼函數 -----------------------------------
- void IR_IN() interrupt 0 using 0 //外部中斷INT0函數
- {
- unsigned char j,k,n=0; //先定義變量,且n=0
- EX0=0; //暫時先關中斷
- delay(20); //延時0.10ms*20=2ms
- if(IRIN==1) //如果IRIN出現高電平,是干擾信號
- {
- EX0=1;
- return; //返回
- }
- while(!IRIN){delay(1);} //避開9ms前導低電平信
- for(j=0;j<4;j++) //一共有4組數據
- {
- for(k=0;k<8;k++) //每組數據有8位
- {
- while(IRIN){delay(1);} // 避開4.5ms高電平
- while(!IRIN){delay(1);}
- // 開始接收數據
- while(IRIN)
- {
- delay(1); //延時0.1ms
- n++; //每過0.1ms時n就加1
- if(n>=30) //如果超過30,放棄
- {
- EX0=1;
- return;} //返回
- }
-
- IRDATA[j]=IRDATA[j]>>1; //右移1位
- if(n>=8){IRDATA[j]=IRDATA[j]|0x80;}
- n=0; //n清0
- }
- }
- //檢查接收的數據和數據反碼是否相反
- if(IRDATA[2]!=~IRDATA[3]) //判斷數據碼和數據反碼是不是相反
- { //否則就放棄
- EX0=1;
- return;
- }
- else {}
- fs_d ( ); //調用發聲函數
- P1=IRDATA[2]; // P1端口輸出
- EX0=1; //開中斷
- }
- //--------------------------------------------------------------------------------------------------
復制代碼
0.png (66.21 KB, 下載次數: 65)
下載附件
2017-3-29 22:23 上傳
該系列源碼包含有很多非常經典,代碼風格十分規范,而且注釋詳細的單片機例程,還帶仿真,對于MCU學習特別是初學者是很有幫助的,全部源碼下載(共25個項目):http://www.zg4o1577.cn/bbs/dpj-79328-1.html
本例程下載(含proteus仿真工程文件與源碼):
6-2單片機紅外線遙控繼電器實驗.rar
(49.42 KB, 下載次數: 55)
2017-3-29 22:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
|