標(biāo)題: 單片機(jī)紅外線解碼程序數(shù)碼管顯示 程序源代碼 [打印本頁]

作者: niujia    時(shí)間: 2015-7-15 23:36
標(biāo)題: 單片機(jī)紅外線解碼程序數(shù)碼管顯示 程序源代碼

數(shù)碼管顯示部分的原理圖(開發(fā)板中只需要截圖顯示部分即可):http://www.torrancerestoration.com/f/51hei-5.pdf

電路:紅外接收頭接在 單片機(jī)的外部中斷0口。數(shù)碼管用8位共陰極數(shù)碼管,2個(gè)573鎖存 詳見上面的51hei單片機(jī)開發(fā)板的pdf圖,本人測(cè)試成了.


  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. sbit wela=P2^7;
  5. sbit dula=P2^6;
  6. uchar code smg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  7. uchar code smg_we[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
  8. uchar dis_smg[6];
  9. uchar ircode[4];
  10. uchar irdata[33];
  11. uchar bitnum;
  12. uchar irtime;
  13. uchar startflag;
  14. uchar irreceok,irprosok;
  15. void time0init()
  16. {
  17. TMOD=0X02;
  18. TH0=0X00;
  19. TL0=0X00;
  20. ET0=1;
  21. TR0=1;
  22. EA=1;
  23. }
  24. void int0init()
  25. {
  26. IT0=1;
  27. EX0=1;
  28. EA=1;
  29. }
  30. void irpros()
  31. {
  32. uchar k=1,i,j;
  33. uchar value;
  34. for(j=0;j<4;j++)
  35. {
  36.   for(i=0;i<8;i++)
  37.   {
  38.    value=value>>1;
  39.    if(irdata[k]>6)
  40.    {
  41.      value=value|0x80;
  42.    }
  43.    k++;
  44.   }
  45.   ircode[j]=value;
  46. }
  47. irprosok=1;
  48. }
  49. void irwork()
  50. {
  51. dis_smg[0]=ircode[1]/16;
  52. dis_smg[1]=ircode[1]%16;
  53. dis_smg[2]=ircode[2]/16;
  54. dis_smg[3]=ircode[2]%16;
  55. dis_smg[4]=ircode[3]/16;
  56. dis_smg[5]=ircode[3]%16;
  57. }
  58. void dis_ssmg()
  59. {
  60. static uchar i;
  61. P0=0x00;
  62. dula=1;
  63. dula=0;
  64.     P0=smg_we[i];
  65. wela=1;
  66. wela=0;

  67. P0=smg_du[dis_smg[i]];
  68. dula=1;
  69. dula=0;
  70. i++;
  71. if(i==8)
  72. i=0;
  73. }
  74. void main()
  75. {
  76.   time0init();
  77.   int0init();
  78.   while(1)
  79.   {
  80.     if(irreceok==1)
  81.    {
  82.      irpros();
  83.     irreceok=0;
  84.    }
  85.    if(irprosok==1)
  86.    {
  87.     irwork();
  88.    irprosok=0;
  89.    }
  90.    dis_ssmg();
  91.   }
  92. }
  93. void timer0() interrupt 1
  94. {
  95.    irtime++;
  96. }
  97. void int0() interrupt 0
  98. {
  99.    if(startflag)
  100.    {
  101.       if(irtime>32)
  102.     {
  103.        bitnum=0;
  104.     }
  105.     irdata[bitnum]=irtime;
  106.     irtime=0;
  107.     bitnum++;
  108.     if(bitnum==33)
  109.     {
  110.        bitnum=0;
  111.      irreceok=1;
  112.     }
  113.    }
  114.    else
  115.    {
  116.       startflag=1;
  117.     irtime=0;
  118.    }
  119. }
復(fù)制代碼









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