51單片機,紅外NEC協議,ds18b20溫度傳感器(P3.7),紅外接收器7844s,三位一體共陰數碼管(段碼:P2,位碼:P1.1,P1.2,P1.3),上拉電阻A102,接觸器(5v)接P1.3,(程序已親測,放心使用)
測試圖片.jpg (3.33 MB, 下載次數: 77)
下載附件
測試圖
2018-3-8 20:54 上傳
單片機源程序如下(源代碼的注釋非常詳細):
- #include"inf.h"
- #include"relay.h"
- uchar IRCOM[5]; //用來存放讀取到的紅外值 (IrValue[4])
- sbit IRIN=P3^2; //紅外接收器數據接口
- //存放按鍵鍵值(NEC紅外協議)
- uchar code RecvData[]={0x07,0x15,0x09,0x43,0x47,0x0d,0x44,0x40,0x0D,0x0E};
- /***********************************************************
- *函 數 名 :InfInit
- *函數功能 :為外部中斷0,做初始化
- *函數參數 :x
- *返 回 值 :無
- ************************************************************/
- void InfInit()
- {
- IT0=1;//下降沿觸發
- EX0=1;//打開中斷0允許
- EA=1; //打開總中斷
- IRIN=1;//初始化端口
- }
- /***********************************************************
- *函 數 名 :delayms
- *函數功能 :延時0.14ms
- *函數參數 :x
- *返 回 值 :無
- ************************************************************/
- static void delayms(unsigned char x) //0.14mS延時程序
- {
- unsigned char i; //定義臨時變量
- while(x--) //延時時間循環
- {
- for (i = 0; i<13; i++) {} //14mS延時
- }
- }
- /***********************************************************
- *函 數 名 :IR_IN
- *函數功能 :外部中斷0
- *函數參數 :無
- *返 回 值 :無
- ************************************************************/
- void IR_IN() interrupt 0// using 0 //定義INT2外部中斷函數
- {
- unsigned char j,k,N=0; //定義臨時接收變量
-
- EX0 = 0; //關閉外部中斷,防止再有信號到達
- delayms(15); //延時時間,進行紅外消抖
- if (IRIN==1) //判斷紅外信號是否消失
- {
- EX0 =1; //外部中斷開
- return; //返回
- }
-
- while (!IRIN) //等IR變為高電平,跳過9ms的前導低電平信號。
- {
- delayms(1); //延時等待
- }
- for (j=0;j<4;j++) //采集紅外遙控器數據
- {
- for (k=0;k<8;k++) //分次采集8位數據
- {
- while (IRIN) //等 IR 變為低電平,跳過4.5ms的前導高電平信號。
- {
- delayms(1); //延時等待
- }
-
- while (!IRIN) //等 IR 變為高電平
- {
- delayms(1); //延時等待
- }
-
- while (IRIN) //計算IR高電平時長
- {
- delayms(1); //延時等待
- N++; //計數器加加
- if (N>=30) //判斷計數器累加值
- {
- EX0=1; //打開外部中斷功能
- return; //返回
- }
- }
-
- IRCOM[j]=IRCOM[j] >> 1; //進行數據位移操作并自動補零
-
- if (N>=8) //判斷數據長度
- {
- IRCOM[j] = IRCOM[j] | 0x80; //數據最高位補1
- }
- N=0; //清零位數計錄器
- }
- }
-
- if (IRCOM[2]!=~IRCOM[3]) //判斷地址碼是否相同
- {
- EX0=1; //打開外部中斷
- return; //返回
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
遙控控制、溫度顯示 (最終程序).zip
(76.46 KB, 下載次數: 75)
2018-3-8 20:49 上傳
點擊文件名下載附件
51單片機紅外遙控,溫度顯示 下載積分: 黑幣 -5
|