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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3452|回復: 5
打印 上一主題 下一主題
收起左側

求大神幫忙講解一下這個紅外接收程序

[復制鏈接]
跳轉到指定樓層
樓主
#include <reg52.H>
#include <intrins.h>

#define uchar unsigned char   
#define uint  unsigned int  

uchar code tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0X77,0X7c,0X39,0X5e,0X79,0X71,0x00};

sbit IR=P3^2;
sbit we1=P1^0;
sbit we2=P1^1;
sbit we3=P1^2;
sbit we4=P1^3;                 

uchar        N[4];                                 //識別碼,數據碼存放
uchar   X1,X2;

void XSQ(void);
void YS(uchar time);

/****************** 主函數 *******************/
void main(void)
{
       
  X1=X2=0;


  IT0 = 1;
  EX0 = 1;
  EA  = 1;

  while(1)
  {
   XSQ();
  }
}

/**********************數碼管顯示函數************************/
void XSQ(void)
{
         we1=0;
     we2=0;
         we3=0;
         we4=0;
     we1=0;P0=tab[X1];we2=1;YS(1);       
     we2=0;P0=tab[X2];we1=1;YS(1);
}

/********************** 外部中斷函數************************/
void exint0() interrupt 0
{          
   uint cnt;
   uchar i;

   EX0 = 0;
   cnt = 0;       
       
   while(!IR)
   {
   cnt++;
    }                             //記錄引導碼時間
   if(cnt < 1000)
                   {EX0=1;return;}                   //9ms的計數值(12MHz:1000< cnt <1500)
          
   cnt = 0;
                            
   while(IR)
    {
       
   if(cnt++>400)
                   {EX0=1;return;}
                }        //防卡死,超時保護(12MHz: > 300)   
   if(cnt<200)
                   {EX0=1;return;}
                           //(12MHz不分頻: <260)            
          
   for(i=0; i<32; i++)                             //讀取32位位碼
       {
         cnt = 0;                                                                                                                                               
         while(!IR);                       
         while(IR)
                 if(cnt++ > 200)
                         {EX0=1;return;}  //超時保護(12MHz:>=200)
         N[i/8] >>= 1;
         if(cnt>60) N[i/8] |= 0x80;                //0和1的計數界線(12MHz:< 109)   
       }

         if(N[0] == ~N[1] && N[2] == ~N[3])            //校驗識別碼,數據碼       
           {
          
                X1 = N[2]/16;
                X2 = N[2]%16;
           }

        EX0 = 1;
                         
}

/***************************************************************
延時程序
1ms×time       (晶振=12MHz)
***************************************************************/
void YS(uchar time)
{
     uchar i,j;
         for(i=0; i<time; i++)
     for(j=0; j<247; j++)_nop_();

}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:160317 發表于 2017-4-30 22:37 | 只看該作者
void exint0() interrupt 0
{         
   uint cnt;
   uchar i;

   EX0 = 0;
   cnt = 0;        
        
   while(!IR)
   {
   cnt++;
    }                             //記錄引導碼時間
   if(cnt < 1000)
                   {EX0=1;return;}                   //9ms的計數值(12MHz:1000< cnt <1500)
           
   cnt = 0;
                           
   while(IR)
    {
        
   if(cnt++>400)
                   {EX0=1;return;}
                }        //防卡死,超時保護(12MHz: > 300)   
   if(cnt<200)
                   {EX0=1;return;}
                           //(12MHz不分頻: <260)            
           
   for(i=0; i<32; i++)                             //讀取32位位碼
       {
         cnt = 0;                                                                                                                                                
         while(!IR);                       
         while(IR)
                 if(cnt++ > 200)
                         {EX0=1;return;}  //超時保護(12MHz:>=200)
         N[i/8] >>= 1;
         if(cnt>60) N[i/8] |= 0x80;                //0和1的計數界線(12MHz:< 109)   
       }

         if(N[0] == ~N[1] && N[2] == ~N[3])            //校驗識別碼,數據碼        
           {
           
                X1 = N[2]/16;
                X2 = N[2]%16;
           }

        EX0 = 1;
                        
}
他的這個時間是怎么算的啊????求大神帶我飛啊!!!
回復

使用道具 舉報

板凳
ID:160317 發表于 2017-4-30 23:18 | 只看該作者
還有超時保護是什么意思啊???
回復

使用道具 舉報

地板
ID:167933 發表于 2017-4-30 23:38 | 只看該作者
建議你先看一下紅外通信原理,紅外接收數據解碼的方式跟編碼類似。時間的計算也是根據數據格式當中的高低電平的時間來定的。我最近也在學習紅外通信這一塊,希望能對你有所幫助。相互學習,共同進步。

QQ圖片20170430233609.png (36.33 KB, 下載次數: 62)

QQ圖片20170430233609.png

QQ圖片20170430233617.png (37.02 KB, 下載次數: 58)

QQ圖片20170430233617.png
回復

使用道具 舉報

5#
ID:160317 發表于 2017-5-1 14:52 來自手機 | 只看該作者
這個我都知道,我想問這個程序中的38k是怎么算出來的
回復

使用道具 舉報

6#
ID:160317 發表于 2017-5-1 14:53 來自手機 | 只看該作者
不是,看錯了,我想問cnt++的時間怎么算出來的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲视频免费 | www.99re| 国产麻豆乱码精品一区二区三区 | 亚洲黄色在线 | 成人网址在线观看 | 偷拍自拍在线观看 | 久久99精品久久久久久噜噜 | 国产1区 | 色性av | 美女激情av | 国产中文在线 | 亚洲 欧美 日韩在线 | 亚洲欧美国产毛片在线 | 亚卅毛片 | 国产一区二区在线播放 | 国产欧美日韩在线一区 | 亚洲精品高清视频 | 欧美乱码精品一区二区三区 | 九九精品在线 | 精品久久久网站 | 在线观看 亚洲 | 日韩一级免费电影 | 精品欧美一区二区三区免费观看 | 日本a级大片 | 在线观看中文字幕一区二区 | 国产精品久久久久久久一区二区 | 成人性视频在线播放 | 在线免费观看黄视频 | 国产一级片 | 激情欧美日韩一区二区 | 一区二区三区欧美 | 毛片1| 视频1区2区 | 久草热播 | www国产成人免费观看视频,深夜成人网 | 亚洲精品久久久久久久不卡四虎 | 免费毛片网站在线观看 | 亚洲成人免费在线观看 | 亚洲精品中文字幕 | 亚洲高清在线观看 | 日韩专区中文字幕 |