導航:首頁 > 操作系統 > 紅外51單片機

紅外51單片機

發布時間:2023-10-01 05:25:59

❶ 51單片機紅外遙控

需要找讀碼器讀出來,給你一具C51的紅外C程序,試用過,可以用。
/*
紅外遙控編碼識別工具軟體
C51紅外遙控鍵碼識別軟體,用軟體方法測量紅外遙控編碼,由串口送出,利用串口調試助手接收,顯示鍵碼規律,
由顯示的高低電平長度,可以分析出是PHILIPS編碼(PPM編碼),還是NEC編碼(PWM編碼),再根據編碼的長度,
編寫識別軟體,我做實驗的晶體頻率是11.0592MHZ,長度是軟體執行周期的相對值,如果識別軟體採用相同的脈沖
寬度測量方法,可以用於鍵碼識別。
*/

#include <reg51.H>
sbit IFda = P3^3;
unsigned char idata dat[230]={1,};
void main(void)
{
SCON=0X52;
TMOD=0X20;
TH1=0XFD;
TR1=1;
EX1=1;
EA =1;
IFda =1;
while (1);
}
void IFreceiver(void) interrupt 2
{
unsigned char i;
unsigned int s;
EA=0;
if(IFda==0)
{
dat[i]=0XF0;
i++;
for(s=1;s!=0; s++) if(IFda==1) break;
dat[i]=s/256;
i++;
dat[i]=s;
i++;
}
if(IFda==1)
{
dat[i]=0xFF;
i++;
for(s=1;s!=0;s++) if(IFda==0) break;;
dat[i]=s/256;
i++;
dat[i]=s;
i++;
}

for(i=0;i<216;i++)
{
TI=0;
SBUF=dat[i];
while(TI==0);
}
for(s=1;s!=0;s++);
EA=1;
}

❷ 紅外發射模塊怎麼用51單片機編程使用

紅外發射模塊用51單片機編程使用:用定時器中斷來做,紅外發送引腳連接到P1.0口, 計數一下定時初值(讓P1.0的翻轉頻率為38KHZ),進定時器中斷就對P1.0取反,這樣紅外就發送出去了。
紅外線發射管(IR LED)也稱紅外線發射二極體,屬於二極體類。它是可以將電能直接轉換成近紅外光(不可見光)並能輻射出去的發光器件。
紅外線發射管(IR LED)也稱紅外線發射二極體,屬於二極體類。它是可以將電能直接轉換成近紅外光(不可見光)並能輻射出去的發光器件,主要應用於各種光電開關、觸摸屏及遙控發射電路中。紅外線發射管的結構、原理與普通發光二極體相近,只是使用的半導體材料不同。紅外發光二極體通常使用砷化鎵(GaAs)、砷鋁化鎵(GaAlAs)等材料,採用全透明或淺藍色、黑色的樹脂封裝。

❸ 51單片機紅外遙控和按鍵怎麼連接

1、首先通過4個按鍵,可以直接按下觸發紅外線編碼。
2、其次發射出的紅外線與紅外線遙控器相同。
3、最後接通電源,系統進入工作狀態,等待接收命令即可。

❹ 51單片機 紅外

你要檢測什麼東西。物體就用反射型光電開關或對射型的,要是人體就用人體紅外開關

❺ 51單片機紅外遙控程序是什麼

#includex0dx0a#includex0dx0a#define uchar unsigned charx0dx0a#define uint unsigned intx0dx0asbit lcden = P2^7;x0dx0asbit lcdrs = P2^6;x0dx0asbit lcdwr = P2^5;x0dx0asbit IR = P3^2;x0dx0auchar IRCOM[6];//數組,用於存儲紅外編碼x0dx0auchar code table1[] = "remote control";x0dx0auchar code table2[] = "CODE:";x0dx0avoid delayms(uchar x)// 延時x*0.14msx0dx0a{x0dx0auchar i;x0dx0awhile(x--)x0dx0afor(i=0;i<13;i++){}x0dx0a}x0dx0avoid delay(uchar x)//延時xmsx0dx0a{x0dx0auchar i,j;x0dx0afor(i=x;i>0;i--)x0dx0afor(j=110;j>0;j--);x0dx0a}x0dx0a/****************************LCD部分***********************************************/x0dx0avoid write_com(uchar com)x0dx0a{x0dx0alcden = 0;x0dx0alcdrs = 0;x0dx0alcdwr = 0;x0dx0aP0 = com;x0dx0adelay(5);x0dx0alcden = 1;x0dx0adelay(5);x0dx0alcden = 0;//別忘了lcden拉低x0dx0a}x0dx0avoid write_date(uchar date)x0dx0a{x0dx0alcden = 0;x0dx0alcdrs = 1;x0dx0alcdwr = 0;x0dx0aP0 = date;x0dx0adelay(5);x0dx0alcden = 1;x0dx0adelay(5);x0dx0alcden = 0;x0dx0a}x0dx0avoid lcd_init(void)x0dx0a{x0dx0alcden = 0;x0dx0alcdrs = 0;x0dx0alcdwr = 0;x0dx0adelay(5);x0dx0awrite_com(0x38);x0dx0awrite_com(0x0c);x0dx0awrite_com(0x06);x0dx0awrite_com(0x01);x0dx0a}x0dx0a/*****************main()************************/x0dx0avoid main(void)x0dx0a{x0dx0auchar count=0;x0dx0aIR = 1;x0dx0alcd_init();x0dx0awrite_com(0x80);x0dx0awhile(table1[count]!='\0')x0dx0a{x0dx0awrite_date(table1[count]);x0dx0acount++;x0dx0adelay(5);x0dx0a}x0dx0acount = 0;x0dx0awrite_com(0x80+0x40);x0dx0awhile(table2[count]!='\0')x0dx0a{x0dx0awrite_date(table2[count]);x0dx0acount++;x0dx0adelay(5);x0dx0a}x0dx0ax0dx0aIE = 0x81; //開中斷x0dx0aTCON = 0x01;//脈沖負邊沿觸發x0dx0awhile(1);x0dx0ax0dx0a}x0dx0a/*********************紅外中斷**************************/x0dx0avoid IR_time() interrupt 0 x0dx0a{x0dx0auchar i,j,TimeNum=0;//TimeNum用來計IR高電平次數 從而判斷是0還是1x0dx0aEX0 = 0; //關閉中斷x0dx0adelayms(5);x0dx0aif(1 == IR)x0dx0a{x0dx0aEX0 = 1;x0dx0areturn;x0dx0a}x0dx0awhile(!IR) //跳過9ms前導低電平x0dx0adelayms(1);x0dx0afor(i=0;i<4;i++)x0dx0a{x0dx0afor(j=0;j<8;j++)x0dx0a{x0dx0awhile(IR) //跳過4.5ms的前導高電平x0dx0adelayms(1);x0dx0awhile(!IR) //跳過0.56ms的低電平x0dx0adelayms(1);x0dx0ax0dx0awhile(IR) x0dx0a{x0dx0aTimeNum++; //計時高電平時間從而判斷讀取的是0還是1x0dx0adelayms(1);x0dx0a}x0dx0aif(TimeNum>=30)//按鍵按下時間過長 跳過x0dx0a{x0dx0aEX0 = 1;x0dx0areturn;x0dx0a}x0dx0aIRCOM[i] = IRCOM[i]>>1;x0dx0aif(TimeNum >= 8) //8*0.14ms 這時讀取的是1;x0dx0a{x0dx0aIRCOM[i] = IRCOM[i]|0x80;x0dx0a}x0dx0aTimeNum = 0;x0dx0a}x0dx0a}x0dx0aif(IRCOM[2]!=~IRCOM[3])//判斷八位數據和八位數據反碼是否相等x0dx0a{x0dx0aEX0 = 1;x0dx0areturn;x0dx0a}x0dx0aIRCOM[4] = IRCOM[2]&0x0f;//取低四位x0dx0aIRCOM[5] = IRCOM[2]>>4; //IRCOM[5]取IRCOM[2]高四位x0dx0aif(IRCOM[4] > 9) //轉換成字元x0dx0a{x0dx0aIRCOM[4] = IRCOM[4] + 0x37;x0dx0a}x0dx0aelsex0dx0aIRCOM[4] = IRCOM[4] + 0x30;x0dx0aif(IRCOM[5] > 9)x0dx0a{x0dx0aIRCOM[5] = IRCOM[5] + 0x37;x0dx0a}x0dx0aelsex0dx0aIRCOM[5] = IRCOM[5] + 0x30;x0dx0adelay(5);x0dx0awrite_com(0x80 + 0x40 + 5);x0dx0awrite_date(IRCOM[5]);x0dx0awrite_date(IRCOM[4]);x0dx0aEX0 = 1; //重新開啟外部中斷x0dx0a}

❻ 51單片機紅外解碼C程序

單片機採用外部中斷P3.3管腳和紅外接收頭的信號線相連,中斷方式為邊沿觸發方式。並用定時器0計算中斷的間隔時間,來區分前導碼、二進制的「1」、「0」碼。並將8位操作碼提取出來在數碼管上顯示。
// 解碼值在Im[2]中,當IrOK=1時解碼有效。 
/* 51單片機紅外遙控解碼程序 */
//用遙控器對准紅外接收頭,按下遙控器按鍵,在數碼管前兩位上就會顯示對應按鍵的編碼
#include <reg52.h>
#define uchar unsigned char 
sbit la=P2^6;
sbit wela=P2^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar f;
#define Imax 14000    //此處為晶振為11.0592時的取值, 
#define Imin 8000    //如用其它頻率的晶振時,
#define Inum1 1450    //要改變相應的取值。
#define Inum2 700 
#define Inum3 3000
unsigned char Im[4]={0x00,0x00,0x00,0x00};
uchar show[2]={0,0};
unsigned long m,Tc;
unsigned char IrOK;
void delay(uchar i)
{
  uchar j,k; 
  for(j=i;j>0;j--)
    for(k=125;k>0;k--);
}
void display()
{
   la=0;
   P0=table[show[0]];
   la=1;
   la=0;
   wela=0;
   P0=0xfe;
   wela=1;
   wela=0;
   delay(5);
   P0=table[show[1]];
   la=1;
   la=0;
   P0=0xfd;
   wela=1;
   wela=0;
   delay(5);
} //外部中斷解碼程序
void intersvr1(void) interrupt 2 using 1
{
 Tc=TH0*256+TL0;                                               //提取中斷時間間隔時長
 TH0=0; 
    TL0=0;              //定時中斷重新置零
 if((Tc>Imin)&&(Tc<Imax))
      { 
  m=0;
        f=1;
  return;
      }       //找到啟始碼
   if(f==1)
      {
        if(Tc>Inum1&&Tc<Inum3) 
    {
   Im[m/8]=Im[m/8]>>1|0x80; m++; 
       }
      if(Tc>Inum2&&Tc<Inum1) 
        {
         Im[m/8]=Im[m/8]>>1; m++; //取碼
  }
  if(m==32) 
   {
         m=0;  
         f=0;
         if(Im[2]==~Im[3]) 
      {
           IrOK=1; 
   }
        else IrOK=0;   //取碼完成後判斷讀碼是否正確
     }
               //准備讀下一碼
   }
}
/*演示主程序*/
void main(void)
{
    unsigned int  a;
 m=0;
    f=0;
 EA=1;
 IT1=1;EX1=1;
 TMOD=0x11;  
 TH0=0;TL0=0;
 TR0=1;//ET0=1;
 while(1)
 {
       if(IrOK==1) 
  {
      show[1]=Im[2] & 0x0F;     //取鍵碼的低四位
           show[0]=Im[2] >> 4;  
           IrOK=0;
  }
           for(a=100;a>0;a--)
          {
    display();
   }
 }
}
解碼程序這個就能實現

❼ 51單片機紅外遙控紅外接收引腳是否應該串接電阻

不串接電阻,可以接上拉電阻。

❽ 51單片機紅外線遙控LED程序,疑惑中!!!!!

紅外收發中,IRDATA[2]與IRDATA[3]是取反的關系。也就是說兩個數對應各位前者為1後者就為0
其餘的問題,都是根據紅外接收時序來編的程序,以下總結以下紅外收發時序供參考,你讀懂就可以理解了。

採用脈寬調制的串列碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的"0";;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的"1「上述"0"和"1"組成的32位二進制碼經38kHz的載頻進行二次調制以提高發射效率,達到降低電源功耗的目的。然後再通過紅外發射二極體產生紅外線向空間發射遙控編碼是連續的32位二進制碼組,其中前16位為用戶識別碼,能區別不同的電器設備,防止不同機種遙控碼互相干擾。該晶元的用戶識別碼固定為十六進制01H後16位為8位操作碼(功能碼)及其反碼。
發射代碼由一個起始碼(9ms),一個結果碼(4.5ms),低8位地址碼(9ms~18ms),高8位地址碼(9ms~18ms),8位數據碼(9ms~18ms)和這8位數據的反碼(9ms~18ms)組成。
解碼的關鍵是如何識別"0"和"1",接收端而言,"0"是0.56ms的高+0.56ms的低。"1"是1.68ms的高+0.56ms的低。所以可以根據高電平的寬度區別"0"和"1"。當高電平出現時開始延時,0.56ms以後,若讀到的電平為低,說明該位為"0",反之則為"1",為了可靠起見,延時必須比0.56ms長些,但又不能超過1.12ms,否則如果該位為"0",讀到的已是下一位的高電平,因此取(1.12ms+0.56ms)/2=0.84ms最為可靠,一般取0.84ms左右均可。為了共用引導部分延時程序,一般用0.9ms延時。

由此可見,有效數據是4位元組(32位)。前兩個位元組可定義用戶編碼,後兩個位元組分別是真正的數據及其反碼。

❾ 基於單片機紅外線測距的51程序

1、單片機 紅外發射管 紅外接收管 + 邏輯演算法
2、一般情況下,常見的管子,就是類似於發光二極體的樣子,接收的距離很近,你自己搭電路的話要考慮排除干擾,信號放大,也許50元,也解決不了。還有一種是3隻腳的,這種接收方面好一點,價格也不是很貴,大概5元。還有更好的器件,配對使用,檢出有效距離300mm,大概是20-30元,具體看你想怎麼用了,項目是怎麼規定的了

3、利用波速來計算距離,測量出幾個納秒的時間差,使用單片機則是不可能的。

4、利用電磁波來測距、測速,是利用了變頻、差頻的原理,前端的電路和器件,都是使用模擬電路中高頻電子線路的理論和電路器件。
5、單片機之類的數字電路根本跟不上這個速度,只能做後期的低速工作,如顯示報警等。
6、其實,用單片機做搶答器,也是蒙人的,誤差的概率也是極大的。1塊89C52單片機當然夠了,8個紅外感測器,只需要8個IO口,8個直流電機需要16個IO口,89c52單片機有40個IO口,還有富餘。

❿ 51單片機紅外循跡小車屬於閉環控制嘛

51單片機紅外循跡小車屬於閉環控制。
51單片機紅外循跡小車用的直流電機,驅動電路。
該設計用的是H橋驅動電路,再加上達林頓管,還有紅外線。

閱讀全文

與紅外51單片機相關的資料

熱點內容
編譯速度和系統有關嗎 瀏覽:54
復盛製冷壓縮機 瀏覽:979
雲伺服器共享手機流量 瀏覽:833
星界邊境像素壓縮 瀏覽:458
演算法分析與設計二手 瀏覽:981
學編程如何配電腦 瀏覽:971
怎麼看特徵找卡密的加密方式 瀏覽:526
方舟非官方伺服器怎麼賺錢 瀏覽:516
明日之後伺服器無效是怎麼回事 瀏覽:270
蛋殼公寓app如何查水電表 瀏覽:718
ad20庫中的51單片機怎麼找 瀏覽:624
阿里雲伺服器有點卡嗎 瀏覽:215
蘋果7如何讓app後台運行 瀏覽:170
耐克app預售產品哪裡看 瀏覽:209
補全演算法一年級 瀏覽:131
evd數據調校軟體加密 瀏覽:442
app聽課與微信如何設置分屏 瀏覽:911
加密的excel怎麼撤銷 瀏覽:43
java動態數組初始化 瀏覽:978
編譯後程序塊過大不適合 瀏覽:676