找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2590|回復(fù): 0
收起左側(cè)

簡單程序用單片機定時器1和2測量紅外高低脈沖時間及個數(shù)

[復(fù)制鏈接]
ID:151846 發(fā)表于 2021-4-12 14:39 | 顯示全部樓層 |閱讀模式
1.jpg 2.jpg
遙控紅外引導(dǎo)碼

3.jpg 2021-04-12 140429.jpg

高低脈沖時間us

51hei圖片20210412134818.png 51hei圖片20210412134928.png

2021-04-12 140429(2).jpg 2021-04-12 140429(1).jpg


我用的數(shù)碼管電路圖

單片機源程序如下:
  1. #include<reg52.h>
  2. sfr T2MOD=0XC9; //定義定時器2
  3. #define u8  unsigned char
  4. #define u16 unsigned int
  5. sbit ir=P3^2;sbit LSA=P2^2;        sbit LSB=P2^3;sbit LSC=P2^4;//數(shù)碼管用的138
  6. bit di=0,gao=0,c=0;
  7. u8 js=0,us=0;          //js是計算低脈沖個數(shù)
  8. u16 idata IR[75];//所有高低脈沖都裝在里面
  9. //紅外一組為68個高低脈沖,設(shè)75個,隨便改脈沖個數(shù)
  10. u8 code tab[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0};
  11. u8 dw[5];//數(shù)碼管顯示0--9,最后那個0是關(guān)顯示
  12. void Delay(u16 n){while(--n);}//12M公式n=(延時-6)*0.12493899(us)
  13. void disp()
  14. {                P0=tab[dw[i]];
  15.                 Delay(70); //間隔一段時間掃描        
  16.                 P0=0x00;//消隱
  17. }
  18. void T0init(void) //定時器0模式2初始化,完成一次中斷為256us,10次就乘10次
  19. {TMOD=0x02;TH0=0x00;TL0=0x00;ET0=1;TR0=1;}
  20. void E0init(void)//外P3^2中斷0 初始化
  21. {IT0=1;EX0=1;}

  22. void main(void)
  23. { T2MOD=0;T2CON=0;    //定時器2初始化,向上計數(shù),16位自動重裝模式
  24.   TL2=0x00;TH2=0x00;   //設(shè)置定時初值,完成一次中斷為65536us=65ms
  25.   RCAP2L=0x00;RCAP2H=0x00; //設(shè)置定時重載值
  26.   IE=0xa0;        //EA=1,ET2=1;
  27.   E0init();
  28.   T0init();
  29. while(1)
  30.    {static u8 a=0;
  31.            while(!ir){        //低脈沖時計算高脈沖時間
  32.         if(gao){IR[a]=TH2*256+TL2+8;
  33.                a++;gao=0;TH2=0;TL2=0;}}
  34.         if(di){TR0=0;TR2=1;IR[a]=us*256+TL0-4;//1個us為256,減4補誤差
  35.                a++;di=0;TL0=0;us=0;}//高脈沖時計算低脈沖時間
  36.         if(TH2>78){TR2=0;TH2=0;TL2=0;a=0;c=1;}//TH2>78高脈沖超20ms結(jié)束
  37.     if(c)disp();//結(jié)束后顯示高低脈沖時間us
  38. }  }
  39. void t0() interrupt 1
  40. {us++;di=1;}
  41. void E0() interrupt 0
  42. {TR0=1;if(TR2)gao=1;TR2=0;js++;}
  43. void t2() interrupt 5   
  44. {TF2=0;}              //要寫TF2=0
復(fù)制代碼

顯示部分不同程序就不同,顯示程序自己寫就行了,只要是顯示IR[]數(shù)組。
如果數(shù)碼管電路和我的一樣,就下載下面直接運行,w=100,我測試快用的,改為w=500慢顯示。

代碼:
捕捉紅外高低脈沖時間.rar (1.37 KB, 下載次數(shù): 7)

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表