找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3207|回复: 2
收起左侧

51单片机的红外发射程序

[复制链接]
ID:73526 发表于 2015-2-11 15:25 | 显示全部楼层 |阅读模式
  1. #include<reg52.h>

  2. static bit OP;

  3. #define uint unsigned int

  4. #define uchar unsigned char

  5. uchar qishiok,count,key,flag,temp1;

  6. uchar xinhaook,ding,qishiflag,temp2;

  7. uchar temp;endcount,temp3,temp4;

  8. uchar kaiok;

  9. int c=0,d=0,e=0;

  10. sbit key1=P2^7;

  11. sbit key2=P2^6;

  12. sbit key3=P2^5;

  13. uchar shu;

  14. sbit P3_5=P3^5;

  15. void init()

  16. {

  17.     TMOD=0x02;

  18.     TH0=0xe6;

  19.     TL0=0xe6;

  20.     EA=1;

  21.     ET0=1;

  22.     TR0=1;

  23.     flag=0;

  24.     qishiok=0;

  25. }

  26. void time0() interrupt 1

  27. {

  28.         count++;

  29.      if(flag)

  30.       {P3_5=~P3_5;}

  31.      else

  32.       {P3_5=1;}

  33. }

  34. void qishi()

  35. {

  36.         int a;

  37.               count=0;

  38.         flag=1;

  39.               for(a=0;a<2;a++)

  40.               {

  41.                      endcount=173;

  42.                do{}

  43.                  while(count<endcount);

  44.                        count=0;

  45.               }



  46.         flag=0;

  47.         count=0;

  48.               endcount=173;

  49.         do{}

  50.           while(count<endcount);

  51.         count=0;

  52.         qishiok=1;

  53. }

  54. void jieshu()

  55. {

  56.            int b;

  57.               shu=0x02;

  58.            count=0;

  59.            for(b=0;b<4;b++)

  60.         {

  61.           flag=1;

  62.           do{}while(count<35);

  63.           if(shu-(shu/2)*2)

  64.               {  

  65.                   ding=45;

  66.               }

  67.               else

  68.               {

  69.                   ding=15;

  70.               }

  71.               flag=0;

  72.               count=0;

  73.           do{}while(ding>count);

  74.               count=0;

  75.           shu=shu>>1;

  76.         }

  77. }

  78. void xinhao(uchar temp)

  79. {

  80.     int i;

  81.     shu=temp;

  82.     count=0;

  83.     for(i=0;i<8;i++)

  84.         {

  85.               flag=1;

  86.               do{}while(count<35);

  87.               if(shu-(shu/2)*2)

  88.               {  

  89.                   ding=45;

  90.               }

  91.               else

  92.               {

  93.                   ding=15;

  94.               }

  95.               flag=0;

  96.               count=0;

  97.           do{}while(ding>count);

  98.               count=0;

  99.           shu=shu>>1;

  100.         }

  101.           xinhaook=1;

  102. }

  103. void delay()

  104. {

  105.   int i,j;

  106.   for(i=0;i<400;i++)

  107.   {

  108.     for(j=0;j<100;j++)

  109.     {

  110.     }

  111.   }

  112. }



  113. void fashe(temp1,temp2,temp3,temp4)

  114. {

  115.         init();

  116.         qishi();

  117.               xinhao(temp1);

  118.         xinhao(temp2);

  119.               xinhao(temp3);

  120.               xinhao(temp4);

  121.               jieshu();

  122.            delay();

  123. }



  124. void kaiguan()

  125. {

  126.        if(c)

  127.               {

  128.                      fashe(0x09,0x00,0x00,0x50);//开

  129.                      kaiok=1;

  130.               }

  131.        else

  132.               {

  133.                      fashe(0x01,0x00,0x00,0x50);//关

  134.                      kaiok=0;

  135.               }

  136. }

  137. void saofeng()

  138. {

  139.               switch(e)

  140.               {

  141.                      case 0:

  142.                             {

  143.                                    if(d)

  144.                                           fashe(0x49,0x00,0x00,0x50);//风速关时扫风开

  145.                                    else

  146.                                           fashe(0x09,0x00,0x00,0x50);//风速关时扫风关

  147.                             };break;

  148.                      case 1:

  149.                             {

  150.                                    if(d)

  151.                                           fashe(0x59,0x00,0x00,0x50);//风速一时扫风开

  152.                                    else

  153.                                           fashe(0x19,0x00,0x00,0x50);//风速一时扫风关

  154.                             };break;

  155.                      case 2:

  156.                             {   

  157.                                    if(d)

  158.                                           fashe(0x69,0x00,0x00,0x50);//风速二时扫风开

  159.                                    else

  160.                                           fashe(0x29,0x00,0x00,0x50);//风速二时扫风关

  161.                             };break;

  162.                      case 3:

  163.                             {

  164.                                    if(d)

  165.                                           fashe(0x79,0x00,0x00,0x50);//风速三时扫风开

  166.                                  else

  167.                                           fashe(0x39,0x00,0x00,0x50);//风速三时扫风关

  168.                             }

  169.               }

  170. }

  171. void fengsu()

  172. {

  173.        if(d)//扫风开时

  174.        {

  175.               switch(e)

  176.                      {

  177.                      case 0:

  178.                             fashe(0x49,0x00,0x00,0x50);break;//风速关

  179.                      case 1:

  180.                             fashe(0x59,0x00,0x00,0x50);break;//风速一

  181.                      case 2:

  182.                             fashe(0x69,0x00,0x00,0x50);break;//风速二

  183.                      case 3:

  184.                             fashe(0x79,0x00,0x00,0x50);break;//风速三

  185.                      }

  186.        }

  187.        else//扫风关时

  188.        {

  189.               switch(e)

  190.                      {

  191.                      case 0:

  192.                             fashe(0x09,0x00,0x00,0x50);break;//风速关

  193.                      case 1:

  194.                             fashe(0x19,0x00,0x00,0x50);break;//风速一

  195.                      case 2:

  196.                             fashe(0x29,0x00,0x00,0x50);break;//风速二

  197.                      case 3:

  198.                             fashe(0x39,0x00,0x00,0x50);break;//风速三

  199.                      }

  200.        }

  201. }

  202. void main()

  203. {

  204.     while(1)

  205.    {

  206.               if(key1==0)

  207.               {

  208.                      while(key1==0);

  209.                      kaiguan();//开关

  210.                      c++;

  211.                      if(c>1)

  212.                      c=0;

  213.               }

  214.               else if(key2==0)

  215.               {

  216.                      while(key2==0);

  217.                      if(kaiok)

  218.                      {

  219.                             saofeng();

  220.                             d++;

  221.                             if(d>1)

  222.                             d=0;

  223.                      }

  224.               }

  225.               else if(key3==0)

  226.               {

  227.                      while(key3==0)

  228.                      if(kaiok)

  229.                      {

  230.                             fengsu();

  231.                             e++;

  232.                             if(e>3)

  233.                             e=0;

  234.                      }

  235.               }

  236.    }

  237. }
复制代码


回复

使用道具 举报

ID:73187 发表于 2015-2-12 10:12 | 显示全部楼层
不知道楼主这段代码 什么功能   
回复

使用道具 举报

ID:60435 发表于 2015-2-12 20:54 来自手机 | 显示全部楼层
楼主能把原理图共享一下吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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