標(biāo)題: avr單片機(jī)紅外解碼程序+1602顯示結(jié)果源程序 [打印本頁]

作者: aaasym    時間: 2019-6-18 10:25
標(biāo)題: avr單片機(jī)紅外解碼程序+1602顯示結(jié)果源程序
單片機(jī)源程序如下:
  1. #include <iom16v.h>
  2. #include <macros.h>  
  3. #include "1602.h"
  4. #define uint  unsigned int
  5. #define uchar unsigned char
  6. #define Set_Bit(val, bitn)    (val |=(1<<(bitn)))
  7. #define Clr_Bit(val, bitn)    (val&=~(1<<(bitn)))
  8. #define Get_Bit(val, bitn)    (val &(1<<(bitn)) )
  9. #define Cpl_Bit(val, bitn)    (val^=(1<<(bitn)) )

  10.   uchar adc_0[]={"IRCodeADD:"};
  11.   uchar adc_1[]={"IRCodeDAT:"};

  12. //*****************************************0
  13. //函數(shù)聲明
  14. void ICEInit(void);
  15. uchar bitcnt;
  16. uint newFall;
  17. uint oldFall;
  18. uint data0;
  19. uint data1;


  20. void ICEInit(void) //T/C1初始化
  21. {
  22.     TIMSK=0X20; //使能捕獲中斷
  23.     TCCR1A=0X00;//T/C1時鐘與系統(tǒng)相同,本文使用系統(tǒng)AVR內(nèi)部自帶8MHz振蕩源.T/C1時鐘周期為1μs
  24.     TCCR1B=0X82; //使能噪音抑制,下降沿觸發(fā)中斷
  25. }
  26. void main(void)
  27. {   
  28.    DDRA = 0xff;      
  29.    PORTA = 0x00;      
  30.    DDRB = 0xFF;   
  31.    PORTB = 0xFF;
  32.    ICEInit();

  33.    LcdInit();   
  34.    WriteChar(1,0,10,adc_0);
  35.    WriteChar(2,0,10,adc_1);
  36.    SEI();
  37.   while(1);
  38.   }
  39.   

  40. #pragma interrupt_handler CAPT_ISR:iv_TIMER1_CAPT

  41. void CAPT_ISR(void)
  42. {
  43.   uchar a;
  44.   uint temp;
  45.   newFall=ICR1;
  46.   temp=newFall-oldFall; //計算脈沖加間隔的時間
  47.   oldFall=newFall;
  48.    
  49. if(temp>1024 && temp<1225) // "0"信號
  50.    {
  51.     temp=0;
  52.    }

  53. else if(temp>2145 && temp<2345) //“1”信號
  54.    {
  55.     temp=1;
  56.    }

  57. else if(temp>13400 && temp<13600) //header信號

  58. {
  59.     bitcnt=0;
  60.     data0=0;
  61.     data1=0;
  62. return; //返回,等待下次開始接收
  63. }

  64. else ///干擾信號
  65. {
  66.     return;
  67. }

  68.   bitcnt++;
  69.     if(bitcnt<16) //開始接收前16位
  70. {
  71.   data0=data0|(uint)temp;
  72.   data0=data0<<1;
  73. }
  74. else if(bitcnt==16)
  75. {
  76. data0=data0|(uint)temp;
  77. }
  78. else if(bitcnt<32) //開始接收后16位
  79. {
  80. data1=data1|(uint)temp;
  81. data1=data1<<1;
  82. }
  83. else if(bitcnt==32) //接收完最后一位
  84. {

  85.           data1=data1|(uint)temp;
  86.                   WriteNum(1,10,ASCII[(uchar)(data0>>8)/16]);
  87.                   WriteNum(1,11,ASCII[(uchar)(data0>>8)%16]);
  88.                   WriteNum(1,12,ASCII[(uchar)data0/16]);
  89.                   WriteNum(1,13,ASCII[(uchar)data0%16]);
  90.                   WriteNum(2,10,ASCII[(uchar)(data1>>8)/16]);
  91.                   WriteNum(2,11,ASCII[(uchar)(data1>>8)%16]);
  92.                   WriteNum(2,12,ASCII[(uchar)data1/16]);
  93.                   WriteNum(2,13,ASCII[(uchar)data1%16]);
  94. }

  95. }
復(fù)制代碼

所有資料51hei提供下載:
紅外解碼程序 1602顯示結(jié)果.rar (38.35 KB, 下載次數(shù): 10)



作者: admin    時間: 2019-6-18 14:24
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1