當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]/******************************************************************************************** * 功能:紅外解碼。 * 硬件條件:1.CPU型號:AT89S52 * 2.晶振:12.000MHz * 3.用跳線帽短接P2.3__SI2 * 用跳

/********************************************************************************************
* 功能:紅外解碼。
* 硬件條件:1.CPU型號:AT89S52
* 2.晶振:12.000MHz
* 3.用跳線帽短接P2.3__SI2
* 用跳線帽短接P2.2__RCK2
* 用跳線帽短接P2.1__SCK2
* 4.用跳線帽短接HW-IRQ__P3.2
* 5.欲完成本實驗,還需另行準(zhǔn)備一個遙控器,型號為SAA-3010T。
* 注意:在SAA-3010T遙控器的身份碼中,大多數(shù)是0x55,可是有一小部分的碼是0x56,一定要注意區(qū)分。
*
* 下面是一般的SAA-3010T電視遙控器的碼值表
***********************************************************
**[開關(guān)]55D2[靜音]55D3*
**[1]55AB[2]55AC[3]55AD [4]55B2 *
**[5]55B3[6]55B4 [7]55B5 [8]55CA *
**[9]55CB[0]55AA[單/雙]55CC [調(diào)諧]5554*
**[節(jié)目+]56AA[節(jié)目-]56AB[微調(diào)+]56CD [微調(diào)-]56D2 *
**[音量+]552A[存儲]56CB [召回]55D5*
**[音量-]552B[愛好]55D4 [定時]56B4*
**[對比+]5552[色彩+]5532[亮度+]5526 [錄像]564A*
**[對比-]5553[色彩-]5533[亮度-]55D2 [電視]5655*
**********************************************************
*
* 作者:POWER
* 日期:2006年12月12號
* 斯凱科技主頁:www.armsky.net
* 斯凱科技論壇:www.armsky.net/bbs
*********************************************************************************************/
#include "reg52.h" // 包含頭文件

/* 與編譯器無關(guān)的數(shù)據(jù)類型定義 */
/********************************************************************************************/
typedef unsigned charuint8;// 無符號8位整型變量
typedef signed charint8; // 有符號8位整型變量
typedef unsigned short uint16; // 無符號16位整型變量
typedef signed short int16;// 有符號16位整型變量
typedef unsigned int uint32; // 無符號32位整型變量
typedef signed int int32;// 有符號32位整型變量
typedef floatfp32; // 單精度浮點數(shù)(32位長度)
typedef double fp64; // 雙精度浮點數(shù)(64位長度)
/********************************************************************************************/

/* 定義位變量 */
sbit P2_3 = P2 ^ 3;
sbit P2_2 = P2 ^ 2;
sbit P2_1 = P2 ^ 1;
sbit HW_IRQ = P3 ^ 2;// 定義38KHz一體化紅外接收頭與CPU的連接
sbit P1_7 = P1 ^ 7;

#define LED11_ON() (P1_7=0)// 定義"LED11_ON()"為AT89S52的P1.7腳輸出低電
// 平使LED11點亮
#define LED11_OFF()(P1_7=1)// 定義"LED11_OFF()"為AT89S52的P1.7腳輸出高電
// 平使LED11熄滅

#define SI2_H() (P2_3=1) // 定義"SI2_H()"為P2.3輸出高電平,作為74HC595_2的數(shù)據(jù)輸入信號
#define SI2_L() (P2_3=0) // 定義"SI2_L()"為P2.3輸出低電平,作為74HC595_2的數(shù)據(jù)輸入信號
#define RCK2_H()(P2_2=1) // 定義"RCK2_H()"為P2.2輸出高電平,作為74HC595_2的片選輸入信號
#define RCK2_L()(P2_2=0) // 定義"RCK2_L()"為P2.2輸出低電平,作為74HC595_2的片選輸入信號
#define SCK2_H()(P2_1=1) // 定義"SCK2_H()"為P2.1輸出高電平,作為74HC595_2的時鐘輸入信號
#define SCK2_L()(P2_1=0) // 定義"SCK2_L()"為P2.1輸出低電平,作為74HC595_2的時鐘輸入信號

static uint8 data IRCode[3],IRCON,IRCON2;
static uint8 data DT;
static uint8 data LED_SHOW;
/********************************************************************************************
* 函數(shù)名稱:SendDataTo74HC595_2()
* 功能:向74HC595_2發(fā)送一字節(jié)數(shù)據(jù)
* 入口參數(shù):data要發(fā)送的數(shù)據(jù)
* 出口參數(shù):無
* 注意:發(fā)送數(shù)據(jù)時,高位先發(fā)送
*********************************************************************************************/
void SendDataTo74HC595_2(uint8 dat)
{
uint8 i;

RCK2_L();// RCK2為低電平
for(i=0;i<8;i++) // 發(fā)送8位數(shù)據(jù)(1個字節(jié))
{
SCK2_L(); // SCK2為低電平

/* 設(shè)置SI2的輸出值 */
if((dat & 0x80)!=0)
{SI2_H();}// SI2輸出高電平
else
{SI2_L();}// SI2輸出低電平

dat<<=1;// 將要發(fā)送的1字節(jié)數(shù)據(jù)左移一位
SCK2_H(); // SCK2為高電平
}
RCK2_H();// RCK2為高電平
}

/********************************************************************************************
* 函數(shù)名稱:Timer0_Server()
* 功能:定時器0中斷服務(wù)程序
* 入口參數(shù):無
* 出口參數(shù):無
*********************************************************************************************/
void Timer0_Server(void) interrupt 1 using 2
{
TH0=0xFC;// 12M: TH0=0XFC;TL0=0XE0;11.0592:TH0=0XFD;TL0=0X1E;
TL0=0xE0;// 設(shè)定時值為800us500:FE0C

if(IRCON<3)
{
if(IRCON2<8)// 每中斷一次讀一次遙控接收頭的狀態(tài),每二次為遙控編碼中的一個位
{
IRCON2++;
IRCode[IRCON]=IRCode[IRCON]<<1;// 每讀一次放入變量中的二進制的一個位,每次左移一位
IRCode[IRCON]=IRCode[IRCON] | HW_IRQ;// 每八次填滿一個字節(jié),一個字節(jié)存放遙控編碼4個位
}
else
{
IRCON++; // 填滿一個字節(jié),指向下一個變量
IRCON2=0;// 計數(shù)清零
}
}
else
{
TR0 = 0;// 關(guān)閉定時器
ET0 = 0;// 定時器0中斷關(guān)閉
if((IRCode[1] != 0xFF) && (IRCode[2] != 0xFF))
{
if(IRCode[1] == 0x55)
{
switch(IRCode[2])
{
case 0xD2: // 按下[開關(guān)]鍵

DT = 1;
break;
case 0xD3: // 按下[靜音]鍵

DT = 1;
break;
case 0xAB: // 按下[1]鍵

DT = 1;
break;
case 0xAC: // 按下[2]鍵

DT = 1;
break;
case 0xAD: // 按下[3]鍵

DT = 1;
break;
case 0xB2: // 按下[4]鍵

DT = 1;
break;
case 0xB3: // 按下[5]鍵

DT = 1;
break;
case 0xB4: // 按下[6]鍵

DT = 1;
break;
case 0xB5: // 按下[7]鍵

DT = 1;
break;
case 0xCA: // 按下[8]鍵

DT = 1;
break;
case 0xCB: // 按下[9]鍵

DT = 1;
break;
case 0xAA: // 按下[0]鍵

DT = 1;
break;
case 0xCC: // 按下[單/雙]鍵

DT = 1;
break;
case 0x54: // 按下[調(diào)諧]鍵

DT = 1;
break;
case 0x2A: // 按下[音量+]鍵

DT = 1;
break;
case 0x2B: // 按下[音量-]鍵

DT = 1;
break;
case 0xD5: // 按下[召回]鍵

DT = 1;
break;
case 0xD4: // 按下[愛好]鍵

DT = 1;
break;
case 0x52: // 按下[對比+]鍵

DT = 1;
break;
case 0x53: // 按下[對比-]鍵

DT = 1;
break;
case 0x32: // 按下[色彩+]鍵

DT = 1;
break;
case 0x33: // 按下[色彩-]鍵

DT = 1;
break;
// case 0x26: // 按下[亮度+]鍵

// DT = 1;
// break;
// case 0xD2: // 按下[亮度-]鍵

// DT = 1;
// break;

default :
break;
}
}
if(IRCode[1] == 0x56)
{
switch(IRCode[2])
{
case 0xAA: // 按下[節(jié)目+]鍵

DT = 1;
break;
case 0xAB: // 按下[節(jié)目-]鍵

DT = 1;
break;
case 0xCD: // 按下[微調(diào)+]鍵

DT = 1;
break;
case 0xD2: // 按下[微調(diào)-]鍵

DT = 1;
break;
case 0xCB: // 按下[存儲]鍵

DT = 1;
break;
case 0xB4: // 按下[定時]鍵

DT = 1;
break;
case 0x4A: // 按下[錄象]鍵

DT = 1;
break;
case 0x55: // 按下[電視]鍵

DT = 1;
break;

default :
break;
}
}
}
}
}

/********************************************************************************************
* 函數(shù)名稱:INT0_Server()
* 功能:外部中斷0中斷服務(wù)程序
* 入口參數(shù):無
* 出口參數(shù):無
*********************************************************************************************/
void INT0_Server(void) interrupt 0 using 2
{
EX0 = 0; // 外部中斷0關(guān)閉
ET0 = 1; // 定時器0中斷打開
TH0=0xFc;
TL0=0xe0;// 設(shè)定時值為800us

for(IRCON=0;IRCON<3;IRCON++) IRCode[IRCON] = 0;
IRCON = 0;
IRCON2 = 0;// 計數(shù)清零

TR0 = 1; // 開始計數(shù)
}

/********************************************************************************************
* 函數(shù)名稱:main()
* 功能:紅外解碼。將38KHz一體化紅外接收頭接收到的來自SAA-3010T遙控器的遙控編碼在LED1~LED8
* 上顯示(LED8為高位,LED1為低位,亮表示1,滅表示0)。
*********************************************************************************************/
void main (void)
{
uint16 de;

TMOD = 0x01; // 定時器0方式1
EA = 1;// 允許CPU中斷
IT0 = 1; // INT0下降沿有效
EX0 = 1; // 開INT0中斷

SendDataTo74HC595_2(0xFF); // LED1~LED8熄滅

do
{

for(de=0;de<8000;de++) LED11_ON(); // LED11點亮
for(de=0;de<8000;de++) LED11_OFF();// LED11熄滅
if(DT)
{
EX0=0;// 關(guān)閉外中斷0
for(de=0;de<30000;de++) LED11_ON(); // 這里起到按鍵值正確后會有一個延時,防止重復(fù)按鍵
for(de=0;de<30000;de++) LED11_OFF();
DT = 0;
SendDataTo74HC595_2(~IRCode[2]);// LED1~LED8顯示當(dāng)前接收到的遙控編碼值
}
EX0 = 1; // 打開外部中斷0
}while(1);
}

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉