色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51單片機軟件解碼程序的核心要點

GReq_mcu168 ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-11-21 09:30 ? 次閱讀

紅外接收頭的型號有很多HS0038 VS838等 功能大致相同,只是引腳封裝不同。

紅外接收有幾種統(tǒng)一的編碼方式,采樣哪種編碼方式取決于遙控器使用的芯片,接收頭收到的都是一樣的。

電視遙控器使用的是專用集成發(fā)射芯片來實現(xiàn)遙控碼的發(fā)射,如東芝TC9012,飛利浦AA3010T等,通常彩電遙控信號的發(fā)射,就是將某個按鍵所對應(yīng)的控制指令和系統(tǒng)碼(由0和1組成的序列),調(diào)制在38KHz的載波上,然后經(jīng)放大、驅(qū)動紅外發(fā)射管將信號發(fā)射出去。不同公司的遙控芯片,采樣的遙控碼格式也不一樣,較普遍的有兩種,一種NEC標準,一種是PHILIPS標準。

NEC標準:遙控載波的頻率為38KHz(占空比1:3)當某個鍵按下時,系統(tǒng)首先發(fā)射一個完整的全碼,如果按鍵超過108ms仍未松開,接下來發(fā)射的代碼(連發(fā)代碼)將由起始碼(9ms)和結(jié)束碼(2.5ms)組成。

一個完整的全碼 = 引導碼 +用戶碼 +用戶碼 + 數(shù)據(jù)碼 + 數(shù)據(jù)碼 + 數(shù)據(jù)反碼。

其中,引導碼高電平9ms,低電平4.5ms;系統(tǒng)碼8位,數(shù)據(jù)碼8位,共32位;其中前16位為用戶識別碼,能區(qū)別不同的紅外遙控設(shè)備,以防止不同的機種遙控碼互相干擾。后16位為8位的操作碼和8位的操作反碼,用于核對數(shù)據(jù)是否接收準確。收端根據(jù)數(shù)據(jù)碼做出應(yīng)該執(zhí)行上面動作的判斷。

連發(fā)代碼是在持續(xù)按鍵時發(fā)送的碼。它告知接收端。某鍵是在被連續(xù)的按著。

NEC標準下的發(fā)射碼表示 發(fā)射數(shù)據(jù)0時用”0.56ms高電平 + 0.565ms低電平 = 1.125ms”表示; 數(shù)據(jù)1用”高電平0.56ms + 1.69ms = 2.25ms”表示。 遙控器發(fā)射信號:

需要注意的是:當一體化接收頭收到38kHz紅外信號時,輸出端輸出低電平,否則為高電平。所以一體化接收頭輸出的波形和發(fā)射波形是反向的

PHILIPS標準: 載波頻率38KHz:沒有筒,點按鍵時,控制碼1和0之間切換,若持續(xù)按鍵,則控制碼不變。 一個全碼 = 起始碼’11’ +控制碼 + 用戶碼 + 用戶碼 數(shù)據(jù)0用“低電平1.778ms + 高電平1.778ms”表示; 數(shù)據(jù)1用“高電平1.778ms + 低電平1.778ms”表示。 連續(xù)碼重復延時114ms。

所謂的解碼就是一個區(qū)分脈沖寬度的過程。紅矮信號的0和1是通過脈沖持續(xù)時間的長短來區(qū)分的,

我的遙控器使用的是NEC標準的WD6122芯片,遙控器編碼如下:

以下是我用1602顯示紅外接收頭接收到編碼的程序: ①這個是對1602操作的函數(shù)

------------------------------------------------*/

#include "1602.h"

#include "delay.h"

#define CHECK_BUSY

sbit RS = P2^4; //定義端口

sbit RW = P2^5;

sbit EN = P2^6;

#define RS_CLR RS=0

#define RS_SET RS=1

#define RW_CLR RW=0

#define RW_SET RW=1

#define EN_CLR EN=0

#define EN_SET EN=1

#define DataPort P0

/*------------------------------------------------

判忙函數(shù)

------------------------------------------------*/

bit LCD_Check_Busy(void)

{

#ifdef CHECK_BUSY

DataPort= 0xFF;

RS_CLR;

RW_SET;

EN_CLR;

_nop_();

EN_SET;

return (bit)(DataPort & 0x80);

#else

return 0;

#endif

}

/*------------------------------------------------

寫入命令函數(shù)

------------------------------------------------*/

void LCD_Write_Com(unsigned char com)

{

// while(LCD_Check_Busy()); //忙則等待

DelayMs(5);

RS_CLR;

RW_CLR;

EN_SET;

DataPort= com;

_nop_();

EN_CLR;

}

/*------------------------------------------------

寫入數(shù)據(jù)函數(shù)

------------------------------------------------*/

void LCD_Write_Data(unsigned char Data)

{

//while(LCD_Check_Busy()); //忙則等待

DelayMs(5);

RS_SET;

RW_CLR;

EN_SET;

DataPort= Data;

_nop_();

EN_CLR;

}

/*------------------------------------------------

清屏函數(shù)

------------------------------------------------*/

void LCD_Clear(void)

{

LCD_Write_Com(0x01);

DelayMs(5);

}

/*------------------------------------------------

寫入字符串函數(shù)

------------------------------------------------*/

void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)

{

if (y == 0)

{

LCD_Write_Com(0x80 + x); //表示第一行

}

else

{

LCD_Write_Com(0xC0 + x); //表示第二行

}

while (*s)

{

LCD_Write_Data( *s);

s ++;

}

}

/*------------------------------------------------

寫入字符函數(shù)

------------------------------------------------*/

/* void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)

{

if (y == 0)

{

LCD_Write_Com(0x80 + x);

}

else

{

LCD_Write_Com(0xC0 + x);

}

LCD_Write_Data( Data);

}*/

/*------------------------------------------------

初始化函數(shù)

------------------------------------------------*/

void LCD_Init(void)

{

LCD_Write_Com(0x38); /*顯示模式設(shè)置*/

DelayMs(5);

LCD_Write_Com(0x38);

DelayMs(5);

LCD_Write_Com(0x38);

DelayMs(5);

LCD_Write_Com(0x38);

LCD_Write_Com(0x08); /*顯示關(guān)閉*/

LCD_Write_Com(0x01); /*顯示清屏*/

LCD_Write_Com(0x06); /*顯示光標移動設(shè)置*/

DelayMs(5);

LCD_Write_Com(0x0C); /*顯示開及光標設(shè)置*/

}

②延時函數(shù)

#include "delay.h"

/*------------------------------------------------

uS延時函數(shù),含有輸入參數(shù) unsigned char t,無返回值

unsigned char 是定義無符號字符變量,其值的范圍是

0~255 這里使用晶振12M,精確延時請使用匯編,大致延時

長度如下 T=tx2+5 uS

------------------------------------------------*/

void DelayUs2x(unsigned char t)

{

while(--t);

}

/*------------------------------------------------

mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值

unsigned char 是定義無符號字符變量,其值的范圍是

0~255 這里使用晶振12M,精確延時請使用匯編

------------------------------------------------*/

void DelayMs(unsigned char t)

{

while(t--)

{

//大致延時1mS

DelayUs2x(245);

DelayUs2x(245);

}

}

③以下是主函數(shù)

#include //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義

#include"1602.h"

#include"delay.h"

sbit IR=P3^2; //紅外接口標志

char code Tab[16]="0123456789ABCDEF";

/*------------------------------------------------

全局變量聲明

------------------------------------------------*/

unsigned char irtime;//紅外用全局變量

bit irpro_ok,irok;

unsigned char IRcord[4];

unsigned char irdata[33];

unsigned char TempData[16];

/*------------------------------------------------

函數(shù)聲明

------------------------------------------------*/

void Ir_work(void);

void Ircordpro(void);

/*------------------------------------------------

定時器0中斷處理

------------------------------------------------*/

void tim0_isr (void) interrupt 1 using 1

{

irtime++; //用于計數(shù)2個下降沿之間的時間

}

/*------------------------------------------------

外部中斷0中斷處理

------------------------------------------------*/

void EX0_ISR (void) interrupt 0 //外部中斷0服務(wù)函數(shù)

{

static unsigned char i; //接收紅外信號處理

static bit startflag; //是否開始處理標志位

if(startflag)

{

if(irtime<63&&irtime>=33)//引導碼 TC9012的頭碼,9ms+4.5ms

i=0;

irdata[i]=irtime;//存儲每個電平的持續(xù)時間,用于以后判斷是0還是1

irtime=0;

i++;

if(i==33)

{

irok=1;

i=0;

}

}

else

{

irtime=0;

startflag=1;

}

}

/*------------------------------------------------

定時器0初始化

------------------------------------------------*/

void TIM0init(void)//定時器0初始化

{

TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值

TH0=0x00; //重載值

TL0=0x00; //初始化值

ET0=1; //開中斷

TR0=1;

}

/*------------------------------------------------

外部中斷0初始化

------------------------------------------------*/

void EX0init(void)

{

IT0 = 1; //指定外部中斷0下降沿觸發(fā),INT0 (P3.2)

EX0 = 1; //使能外部中斷

EA = 1; //開總中斷

}

/*------------------------------------------------

鍵值處理

------------------------------------------------*/

void Ir_work(void)

{

TempData[0] = Tab[IRcord[0]/16]; //處理客戶碼

TempData[1] = Tab[IRcord[0]%16];

TempData[2] = '-';

TempData[3] = Tab[IRcord[1]/16]; //處理客戶碼

TempData[4] = Tab[IRcord[1]%16];

TempData[5] = '-';

TempData[6] = Tab[IRcord[2]/16]; //處理數(shù)據(jù)碼

TempData[7] = Tab[IRcord[2]%16];

TempData[8] = '-';

TempData[9] = Tab[IRcord[3]/16]; //處理數(shù)據(jù)反碼

TempData[10] = Tab[IRcord[3]%16];

LCD_Write_String(5,1,TempData);

irpro_ok=0;//處理完成標志

}

/*------------------------------------------------

紅外碼值處理

------------------------------------------------*/

void Ircordpro(void)//紅外碼值處理函數(shù)

{

unsigned char i, j, k;

unsigned char cord,value;

k=1;

for(i=0;i<4;i++) ? ? ?//處理4個字節(jié)

{

for(j=1;j<=8;j++) //處理1個字節(jié)8位

{

cord=irdata[k];

if(cord>7)//大于某值為1,這個和晶振有絕對關(guān)系,這里使用12M計算,此值可以有一定誤差

value|=0x80;

if(j<8)

{

value>>=1;

}

k++;

}

IRcord[i]=value;

value=0;

}

irpro_ok=1;//處理完畢標志位置1

}

/*------------------------------------------------

主函數(shù)

------------------------------------------------*/

void main(void)

{

EX0init(); //初始化外部中斷

TIM0init(); //初始化定時器

LCD_Init(); //初始化液晶

DelayMs(20); //延時有助于穩(wěn)定

LCD_Clear(); //清屏

LCD_Write_String(0,0,"www.doflye.net");

LCD_Write_String(0,1,"Code:");

while(1)//主循環(huán)

{

if(irok) //如果接收好了進行紅外處理

{

Ircordpro();

irok=0;

}

if(irpro_ok) //如果處理好后進行工作處理,如按對應(yīng)的按鍵后顯示對應(yīng)的數(shù)字等

{

Ir_work();

}

}

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 51單片機
    +關(guān)注

    關(guān)注

    274

    文章

    5702

    瀏覽量

    123494
  • 集成發(fā)射芯片
    +關(guān)注

    關(guān)注

    0

    文章

    1

    瀏覽量

    731

原文標題:紅外遙控系統(tǒng)原理附51單片機軟件解碼程序

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    最簡單的51單片機紅外遙控解碼程序

    介紹本人自編的51單片機紅外遙控解碼程序,自認為是可能是史上最簡的紅外遙控解碼程序。
    發(fā)表于 03-20 10:05 ?1.6w次閱讀

    51單片機流水燈程序

    51單片機流水燈程序 51單片機流水燈程序
    發(fā)表于 12-21 15:52 ?170次下載

    Ev1527的pic單片機軟件接收解碼程序

    Ev1527的pic單片機軟件接收解碼程序
    發(fā)表于 02-27 16:57 ?89次下載

    51單片機程序下載軟件下載

    51單片機程序下載軟件燒寫程序
    發(fā)表于 04-08 17:20 ?14次下載

    51單片機有哪些常用程序51單片機4個常用程序匯總

    本文檔的主要內(nèi)容詳細介紹的是51單片機有哪些常用程序?51單片機4個常用程序匯總。
    發(fā)表于 09-05 16:30 ?27次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>有哪些常用<b class='flag-5'>程序</b>?<b class='flag-5'>51</b><b class='flag-5'>單片機</b>4個常用<b class='flag-5'>程序</b>匯總

    使用51單片機進行PS2鍵盤解碼實驗的C語言程序免費下載

    本文檔的主要內(nèi)容詳細介紹的是使用51單片機進行PS2鍵盤解碼實驗的C語言程序免費下載。
    發(fā)表于 08-26 17:30 ?10次下載
    使用<b class='flag-5'>51</b><b class='flag-5'>單片機</b>進行PS2鍵盤<b class='flag-5'>解碼</b>實驗的C語言<b class='flag-5'>程序</b>免費下載

    最新的51單片機GPS解碼程序免費下載

    本文的主要內(nèi)容是最新的51單片機GPS解碼程序免費下載。
    發(fā)表于 06-26 17:43 ?6次下載
    最新的<b class='flag-5'>51</b><b class='flag-5'>單片機</b>GPS<b class='flag-5'>解碼</b><b class='flag-5'>程序</b>免費下載

    51單片機燒寫程序的方法

    STC89C51是應(yīng)用廣泛的51單片機,很多人都是通過該單片機入門學習的,單片機的學習需要勤動手。單片機
    的頭像 發(fā)表于 04-04 15:54 ?2.4w次閱讀

    基于51單片機的1602遙控解碼設(shè)計資料源程序文件

    基于51單片機的1602遙控解碼設(shè)計資料源程序文件
    發(fā)表于 04-27 15:21 ?2次下載

    基于51單片機的VB遙控播放器紅外遙控解碼設(shè)計源程序

    基于51單片機的VB遙控播放器紅外遙控解碼設(shè)計資料源程序
    發(fā)表于 04-27 15:08 ?0次下載

    基于51單片機的紅外遙控解碼數(shù)碼管顯示設(shè)計資料源程序

    基于51單片機的紅外遙控解碼數(shù)碼管顯示設(shè)計資料源程序
    發(fā)表于 04-26 15:35 ?5次下載

    基于51單片機的遙控解碼通過電腦串口顯示設(shè)計資料源程序

    基于51單片機的遙控解碼通過電腦串口顯示設(shè)計資料源程序
    發(fā)表于 04-26 15:19 ?1次下載

    基于51單片機數(shù)碼管遙控解碼設(shè)計資料源程序

    基于51單片機數(shù)碼管遙控解碼設(shè)計資料源程序
    發(fā)表于 04-26 15:13 ?0次下載

    基于89C51單片機的紅外解碼1602液晶顯示源程序

    基于89C51單片機的紅外解碼1602液晶顯示源程序
    發(fā)表于 05-15 11:07 ?4次下載

    基于89C51單片機的紅外解碼數(shù)碼管顯示源程序

    基于89C51單片機的紅外解碼數(shù)碼管顯示源程序
    發(fā)表于 05-15 11:07 ?3次下載
    主站蜘蛛池模板: 九九在线中文字幕无码| 久久re亚洲在线视频| 免费精品国偷自产在线| 十九岁在线观看免费完整版电影| 亚洲人成电影网站| 国产成人女人在线视频观看| 久久午夜伦理| 杨幂被视频在线观看| 国产亚洲精品久久久久久一区二区| 欧美z000z猪| 18禁无遮遮挡羞漫画免费阅读 | chinese耄耋70老太性| 久久精品视频91| 夜夜躁日日躁狠狠| 国产亚洲精品首页在线播放| 偷拍国产精品在线播放| 虫族bl文全肉高h| 肉伦禁忌小说np| 大屁股国产白浆一二区| 日韩精品一区VR观看| 大香交伊人| 小色哥影院| 国外成人电台| 永久免费在线视频| 久久香蕉国产线看观看| 最近2019中文字幕MV免费看| 老鸭窝毛片| Chineseman瘦老头77| 人人澡人人爽人人精品| 东北老妇xxxxhd| 丝袜美女被艹| 国产最新地址| 中文字幕永久在线| 欧美视频精品一区二区三区| 成人综合在线观看| 午夜伦理电影在线观免费| 激情欧美日韩一区二区| 91热久久免费频精品99欧美| 日本久久不射| 花蝴蝶高清影视视频在线播放| 影音先锋影院中文无码|