找回密码
 立即注册

QQ登录

只需一步,快速开始

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

AT89S52单片机红外遥控部分程序

[复制链接]
跳转到指定楼层
楼主
ID:433024 发表于 2018-11-25 20:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<reg52.h>
  2. #defineuchar unsigned char
  3. #defineuint unsigned int
  4. ucharirtime;
  5. ucharstartflag;
  6. ucharirdata[33];
  7. ucharbitnum;
  8. ucharirreceok;
  9. ucharircode[4];
  10. ucharirprosok;
  11. uchardisplay[8];
  12. ucharcode table[16]="Infrared control";
  13. uchartable1[16]="Nowcode:";
  14. sbitlcden=P3^6;
  15. sbitlcdrs=P3^7;//rw接地
  16. ucharnum;
  17. voidirpros(void)//数据处理函数
  18. {
  19.   uchar k=1,i,j;
  20.   uchar value;
  21.        for(j=0;j<4;j++)
  22.        {
  23.         for(i=0;i<8;i++)
  24.          {
  25.                value=value>>1;
  26.                if(irdata[k]>6)
  27.                {
  28.                 value=value|0x80;
  29.                }
  30.                k++;
  31.          }
  32.         ircode[j]=value;
  33.        }
  34.    irprosok=1;
  35. }
  36. voidirwork(void)//数据分离函数
  37. {
  38. display[0]=ircode[0]/16;
  39. display[1]=ircode[0]%16;
  40. display[2]=ircode[1]/16;
  41. display[3]=ircode[1]%16;
  42. display[4]=ircode[2]/16;
  43. display[5]=ircode[2]%16;
  44. display[6]=ircode[3]/16;
  45. display[7]=ircode[3]%16;
  46. }
  47. voidnumzh(void)//ASCII码转换函数
  48. {
  49.    uchar i,j=8,a;
  50.    for(i=0;i<8;i++)
  51.         {
  52.                switch(display[ i])
  53. [ i]
  54.                {
  55.                       case 0  :a=48;break;
  56.                       case 1  :a=49;break;
  57.                       case 2  :a=50;break;
  58.                       case 3  :a=51;break;
  59.                       case 4  :a=52;break;
  60.                       case 5  :a=53;break;
  61.                       case 6  :a=54;break;
  62.                       case 7  :a=55;break;
  63.                       case 8  :a=56;break;
  64.                       case 9  :a=57;break;
  65.                       case 10:a=65;break;
  66.                       case 11:a=66;break;
  67.                       case 12:a=67;break;
  68.                       case 13:a=68;break;
  69.                       case 14:a=69;break;
  70.                       case 15:a=70;break;
  71.                }
  72.                table1[j]=a;
  73.                j++;
  74.      }
  75. }
  76. voidmain()//主函数
  77. {
  78.   timer0init();
  79.   int0init();
  80.   lcdinit();
  81.   play_1();
  82. while(1)  //循环检测处理
  83. {
  84.    if (irreceok)
  85.    {
  86.         irreceok=0;
  87.         irpros();     
  88.    }
  89.    if(irprosok)
  90.    {  
  91.       irprosok=0;
  92.         irwork();
  93.         numzh();
  94.         play_2();
  95.    }
  96. }
  97. }
  98. voidtinmer0() interrupt 1//定时器0中断函数
  99. {
  100. irtime++;
  101. }
  102. void  int0() interrupt 0// 外部中断0函数,数据接收
  103. {
  104.        if(startflag)
  105.        {
  106.         if (irtime>30)//检测引导吗
  107.          {
  108.          bitnum=0;
  109.          }
  110.         irdata[bitnum]=irtime;
  111.         irtime=0;
  112.         bitnum++;
  113.         if(bitnum==33)
  114.          {
  115.          bitnum=0;
  116.          irreceok=1;
  117.          }
  118.        }
  119.        else
  120.        {
  121.         startflag=1;
  122.         irtime=0;
  123.        }
  124. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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