NEC協(xié)議的紅外遙控程序任意IO口_第1頁(yè)
NEC協(xié)議的紅外遙控程序任意IO口_第2頁(yè)
NEC協(xié)議的紅外遙控程序任意IO口_第3頁(yè)
NEC協(xié)議的紅外遙控程序任意IO口_第4頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、/*NEC_INF_S.h用于 NEC 協(xié)議的遙控器與 51單片機(jī)結(jié)合的驅(qū)動(dòng)程序,可用任意 IO 口,不占用中斷資源。 用戶碼 8位,分布于 2-17 個(gè)脈沖;按鍵碼 8位,分布于 18-33 個(gè)脈沖。皆為前 8 原碼,后 8 反碼,并且接收數(shù)據(jù)時(shí)低位在前,高位在后。 主控器為 51 單片機(jī),晶振頻率為 11.0592MHz 。 注意:由于未用中斷,所以信號(hào)的接收是靠查詢(xún)方式的,可能會(huì)漏掉若干次紅外信號(hào)。 */ #include<reg52.h>#define uchar unsigned char#define uint unsigned int#define N 5000/ 用

2、于在 while() 中循環(huán)時(shí)超時(shí)跳出的數(shù)的上限,可小刀sbit nec_dat=P3A3;/任意10 口,用到哪個(gè)自己改哪個(gè)uchar nec_id2=0;/ 遙控器的編碼號(hào),第一個(gè)為原碼,第二個(gè)為反碼 uchar nec_data2=0;/ 遙控器的命令號(hào),第一個(gè)為原碼,第二個(gè)為反碼uchar nec_status=O;遙控器的按鍵狀態(tài)信息。0:無(wú)按鍵;1:一次按鍵;2:連續(xù)按鍵uchar nec_actflag=O;用于帶到主函數(shù)里的按鍵響應(yīng)標(biāo)志。0:不動(dòng)作;1:動(dòng)作#ifndef NEC_INF_S_h#define NEC_INF_S_hvoid nec_init();/ 初始化函數(shù)

3、,注意一定要拉高,拉低就錯(cuò)誤了void nec_delay();/ 延時(shí) 0.8ms 左右,要求要非常精確,這是正確讀數(shù)的關(guān)鍵void nec_pulsedat();讀第2到第32個(gè)脈沖,第一個(gè)脈沖已判定void nec_getdat();掃描式讀遙控器的數(shù)據(jù),可能有時(shí)會(huì)掃描不到#endifvoid nec_init()/ 初始化函數(shù),注意一定要拉高,拉低就錯(cuò)誤了nec_dat=1;void nec_delay()/ 延時(shí) 0.8ms 左右,要求要非常精確,這是正確讀數(shù)的關(guān)鍵uchar i;for(i=0;i<245;i+);/*void nec_act()/ 按鍵響應(yīng)程序,根據(jù)自己需要

4、寫(xiě)nec_getdat(); /先掃描一遍紅外信號(hào) if(nec_actflag=1)/ 如果是正確的紅外信號(hào)才處理,否則跳過(guò) if(nec_data0=nec_data1)/ 驗(yàn)證所接收數(shù)據(jù)是否正確switch(nec_data0)/ 自己寫(xiě)所需要的程序段case 69:/* 點(diǎn)亮二極管,讓蜂鳴器發(fā)聲,什么都行,寫(xiě)在這里 */ break;case 70: /*以下都一樣,對(duì)應(yīng)的遙控器按鍵見(jiàn)圖1-1*/ break;case 71: break;case 68:break;case 64:break;case 67:break;case 7:break;case 21:break;case

5、9:break;case 22:break;case 25:break;case 13:break;case 12:break;case 24:break;case 94:break;case 8:break;case 28:break;case 90:break;case 66:break;case 82:break;case 74:break; nec_actflag=0;*/void nec_pulsedat()/ 讀第 2 到第 32 個(gè)脈沖,第一個(gè)脈沖已判定uchar i=0;uint num=0;for(i=1;i<32;i+)num=0;while(nec_dat=0)&a

6、mp;&(num<N)num+;nec_delay();if(nec_dat=1) if(i>=1)&&(i<=7)nec_id0=nec_id0|(0x01<<i); if(i>=8)&&(i<=15)nec_id1=nec_id1|(0x01<<(i-8); if(i>=16)&&(i<=23)nec_data0=nec_data0|(0x01<<(i-16); if(i>=24)&&(i<=31)nec_data1=nec_da

7、ta1|(0x01<<(i-24); num=0;while(nec_dat=1)&&(num<N)num+;else if(i>=1)&&(i<=7)nec_id0=nec_id0&(0x01<<i); if(i>=8)&&(i<=15)nec_id1=nec_id1&(0x01<<i-8); if(i>=16)&&(i<=23)nec_data0=nec_data0&(0x01<<i-16); if(i>=2

8、4)&&(i<=31)nec_data1=nec_data1&(0x01<<i-24);void nec_getdat()/ 掃描式讀遙控器的數(shù)據(jù),可能有時(shí)會(huì)掃描不到uint num=0;if(nec_dat=1)num=0;while(nec_dat=1)&&(num<N)num+; nec_delay();if(nec_dat=0)nec_delay();if(nec_dat=0)nec_delay();if(nec_dat=0)nec_delay();if(nec_dat=0)nec_status=1;num=0;while

9、(nec_dat=0)&&(num<N)num+;num=0;while(nec_dat=1)&&(num<N)num+;if(nec_status=1)num=0;while(nec_dat=0)&&(num<N)num+;n ec_delay();if(n ec_dat=1)n ec_delay(); nec_delay(); nec_delay(); if(n ec_dat=1) nec_status=2;else nec_idO=OxO1;n ec_pulsedat();elsenec_idO=OxOO;n ec_pulsedat();nec_actflag=1; 一次按鍵的響應(yīng)程序if(n ec_status=2)/持續(xù)按鍵的響應(yīng)程序nec_status=O;必須歸零,非常重要圖1-2本程序使用的遙控器C6970716864670721092225.13122494082890568274圖1-1紅外遙控器按鍵對(duì)應(yīng)的接收碼注意:本程序適用于 NEC 協(xié)議的紅外遙控器,但是每一款遙控器的按鍵碼可能不同,需要 自己找到自己手頭上遙控器的按鍵碼資料來(lái)對(duì)程序進(jìn)行改動(dòng)。 本程序沒(méi)有占用單片機(jī)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論