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