久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3675|回復: 4
收起左側

紅外線遙控直流電機啟停源碼(原創設計)

[復制鏈接]
ID:374361 發表于 2018-10-14 22:28 | 顯示全部樓層 |閱讀模式
紅外線遙控直流電機啟停源碼
0.png

單片機源程序如下:
  1. #include"reg51.h"
  2. typedef unsigned  char u8;
  3. typedef unsigned  int u16;
  4. sbit  a=P1^4;
  5. sbit  b=P1^5;
  6. sbit  c=P1^6;
  7. u8 reddata[6];
  8. u8 redcom[2];
  9. u8 time,j,k;
  10. u16 err;
  11. sbit  stop=P3^2;
  12. sbit  motor=P1^0;
  13. sbit  motoa=P3^4;
  14. sbit  motob=P3^5;
  15. sbit  motoc=P3^6;
  16. sbit  motod=P3^7;
  17. u16 smg[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0X76};
  18. /*************************************************************/
  19. void smgbitswitch(num)
  20. {
  21.                 switch(num)         //位選,選擇點亮的數碼管,
  22.                 {
  23.                         case(0):
  24.                                 a=0;b=0;c=0; break;//顯示第0位
  25.                         case(1):
  26.                                 a=1;b=0;c=0; break;//顯示第1位
  27.                         case(2):
  28.                                 a=0;b=1;c=0; break;//顯示第2位
  29.                         case(3):
  30.                                 a=1;b=1;c=0; break;//顯示第3位
  31.                         case(4):
  32.                                 a=0;b=0;c=1; break;//顯示第4位
  33.                         case(5):
  34.                                 a=1;b=0;c=1; break;//顯示第5位
  35.                         case(6):
  36.                                 a=0;b=1;c=1; break;//顯示第6位
  37.                         case(7):
  38.                                 a=1;b=1;c=1; break;//顯示第7位       
  39.                 }
  40. }
  41. void delay(u16 num)
  42. {
  43.       while(num)
  44.           {
  45.               num--;
  46.           }

  47. }
  48. void you1(num)
  49. {
  50.     smgbitswitch(7);
  51.         P0=smg[num];
  52.         delay(10);
  53.         P0=0x00;
  54. }
  55. void you2(num)
  56. {
  57.     smgbitswitch(6);
  58.         P0=smg[num];
  59.     delay(10);
  60.         P0=0x00;
  61. }
  62. void you3(num)
  63. {
  64.     smgbitswitch(5);
  65.         P0=smg[num];
  66.     delay(10);
  67.         P0=0x00;
  68. }
  69. void   redcomsmg()
  70. {
  71.      if(reddata[2]==0x16)
  72.          {
  73.              redcom[1]=0;
  74.          }
  75.          if(reddata[2]==0x0c)
  76.          {
  77.              redcom[1]=1;
  78.          }
  79.          if(reddata[2]==0x18)
  80.          {
  81.              redcom[1]=2;
  82.          }
  83.          if(reddata[2]==0x5e)
  84.          {
  85.              redcom[1]=3;
  86.          }
  87.          if(reddata[2]==0x08)
  88.          {
  89.              redcom[1]=4;
  90.          }
  91.          if(reddata[2]==0x1c)
  92.          {
  93.              redcom[1]=5;
  94.          }
  95.          if(reddata[2]==0x5a)
  96.          {
  97.              redcom[1]=6;
  98.          }
  99.          if(reddata[2]==0x42)
  100.          {
  101.              redcom[1]=7;
  102.          }
  103.          if(reddata[2]==0x52)
  104.          {
  105.              redcom[1]=8;
  106.          }
  107.          if(reddata[2]==0x4a)
  108.          {
  109.              redcom[1]=9;
  110.          }
  111. }
  112. void  inter()
  113. {
  114.        EX0=1;          
  115.            IT0=1;
  116.            EA=1;


  117.            stop=1;
  118. }
  119. void main()
  120. {
  121.      inter();
  122.          delay(1);
  123.          motoa=0;
  124.          motob=0;
  125.          motoc=0;
  126.          motod=0;
  127.          motor=0;
  128.      while(1)
  129.          {
  130.              redcomsmg();
  131.                  delay(2000);
  132.                  you1(10);
  133.                  you2(redcom[1]);
  134.                  you3(0);
  135.                  if(redcom[1]==0)                  //        直流電機停止
  136.                  {
  137.                      motor=0;
  138.                  }
  139.                  if(redcom[1]==3)                  //   直流電機啟動
  140.                  {                     
  141.                      motor=1;
  142.                  }
  143.                  if(redcom[1]==2)           //                 步進電機啟動
  144.                  {
  145.                      motoa=1;
  146.                          motob=0;
  147.                          motoa=1;
  148.                          motob=1;
  149.                          delay(200);
  150.                          
  151.                          motoa=1;
  152.                          motob=1;
  153.                          motoa=1;
  154.                          motob=0;
  155.                          delay(200);
  156.                          
  157.                          
  158.                          motoa=0;
  159.                          motob=1;
  160.                          motoa=1;
  161.                          motob=1;
  162.                          delay(200);
  163.                          
  164.                          
  165.                          motoa=1;
  166.                          motob=1;
  167.                          motoa=0;
  168.                          motob=1;
  169.                          delay(200);  
  170.                  }
  171.                  if(redcom[1]==4)         //           步進電機停止
  172.                  {
  173.                      motoa=0;
  174.                          motob=0;
  175.                          motoa=0;
  176.                          motob=0;
  177.                  }   
  178.          }
  179. }


  180. void stopservice() interrupt 0
  181. {
  182.      time=0;
  183.          if(stop==0)           //如果按鍵按下
  184.          {
  185.               err=1000;
  186.                   while((stop==0)&&(err>0))                  //        等待9ms低電平過去
  187.                   {
  188.                        delay(1);
  189.                            err--;
  190.                   }
  191.                   if(stop==1)
  192.                   {
  193.                        err=500;
  194.                            while((stop==1)&&(err>0))  // 等待4.5ms高電平過去
  195.                            {
  196.                                delay(1);
  197.                                    err--;
  198.                            }
  199.                            for(k=0;k<4;k++)
  200.                            {
  201.                                  for(j=0;j<8;j++)
  202.                                          {
  203.                                               err=60;
  204.                                                   while((stop==0)&&(err>0))          //  等待560us低電平過去
  205.                                                   {
  206.                                                       delay(1);
  207.                                                           err--;
  208.                                                   }
  209.                                                   err=50;
  210.                                                   while((stop==1)&&(err>0))                   //計算高電平時間
  211.                                                   {
  212.                                                        delay(10);
  213.                                                            time++;
  214.                                                            if(time>30)
  215.                                                            {
  216.                                                                 err=0;
  217.                                                                        return;
  218.                                                            }
  219.                                                   }
  220.                                                   reddata[k]>>=1;         //        因為紅外通信是先傳低位,再傳高位。所以是右移。
  221.                                                   if(time>=8)                //         如果大于0.8ms說明是高電平,0.8ms是一個中間值
  222.                                                   {
  223.                                                        reddata[k]|=0x80;
  224.                                                   }
  225.                                                   time=0;
  226.                                                   err=0;                                                                                                    
  227.                                          }
  228.                            }
  229.                   }
  230.                   if(reddata[2]!=~reddata[3])
  231.                   {
  232.                       return;
  233.                   }
  234.          }
  235.           
  236. }
復制代碼

所有資料51hei提供下載:
紅外遙控直流電機啟停.rar (525.55 KB, 下載次數: 23)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:1 發表于 2018-10-15 01:28 | 顯示全部樓層
樓主能分享下原理圖嗎?
回復

使用道具 舉報

ID:295874 發表于 2018-10-15 08:57 | 顯示全部樓層
沒有原理圖參考起來不易,意義是有,但不好參考學習,建議上傳原理圖,謝謝。
回復

使用道具 舉報

ID:374361 發表于 2018-10-15 19:31 | 顯示全部樓層
實驗板原理圖,其實最重要的還是那個PPT,紅外遙控的編碼規則和時序搞清楚了就簡單了

EM3 V2.2開發板原理圖.pdf

274.28 KB, 下載次數: 13, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:374361 發表于 2018-10-15 19:34 | 顯示全部樓層
動態數碼管的作用是將外紅遙控的按鍵顯示在上面,按1,經過譯碼之后數碼管顯示1,按2,經過譯碼之后數碼管顯示2.其他按鍵也是同樣的原理。
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91人人视频在线观看 | 91久久久久久久 | 欧美 日韩 国产 成人 在线 91 | 精品一区二区三区中文字幕 | 91在线视频国产 | 久久久久久久一区 | 久久91精品国产一区二区 | 国产精品一区二区在线播放 | 久久久91精品国产一区二区三区 | 午夜在线免费观看 | 国产一区 | 国产乱码精品1区2区3区 | 国产精品黄 | 国产在线观看一区二区三区 | 国产精品1区 | 亚洲视频在线看 | 亚洲精品av在线 | 成人做爰9片免费看网站 | 国产精品久久久久久久久 | 欧美一区二区三区在线视频 | 99热99| 欧美美女爱爱视频 | 国产午夜精品一区二区三区嫩草 | 亚洲成人av一区二区 | 国产精品高潮呻吟久久 | 在线看亚洲 | 久久久久久国模大尺度人体 | 欧美精| 黄色亚洲网站 | 在线一级片 | 午夜精品久久久久久久 | 亚洲精品一区二区另类图片 | 欧美在线a| 国产精品国色综合久久 | 一区在线观看 | 久久美女网 | 成人福利| av中文字幕在线观看 | 国产精品一区二区三区四区 | 在线观看免费福利 | 国产成人精品免费视频大全最热 |