久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8956|回復: 11
收起左側

紅外遙控器+紅外一體化接收頭部分的仿真

  [復制鏈接]
ID:137190 發表于 2016-9-25 23:39 | 顯示全部樓層 |閱讀模式
     紅外線編碼是數據傳輸和家用電器遙控常用的一種通訊方法,其實質是一種脈寬調制的串行通訊。家電遙控
中常用的紅外線編碼電路有μPD6121G型HT622型和7461型等。
    這里就以這些電路的編碼格式來仿真怎樣使用單片機的捕獲中斷功能來實現其解碼。    紅外線通訊的發送部
分主要是把待發送的數據轉換成一定格式的脈沖,然后驅動紅外發光管向外發送數據。接收部分則是完成紅外
線的接收、放大、解調,還原成同步發射格式相同(但高、低電位剛好相反的脈沖信號)。這些工作通常由一體
化的接收頭來完成,主要輸出TTL兼容電平。最后通過解碼把脈沖信號轉換成數據,從而實現數據的傳輸。
   本單元就是來完成一體化接收頭接受到的紅外遙控器編碼后的輸出數據,所以只要單片機完成本單元的解碼任
務,并成功實現之后,只要將IR引腳接上紅外接收頭之后就可以實現紅外遙控的功能了。
  這是我積累前人經驗和自己實踐的成果,并且已經有硬件的成功案例,并非只是理論.

0.png 0.png
所有資料下載: 紅外遙控模擬.rar (88.78 KB, 下載次數: 107)
回復

使用道具 舉報

ID:437129 發表于 2024-12-19 14:05 | 顯示全部樓層
感謝樓主無私奉獻的分享。
原程序只有LCD屏幕顯示遙控器鍵值,發光二極管沒有點亮。
在樓主的基礎上增加了點燈功能,分享給大家。
#include "At89x51.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

sbit RELAY1= P1^0;  
sbit RELAY2= P1^1;  
sbit RELAY3= P1^2;  
sbit RELAY4= P1^3;  
sbit RELAY5= P1^4;  
sbit RELAY6= P1^5;  
sbit RELAY7= P1^6;  
sbit RELAY8= P1^7;  
#define JINGZHEN 48
#define TIME0TH ((65536-100*JINGZHEN/12)&0xff00)>>8   
#define TIME0TL ((65536-100*JINGZHEN/12)&0xff)
#define TIME1TH ((65536-5000*JINGZHEN/12)&0xff00)>>8   
#define TIME1TL ((65536-5000*JINGZHEN/12)&0xff)
#define uchar unsigned char
#define uint  unsigned int

code uchar  BitMsk[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,};

uint IrCount=0,Show=0,Cont=0;
uchar IRDATBUF[32],s[20];
uchar IrDat[5]={0,0,0,0,0};
uchar IrStart=0,IrDatCount=0;
extern void initLCM( void);                                                                                                      
extern void DisplayListChar(uchar X,uchar Y, unsigned char *DData);                    

void timer1int (void)  interrupt 3  using 3{         
EA=0;
TH1 = TIME1TH;  
TL1 = TIME1TL;
Cont++;
if(Cont>10)Show=1;
EA=1;
}
void timer0int (void)  interrupt 1  using 1{         
        uchar i,a,b,c,d;
        EA=0;
        TH0 = TIME0TH;  
        TL0 = TIME0TL;
        if(IrCount>500)IrCount=0;
        if(IrCount>300&&IrStart>0){IrStart=0;IrDatCount=0;IrDat[0]=IrDat[1]=IrDat[2]=IrDat[3]=0;IrCount=0;}
        if(IrStart==2)
        {
                IrStart=3;
                for(i=0;i<IrDatCount;i++)
                {
                        if(i<32)
                        {
                                a=i/8;

                                b=IRDATBUF[i];
                                c=IrDat[a];
                                d=BitMsk[i%8];
                                if(b>5&&b<14)c|=d;
                                if(b>16&&b<25)c&=~d;
                                IrDat[a]=c;
                        }
                }
                if(IrDat[2]!=~IrDat[3])
                {
                 IrStart=0;IrDatCount=0;IrDat[0]=IrDat[1]=IrDat[2]=IrDat[3]=0;IrCount=0;
                 
                }
                EA=1;
                return;
        }
        IrCount++;
        EA=1;
}
void int0() interrupt 0  using 0  {
        EA=0;
        if(IrStart==0)
        {
          IrStart=1;IrCount=0;TH0 = TIME0TH;TL0 = TIME0TL;
          IrDatCount=0;EA=1;
          return;
        }
        if(IrStart==1)
        {
         if(IrDatCount>0&&IrDatCount<33)
                 IRDATBUF[IrDatCount-1]=IrCount;
         if(IrDatCount>31)
                 {IrStart=2;TH0 = TIME0TH;TL0 = TIME0TL;EA=1;return;}
         if(IrCount>114&&IrCount<133&&IrDatCount==0)
                 {IrDatCount=1;}else if(IrDatCount>0)IrDatCount++;
        }                       
        IrCount=0;TH0 = TIME0TH;TL0 = TIME0TL;
        EA=1;
}

main()
{
        uchar *a,n;
        TMOD  |= 0x011;
        TH0 = TIME0TH;
        TL0 = TIME0TL;
        ET0=1;
        TR0=1;                              
        ET1=1;
        TR1=1;                              
        IT0 = 1;                                
        EX0 = 1;
        initLCM();
        EA=1;
        for(;;)
        {

                if(Show==1)
                {
                        Show=0;
                        Cont=0;
                        DisplayListChar(0,1,"Please keys");
                        a="";
                        switch (IrDat[3])
                        {
                      case 0x12:
                                    a="ON/C";
                                  break;
                      case 0x0b:
                                    a="+/-";
                                  break;
                      case 0x1a:
                                    a="+";
                                  break;
                      case 0x1e:
                                    a="-";
                                  break;
                      case 0x0e:
                                    a="/";
                                  break;
                      case 0x1d:
                                    a="MRC";
                                  break;
               
                      case 0x1f:
                                    a="M-";
                                  break;
                      case 0x1b:
                                    a="M+";
                                  break;
                      case 0x00:
                                    if(IrDat[2]==0xff)a="0";
                                  break;
                      case 0x01:
                                    a="1";
                                        RELAY1=!RELAY1;
                                  break;
                      case 0x02:
                                    a="2";
                                        RELAY2=!RELAY2;
                                  break;
               
                      case 0x03:
                                    a="3";
                                        RELAY3=!RELAY3;
                                  break;
                      case 0x04:
                                    a="4";
                                        RELAY4=!RELAY4;
                                  break;
                      case 0x05:
                                    a="5";
                                        RELAY5=!RELAY5;
                                  break;
                      case 0x06:
                                    a="6";
                                        RELAY6=!RELAY6;
                                  break;
                      case 0x07:
                                    a="7";
                                        RELAY7=!RELAY7;
                                  break;
                      case 0x08:
                                    a="8";
                                        RELAY8=!RELAY8;
                                  break;
               
                      case 0x09:
                                    a="9";
                                  break;
                      case 0x2A:
                                    a="%";
                                  break;
                      case 0x2B:
                                    a="X";
                                  break;
                      case 0x2C:
                                    a=".";
                                  break;
                      case 0x2D:
                                    a="=";
                                  break;
                      case 0x2E:
                                    a=" ";
                                  break;

                        }
                        n=strlen(a);
                        if(n>0)sprintf(s,"Key is [%s]",a);else sprintf(s,"Not Key         ",a);
                        DisplayListChar(0,0,s);
                }
        }
}

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:82098 發表于 2016-11-15 16:18 | 顯示全部樓層
謝謝分享!
回復

使用道具 舉報

ID:160495 發表于 2017-1-6 18:37 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:239143 發表于 2017-10-13 14:11 | 顯示全部樓層
666 謝謝分享
回復

使用道具 舉報

ID:267435 發表于 2018-7-18 21:23 | 顯示全部樓層
謝謝分享啊
回復

使用道具 舉報

ID:379996 發表于 2018-8-15 13:45 | 顯示全部樓層

謝謝分享啊
回復

使用道具 舉報

ID:303735 發表于 2018-9-29 11:57 | 顯示全部樓層
謝謝。
回復

使用道具 舉報

ID:469791 發表于 2019-1-17 17:40 | 顯示全部樓層
6666很棒
回復

使用道具 舉報

ID:603753 發表于 2022-4-6 08:17 | 顯示全部樓層
謝謝分享,非常有用
回復

使用道具 舉報

ID:1019111 發表于 2022-4-18 13:20 | 顯示全部樓層
請問這個程序可以改為2*2的矩陣鍵盤嘛?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99久久久国产精品 | 亚洲福利一区二区 | 国产精品欧美一区二区三区 | 亚洲三区在线观看 | 国产精品国产三级国产aⅴ原创 | 成人一区在线观看 | 欧美一区二区 | 玖操| 久久久久久精 | 九九九视频在线观看 | 日本精品一区二区在线观看 | 99精品久久久 | 国产欧美日韩一区 | 97caoporn国产免费人人 | 国产午夜亚洲精品不卡 | 中文字幕在线三区 | 国产一区日韩在线 | 国产视频第一页 | 色视频在线播放 | 亚洲精选一区二区 | 奇色影视 | 国产精品久久精品 | 久草在线在线精品观看 | 天天澡天天狠天天天做 | 亚洲视频在线观看 | 91国产视频在线 | 在线视频国产一区 | 一级毛片大全免费播放 | 国产在线视频在线观看 | 色婷婷一区二区三区四区 | 国产日韩欧美另类 | 亚洲精品女优 | 国产美女黄色 | 欧美日韩大片 | 韩三级在线观看 | 国产欧美一区二区三区在线播放 | 日韩免费一区二区 | 国内精品一区二区 | av一区二区三区四区 | 日韩久久精品电影 | 亚洲精品9999久久久久 |