亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 學習型紅外線遙控程序.c

?? 以C語言和Java語言、嵌入式開發、算法實現為主
?? C
字號:
/*************晶體為11.0592M,波特率9600bps
***************學習型紅外線遙控程序*******/
#include <AT89X51.H>
void Ewen(void);
void Ewds(void);
void Delay(void);
void Irda(void);
void Study(void);
void Output(unsigned int h);
void Comput(unsigned char outdata);
void Erase(unsigned char Address);
unsigned int Read(unsigned char Address);
unsigned char Display(unsigned char inAddress);
void Write(unsigned char Address,unsigned int InData);
unsigned int Both(unsigned char data1,unsigned char data2);
//Sys_Ma系統碼
//Sys_FMa系統反碼、
//User_Ma用戶碼
//User_FMa用戶反碼
unsigned char data Sys_Ma _at_ 0x1A;//分別存放紅外線譯碼后的數據
unsigned char data Sys_FMa _at_ 0x1B;
unsigned char data User_Ma _at_ 0x1C;
unsigned char data User_FMa _at_ 0x1D;
sbit IrInput=P3^2;       //紅外線輸入引腳,可自定義
sbit Study_Key=P3^6;      //學習按鍵,可自定義
sbit Led2=P2^5;         //接收成功、學習成功指示
sbit Led1=P2^6;         //空閑指示
sbit Dout=P2^3;        //at93c16--DO
sbit Din=P2^2;         //at93c16--DI
sbit sk=P2^1;          //at93c16--SK
sbit cs=P2^0;          //at93c16--CS

/*******************紅外線查詢子程序*******************/
void Irda(void)
 {
    /* #pragma asm
     MOV R6,#10
SB:
     MOV    R4,#19     ;延時880微秒
D1:
     MOV    R5,#19
     DJNZ   R5,$
     DJNZ   R4,D1

     JB P3.2,EXIT      ;延時882微秒后判斷P3.2腳是為1
     DJNZ R6, SB       ;在8820微秒內如P3.2為1就退出
     JNB P3.2, $       ;等待高電平避開9毫秒低電平引導脈沖

     MOV    R4,#10     ;延時4740微秒
D2:  MOV    R5,#218
     DJNZ   R5,$
     DJNZ   R4,D2
                       ;延時4.74毫秒避開4.5毫秒的結果碼

     MOV R1,#1AH       ;設定1AH為起始RAM區
     MOV R2,#4         ;接收從1AH到1DH,用于存放操作碼和操作反碼
PP:
     MOV R3,#8         ;每組數據為8位

SS:
     JNB P3.2,$        ;等待地址碼第一位的高電平信號
     MOV    R4,#19     ;延時880微秒
D5:
     MOV    R5,#19
     DJNZ   R5,$
     DJNZ   R4,D5
                      ;高電平開始后882微秒判斷信號的高低電平
     MOV C,P3.2       ;將P3.2引腳此時的電平狀態0或1存入C中
     JNC TT           ;如果為0就跳轉到TT

     MOV R4,#2        ;延時1000微秒
     D6:MOV R5,#248
     DJNZ R5,$
     DJNZ R4,D6
                      ;檢測到高電平1的話延時1毫秒等待脈沖高電平結束
TT:
     MOV A,@R1        ;將R1中地址的給A
     RRC A            ;將C中的值0或1移入A中的最低位
     MOV @R1,A        ;
     DJNZ R3,SS       ;接收滿8位換一個內存
     INC R1           ;對R1中的值加1,換下一個RAM
     DJNZ R2,PP       ;接收完所有數據
EXIT:
#pragma endasm */
 }
/******************紅外線學習程序***************************/
 void Study(void)
 {
   unsigned char Address[9]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
                            //
   unsigned int j,h,rd,i;
   unsigned char k,t,Addr;
   EX0=0;   //關外部中斷0
   k=0;     //給"K"變量賦初值
   t=0;     //給"t"變量賦初值
   Led1=0;  //"學習燈亮"
   for(j=0;j<80;j++)        //進入"for"循環共80次
      {                     //"for"循環開始
       for(k=0;k<9;k++)     //進入"for"循環共9次
          {                 //"for"循環開始
	   Delay();         //延時
begin:     i=20000;         //begin:是goto語句中的標號
	   while(Study_Key) //學習鍵按下了嗎?
	   {                //學習鍵未按下
            Addr=Display(k);//取EEPROM的存儲地址
	    if(!IrInput) goto Irda;//有紅外線到來跳轉到"Irda"解碼程序。
	    if(!(i--))  goto end;  //如果時間大于8s就退出while學習程序
	    }   //退出while語句
        Delay();//延時
	}       //"for"循環共9次結束
       }        //"for"循環共80次結束
   goto end;    //8秒內無任何操作轉到end;標題語句處

Irda:           //Irda:是goto語句中的標號
   Irda();                  //調用"Irda"解碼程序
   h=Both(Sys_FMa,User_FMa);//將兩個單字節數(Sys_FMa,User_FMa)裝配成一個雙字節數
   if((Sys_Ma!=~Sys_FMa)||(User_Ma!=~User_FMa))//~按位取反
     {           //校驗錯誤則接收到的為錯誤碼
      goto begin;//返回begin:處
     }
for(i=0;i<=8;i++)
   {                           //進入for循環
    if(h==Read(Address[i]))    //將要寫入的數據和EEPROM中的八數據比較,相同就擦除
      {                        //防止在存儲單元中出現相同的數據
 	Erase(Address[i]);     //擦除at93c46的指定單元程序
      }                        //退出if語句
   }                           //退出for循環
  Write(Addr,h);               //寫at93c46指定單元程序
  rd=Read(Addr);               //at93c46讀程序
  if(rd==h)                    //將讀出的數據和寫入的比較
   {
      Delay();//延時
      Led2=0;                //學習成功Led指示
      Delay();
      Led2=1;
      Delay();
      Led2=0;                //學習成功Led指示
      Delay();
      Led2=1;
    }
end:
     P0=0xff;    //數碼管顯示為0
     Sys_FMa=User_FMa=0;
 EX0=1;//開外中斷0
 }


/*********************擦/寫啟動*******************/
void Ewen(void)
{
   unsigned char i,InData;//完成寫放數據:10011XXXX
   cs=0;
   sk=0;
   cs=1;
   InData=0x98;
   for(i=9;i!=0;i--)
     {
        Din=InData&0x80;
        sk=1;
        sk=0;
        InData<<=1;
     }
   cs=0;
}
/*********************擦/寫屏蔽*******************/

void Ewds(void)
{
   unsigned char i,InData;     //完成寫放數據:10000XXXX
   cs=0;
   sk=0;
   cs=1;
   InData=0x80;
   for(i=9;i!=0;i--)
     {
        Din=InData&0x80;
        sk=1;
        sk=0;
        InData<<=1;
     }
   cs=0;
}
/*********************at93c46讀程序*******************/
unsigned int Read(unsigned char Address)
{
  unsigned char i;
  unsigned int result;
  sk=0;
  Din=1;
  cs=0;
  cs=1;
  sk=1;
  sk=0;
  Address=Address&0x3f|0x80;      //完成寫放數據:110---加---五位地址
  for(i=8;i!=0;i--)
    {
      Din=Address&0x80;
      sk=1;
      sk=0;
      Address<<=1;
     }
  Dout=1;
  for(i=16;i!=0;i--)
    {
      sk=1;
      result=(result<<1)|Dout;
      sk=0;
    }
  cs=0;
  return(result);
}


/*********************at93c46寫指定單元程序*******************/

void Write(unsigned char Address,unsigned int InData)
{
  unsigned char i;
  Ewen();
  sk=0;
  Din=1;
  cs=0;
  cs=1;
  sk=1;
  sk=0;
  Address=Address&0x3f|0x40;     //完成寫放數據:101---加---五位地址
  for(i=8;i!=0;i--)
    {
      Din=Address&0x80;
      sk=1;
      sk=0;
      Address<<=1;
    }
  for(i=16;i!=0;i--)
    {
       Din=InData&0x8000;
       sk=1;
       sk=0;
       InData<<=1;
     }
  cs=0;
  Dout=1;
  cs=1;
  sk=1;
  while(Dout==0)   //忙
   {
     sk=0;
     sk=1;
    }
  sk=0;
  cs=0;
  Ewds();
}


/*********************at93c46擦除指定單元程序*******************/

void Erase(unsigned char Address)
{
  unsigned char i;
  Ewen();
  sk=0;
  Din=1;
  cs=0;
  cs=1;
  sk=1;
  sk=0;
  Address|=0xc0;
  for(i=8;i!=0;i--)
    {
      Din=Address&0x80;   //完成寫放數據:111---加---五位地址
      sk=1;
      sk=0;
      Address<<=1;
    }
  cs=0;
  Dout=1;
  cs=1;
  sk=1;
  while(Dout==0)
    {
      sk=0;
      sk=1;
    }
  sk=0;
  cs=0;
  Ewds();
}

/*將兩個單字節數裝配成一個雙字節數*/
unsigned int Both(unsigned char data1,unsigned char data2)
{
  unsigned int dat;
  dat|=data1;
  dat<<=8;
  dat|=data2;
  return(dat);
}

/*顯示輸出和取EEPROM地址*/
unsigned char Display(unsigned char inAddress)
{
  unsigned char Address[9]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};//存放EEPROM的存儲地址
  unsigned char disp[9]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};//存放顯示數據
  unsigned char Addr1,i;
  for(i=0;i<=8;i++)
    {
     if(inAddress==i)
       {
         Addr1=Address[inAddress];//取EEPROM地址
         P0=disp[inAddress];      //顯示輸出
         break;
       }
     else  P0=disp[0];
    }
return(Addr1);
}

/*顯示輸出和控制輸出*/
void Output(unsigned int h)
{
 unsigned char Address[9]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
 unsigned char disp[9]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80};
 Led2=0;//學習成功
 if(h==Read(Address[0]))
   {        //無對應控制碼
    P1=0xff;//關所有的繼電器
    P0=disp[0];goto end;//顯示0
   }
 if(h==Read(Address[1]))
   {
    P1_0=~P1_0;//操作1號繼電器
    P0=disp[1];goto end;//顯示1
   }
 if(h==Read(Address[2]))
   {
    P1_1=~P1_1;//操作2號繼電器
    P0=disp[2];goto end;//顯示2
   }
 if(h==Read(Address[3]))
   {
    P1_2=~P1_2;//操作2號繼電器
    P0=disp[3];goto end;//顯示3
   }
 if(h==Read(Address[4]))
   {
    P1_3=~P1_3;//操作3號繼電器
    P0=disp[4];goto end;//顯示4
   }
 if(h==Read(Address[5]))
   {
    P1_4=~P1_4;//操作4號繼電器
    P0=disp[5];goto end;//顯示5
   }
 if(h==Read(Address[6]))
   {
    P1_5=~P1_5;//操作5號繼電器
    P0=disp[6];goto end;//顯示6
   }
 if(h==Read(Address[7]))
   {
    P1_6=~P1_6;//操作6號繼電器
    P0=disp[7];goto end;//顯示7
   }
 if(h==Read(Address[8]))
   {
    P1_7=~P1_7;//操作7號繼電器
    P0=disp[8];goto end;//顯示8
   }
end:Delay();//延時
    Led2=1; //學習成功燈滅
}
/*外部中斷0服務程序*/
void int0_int(void) interrupt 0
{   //紅外接收中斷服務函數
 unsigned int h;
 EX0=0;  //關閉中斷
 Irda(); //紅外譯碼
 if((Sys_Ma==~Sys_FMa)&&(User_Ma==~User_FMa))//判斷系統碼與系統反碼、
                                             //用戶碼與用戶反碼是否正確
  {   //校驗正確
      h=Both(Sys_FMa,User_FMa);//將系統反碼(Sys_FMa),和用戶反碼(User_FMa)
                               //兩個單字節數裝配成一個雙字節數
      Comput(Sys_FMa); //串口輸出系統反碼遙控數據,可以用軟件對電腦進行遙控
      Comput(User_FMa);//串口輸出用戶反碼遙控數據
      Output(h);       /*顯示輸出和控制輸出,接收成功*/
      Sys_FMa=User_FMa=0;//防止下一次誤判斷
   }//退出if語句
 EX0 = 1;//開中斷
}//退出中斷
/***********************串口輸出**********************/
void Comput(unsigned char outdata)
{
	SBUF = outdata;
	while(!TI);
	TI = 0;
}
/*****************延時程序**********************/

void Delay()
 {
   unsigned int i,j;
   for(i=0;i<2;i++)
   for(j=0;j<30000;j++);
 }


/*********************主程序***************************/

void main(void)
{
	unsigned int i;
	SCON = 0x50;   //串口方式1,允許接收
	TMOD = 0x20;   //定時器1定時方式2
	TH1 = 0xFD;    //波特率9600
	TL1 = 0xFD;
	IT0 = 1;       //INT0下降沿有效
	EX0 = 1;       //開INT0中斷;
	TR1 = 1;       //啟動定時器
	P2_7=0;        //初始化引腳
	P1=0xff;
	EA = 1;	       //允許CPU中斷
	while(1)
	    {          //進入while循環
	     for(i=0; i<20000; i++)
		{
            	 Led1=1;//"學習燈滅"
                 if(!Study_Key) Study();//查詢"KEY"是否按下,按下進入學習狀態
                 }//for循環結束
	      for(i=0; i<20000; i++)
		 {
   	           Led1=0;//"學習燈亮"
                   if(!Study_Key) Study();//查詢"KEY"是否按下,按下進入學習狀態
                  }//for循環結束
	     }//while循環結束
  }//主程序結束

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内外精品视频| 欧美老年两性高潮| 欧美日韩一区二区三区高清| 日韩欧美一二三| 最新久久zyz资源站| 国内精品久久久久影院色| 一本色道亚洲精品aⅴ| 久久影院午夜论| 爽好久久久欧美精品| 99久久婷婷国产综合精品 | 国产欧美精品国产国产专区| 亚洲一区二三区| 99精品在线免费| 国产日韩欧美一区二区三区综合| 日韩精品电影一区亚洲| 色狠狠综合天天综合综合| 中文字幕高清不卡| 久久99国产精品尤物| 欧美一区二区大片| 婷婷激情综合网| 欧美理论在线播放| 亚洲永久免费视频| 在线精品视频免费播放| 国产精品美日韩| 成人动漫一区二区在线| 国产免费久久精品| 成人性生交大片免费看在线播放| 久久综合五月天婷婷伊人| 伦理电影国产精品| 欧美一区二区三区的| 天天射综合影视| 欧美乱熟臀69xxxxxx| 午夜精品一区二区三区三上悠亚 | 欧洲国内综合视频| 亚洲图片你懂的| 91麻豆国产精品久久| 成人欧美一区二区三区黑人麻豆 | 欧美激情综合五月色丁香| 国产69精品久久99不卡| 中文字幕精品在线不卡| 91浏览器打开| 亚洲综合一二区| 91精品国产综合久久福利软件 | 日韩欧美一级在线播放| 国产在线精品一区二区| 国产性色一区二区| 成人av在线播放网站| 亚洲人成7777| 欧美日韩中字一区| 久久99热这里只有精品| 国产免费久久精品| 一本到三区不卡视频| 午夜欧美2019年伦理 | 色综合久久中文字幕| 亚洲在线一区二区三区| 制服丝袜激情欧洲亚洲| 精品一区二区三区欧美| 国产精品欧美综合在线| 欧美系列日韩一区| 精品亚洲国内自在自线福利| 国产女人aaa级久久久级| 欧美视频在线一区二区三区 | 国产精品国产三级国产a| 在线观看一区不卡| 国产精品一区二区在线观看网站| 国产精品久久久久久久蜜臀 | 国产亚洲精品精华液| 99久久免费视频.com| 免费看精品久久片| 亚洲免费观看在线视频| 欧美成人女星排行榜| 成人激情av网| 久久国产精品露脸对白| 国产精品网站一区| 日韩免费一区二区| 91蝌蚪porny| 国产在线一区二区综合免费视频| 国产精品午夜在线| 欧美一区二区福利视频| 色婷婷狠狠综合| 国产麻豆成人传媒免费观看| 性久久久久久久| 自拍av一区二区三区| 精品国产91久久久久久久妲己| 91在线你懂得| 国产成人精品免费一区二区| 亚洲国产精品一区二区久久| 欧美激情一区二区| 日韩美女天天操| 欧美视频一区二| 91网站最新地址| 粉嫩av一区二区三区| 久久99精品一区二区三区三区| 亚洲情趣在线观看| 亚洲国产精品成人综合色在线婷婷| 在线不卡中文字幕| 欧美网站大全在线观看| 91视频精品在这里| 波波电影院一区二区三区| 美腿丝袜亚洲三区| 婷婷激情综合网| 天天av天天翘天天综合网色鬼国产| 国产精品色呦呦| 国产女人18毛片水真多成人如厕| 欧美大片国产精品| 91精品国产综合久久福利| 欧美日韩在线亚洲一区蜜芽| 色偷偷成人一区二区三区91| 成年人午夜久久久| 国产成人免费在线观看| 国模套图日韩精品一区二区| 久久精品久久综合| 久草中文综合在线| 经典一区二区三区| 国产一区三区三区| 国产精品99久久久久久久vr| 国产制服丝袜一区| 国产二区国产一区在线观看| 国产伦精一区二区三区| 国产成人精品影院| 成人精品高清在线| 色综合天天天天做夜夜夜夜做| 91在线视频免费91| 欧美无乱码久久久免费午夜一区| 欧美日韩中文国产| 日韩一本二本av| 久久久国产精品午夜一区ai换脸| 久久这里只有精品视频网| 国产亚洲综合性久久久影院| 椎名由奈av一区二区三区| 亚洲人妖av一区二区| 亚洲综合色噜噜狠狠| 性做久久久久久免费观看欧美| 日本va欧美va瓶| 国产激情视频一区二区在线观看| 成人福利视频网站| 欧美综合色免费| 欧美大片一区二区| 国产精品国产三级国产普通话三级| 亚洲男女一区二区三区| 日韩国产精品久久久久久亚洲| 青青草97国产精品免费观看| 国产精品1024| 欧美日韩一区二区在线观看视频| 欧美一区二区三区免费视频 | 日韩美女一区二区三区四区| 国产欧美综合色| 亚洲国产一区二区三区青草影视| 日产欧产美韩系列久久99| 精彩视频一区二区| 在线精品视频免费播放| 欧美精品一区二区三区高清aⅴ | 色综合久久中文字幕综合网| 欧美日韩免费观看一区二区三区| 日韩欧美在线综合网| 6080日韩午夜伦伦午夜伦| 色激情天天射综合网| 欧美变态凌虐bdsm| 亚洲女女做受ⅹxx高潮| 蜜臀av亚洲一区中文字幕| av电影天堂一区二区在线观看| 欧美日本在线一区| 亚洲人成精品久久久久| 久久精品国产99国产| 在线日韩一区二区| 国产视频一区二区在线| 爽好多水快深点欧美视频| 99久久精品免费看国产免费软件| 欧美一区二区三区在线电影| 亚洲日本免费电影| 国产成a人亚洲| 欧美成人午夜电影| 日韩精品成人一区二区三区| 91热门视频在线观看| 国产色91在线| 久久爱另类一区二区小说| 欧美日韩在线精品一区二区三区激情 | 91精品国产免费久久综合| 亚洲激情六月丁香| 成人av一区二区三区| 久久久久国产精品麻豆ai换脸| 婷婷中文字幕一区三区| 欧美怡红院视频| 一区二区三区在线观看网站| 成人a区在线观看| 国产三级精品在线| 国产激情偷乱视频一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 亚洲综合免费观看高清完整版| 99免费精品在线观看| 国产欧美视频在线观看| 激情综合五月天| 日韩免费一区二区三区在线播放| 午夜天堂影视香蕉久久| 欧美日韩精品综合在线| 日韩国产欧美视频| 91精品欧美综合在线观看最新| 亚洲国产成人av网| 69av一区二区三区| 日韩**一区毛片|