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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

大神幫忙改一下C51單片機編碼收發程序

[復制鏈接]
跳轉到指定樓層
樓主

求助高手幫忙改一下程序  本人太菜了  改不出來 (功能要求:當K1按下,單片機U1的程序通過編碼發送到U2,當U2接收到編碼 LED亮,K1斷開LED滅。)現在是K1按下LED亮  松開K1按鍵LED不滅燈 。下面程序是齊全的不用下載可以的。 紅外發射接收.rar (39.21 KB, 下載次數: 6)

單片機源程序如下:

/*紅外發射編碼程序*/
#include<reg52.h>
sbit ir=P1^3;
sbit k1=P2^1;

unsigned int count, set_count;  
bit irflag,keyflag;   
unsigned char irsys[]={0x00,0xff};
unsigned char irdata,ircode;
void delay(unsigned int a)
{
        unsigned char i;
        while(--a!=0)
        for(i=300;i>0;i--);
}
void keyscan()
{
        if(k1==0)
        {
                delay(10);
                if(k1==0)
                {
                        keyflag=1;
                         irdata=0x01;
                        
                 }
        }
        }



void ir_sendbyte()    //紅外發送一個字節數據
{
        unsigned char i;
        for(i=0;i<8;i++)    //發送8位數據
        {
           set_count=43; //發送編碼中的0.56ms高電平
           irflag=1;      
           count=0;     
           TR0=1;     
           while(count<set_count);
           TR0=0;
           if(ircode&0x01) set_count=130; //判斷紅外編碼最低位,若為1則1.69ms的低電平
           else set_count=43;    //為0則0.565ms的低電平
           irflag=0;
           count=0;
           TR0=1;
           while(count<set_count);
           TR0=0;
           ircode=ircode>>1;  
        }
}
void ir_send()
{
        set_count=346; //發送編碼中的引導碼(4.5ms高電平+4.5ms低電平)
        irflag=1;   
        count=0;   
        TR0=1;
        while(count<set_count);
        TR0=0;
        set_count=346; //發送編碼中的4.5ms低電平
        irflag=0;
        count=0;
        TR0=1;
        while(count<set_count);
        TR0=0;
        ircode=irsys[0];  
        ir_sendbyte();
        ircode=irsys[1];
        ir_sendbyte();
        ircode=irdata;   //發送8位數據碼
        ir_sendbyte();
        ircode=~irdata; //發送8位數據反碼
        ir_sendbyte();
        set_count=43; //發送編碼中的0.56ms高電平
        irflag=1;
        count=0;
        TR0=1;
        while(count<set_count);
        TR0=0;
        irflag=0;
        delay(23);    //延時23ms(編碼中的23ms低電平)
        set_count=346; //發送編碼中的引導碼(4.5ms高電平+4.5ms低電平)
        irflag=1;
        count=0;
        TR0=1;
        while(count<set_count);
        TR0=0;
        set_count=346;
        irflag=0;
        count=0;
        TR0=1;
        while(count<set_count);
        TR0=0;
        set_count=43;   
        irflag=1;
        count=0;
        TR0=1;
        while(count<set_count);
        TR0=0;
        irflag=0;
        delay(23);  
}

void timer0_init()   
{
        EA=1;
        TMOD=0x02;     //定時0 8位自動重裝模式
        ET0=1;
        TH0=0xe6;   //定時13us,38K紅外矩形波,晶振24M
        TL0=0xe6;   
}
void main()
{
        timer0_init();
        count=0;     
        ir=0;
        irflag=0;     
        while(1)
        {
                keyscan();   
           if(keyflag)  
           {
                    delay(10);
                    ir_send();   
                    delay(500);
                    keyflag=0;   
                        delay(100);
                   }
        }
}

void timer0() interrupt 1  
{
        count++;
        if(irflag==1)
         ir=~ir; //有發射標志,則發射38khz的矩形波
        else
         ir=0;     
}

/*紅外編碼接收程序*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led1=P1^0;
uchar irtime;
uchar startflag;
uchar irdata[33];
uchar bitnum;
uchar irreceok;
uchar ircode[4];
uchar irprosok;
void display();
void display1();
void timer0init()
{
  TMOD=0x02;
  TH0=0x00;
  TL0=0x00;
  ET0=1;
  EA=1;
  TR0=1;

}

void int0init()
{
  IT0=1;
  EX0=1;
  EA=1;
}

void irpros()   
{
  uchar k,i,j;
  uchar value;
  k=1;
  for(j=0;j<4;j++)
  {
   for(i=0;i<8;i++)
   {
    value=value>>1;  
    if(irdata[k]>6)   
    {
     value=value | 0x80;
    }
    k++;
        if(k>33)
        k=1;
   }
   ircode[j]=value;
  }
}

void main()
{
led1=0;
  timer0init();
  int0init();
  while(1)
  {
   if(irreceok)
   {
    irpros();
   }
   display();
  }



}
void display()
{                                                                                          
                switch(ircode[2])
                        {
                                        case 0x02:led1=1;
                                        break;

                     }

        
        
}

void timer0 () interrupt 1
{
  irtime++;                                                                    
}

void int0 () interrupt 0
{
  if(startflag)
  {
   if(irtime>32) //檢測引導碼
   {
     bitnum=0;
   }
   irdata[bitnum]=irtime;
   irtime=0;
   bitnum++;
   if(bitnum==33)
   {
    bitnum=0;
    irreceok=1;
        startflag=0;

  }

}
  else
  {
   startflag=1;
   irtime=0;
  }
}

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲免费视频在线观看 | 在线看日韩av | 精品视频在线免费观看 | 成人国产精品久久 | 蜜桃视频一区二区三区 | 久久久久一区 | 精品乱子伦一区二区三区 | 中文视频在线 | 日日干日日射 | 一区二区三区国产精品 | 日韩一区二区在线播放 | 免费在线成人网 | 男人的天堂在线视频 | 日韩精品视频在线 | 亚洲精品视频免费观看 | 北条麻妃99精品青青久久 | 国产欧美日韩综合精品一区二区 | h漫在线观看| 一区二区三区韩国 | 欧美视频网 | 国产欧美一区二区三区在线播放 | 日韩三级在线观看 | 久久精品国产久精国产 | 久草精品视频 | 91久久久久久久久 | 久久国产三级 | 在线亚洲免费 | 国产日韩欧美二区 | 国产精品国产精品国产专区不卡 | 中文字幕第三页 | 国产91综合 | 日韩在线中文字幕 | 久久99国产精品久久99果冻传媒 | 成人天堂噜噜噜 | 日一区二区 | 伊人久久综合影院 | 91看片网站| 久久精品小视频 | 亚洲一区二区电影在线观看 | 色五月激情五月 | 日韩电影免费观看中文字幕 |