找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3396|回复: 0
打印 上一主题 下一主题
收起左侧

单片机红外线解码程序数码管显示 程序源代码

[复制链接]
跳转到指定楼层
楼主
ID:85764 发表于 2015-7-15 23:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

数码管显示部分的原理图(开发板中只需要截图显示部分即可):http://www.51hei.com/f/51hei-5.pdf

电路:红外接收头接在 单片机的外部中断0口。数码管用8位共阴极数码管,2个573锁存 详见上面的51hei单片机开发板的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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表