找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4002|回復: 0
打印 上一主題 下一主題
收起左側(cè)

單片機紅外線解碼程序數(shù)碼管顯示 程序源代碼

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:85764 發(fā)表于 2015-7-15 23:36 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

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

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


  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. }
復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩

相關(guān)帖子

回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表