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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13854|回復: 14
打印 上一主題 下一主題
收起左側

51單片機紅外遙控小車源程序

  [復制鏈接]
跳轉到指定樓層
樓主
自己做的紅外遙控小車器件練手

單片機源程序如下:
  1. /*******************************************************************************
  2. --------------------------------------------------------------------------------
  3. * 實 驗 名                 : 紅外線試驗
  4. * 實驗說明       : 數碼管顯示紅外線發送過來的鍵值。
  5. * 連接方式       : 見連接圖
  6. * 注    意                 :
  7. *******************************************************************************/

  8. //#include<reg51.h>
  9. #include<reg52.h>
  10. //--定義使用的IO--//


  11. sbit IRIN = P3^2;
  12. sbit PWM1  = P0^1;
  13. sbit PWM2  = P0^2;

  14. //--定義一個全局變量--//
  15. unsigned char timer1;
  16. unsigned char IrValue[6];          //用來存放讀取到的紅外值
  17. unsigned char Time;

  18. //--聲明全局函數--//
  19. void IrInit();
  20. void DelayMs(unsigned int );
  21. void Time1Config();
  22. void speedup();
  23. void Slowdown();
  24. void go();
  25. void left();
  26. void right();
  27. void pwm_left(int x);
  28. void pwm_right(int x);
  29. /*******************************************************************************
  30. * 函數名         : main
  31. * 函數功能                   : 主函數
  32. * 輸入           : 無
  33. * 輸出                  : 無
  34. *******************************************************************************/

  35. void main()
  36. {
  37.         PWM1=0;
  38.         PWM2=0;
  39.         IrInit();
  40.         Time1Config();
  41.         while(1)
  42.         {
  43.                 IrValue[4]=IrValue[2]>>4;                          //高位
  44.                 IrValue[5]=IrValue[2]&0x0f;                //低位
  45.            if(IrValue[4]==0x0e&&IrValue[5]==0x08)
  46.                   {         
  47.                    pwm_left(37);
  48.                         pwm_right(40);

  49.                 }

  50.                    if(IrValue[4]==0x0d&&IrValue[5]==0x04)
  51.                      {         
  52.                 pwm_left(0);
  53.                                 pwm_right(0);

  54.                 }
  55. //           
  56.                    if(IrValue[4]==0x0e&&IrValue[5]==0x02)
  57.                   {         
  58.                    pwm_left(35);
  59.                         pwm_right(22);


  60.                 }
  61.                    if(IrValue[4]==0x0e&&IrValue[5]==0x00)
  62.                   {         
  63.                    pwm_left(22);
  64.                         pwm_right(35);


  65.                 }
  66.         }
  67. }


  68.         
  69.                         

  70. void pwm_left(int x)
  71. {
  72.                 if(timer1>100)  //PWM周期為100*0.5ms
  73.                 {
  74.                         timer1=0;
  75.                 }
  76.                 if(timer1 < x)        //改變30這個值可以改變直流電機的速度
  77.                 {
  78.                         PWM1=1;
  79.                 }
  80.                 else
  81.                 {
  82.                         PWM1=0;
  83.                 }        
  84. }
  85.          
  86. void pwm_right(int y)
  87. {
  88.                 if(timer1>100)  //PWM周期為100*0.5ms
  89.                 {
  90.                         timer1=0;
  91.                 }
  92.                 if(timer1 < y)        //改變30這個值可以改變直流電機的速度
  93.                 {
  94.                         PWM2=1;
  95.                 }
  96.                 else
  97.                 {
  98.                         PWM2=0;
  99.                 }        
  100. }
  101. /*******************************************************************************
  102. * 函數名         : DelayMs()
  103. * 函數功能                   : 延時
  104. * 輸入           : x
  105. * 輸出                  : 無
  106. *******************************************************************************/

  107. void DelayMs(unsigned int x)   //0.14ms誤差 0us
  108. {
  109.         unsigned char i;
  110.         while(x--)
  111.         {
  112.                 for (i = 0; i<13; i++)
  113.                 {}
  114.         }
  115. }
  116. /*******************************************************************************
  117. * 函數名         : IrInit()
  118. * 函數功能                   : 初始化紅外線接收
  119. * 輸入           : 無
  120. * 輸出                  : 無
  121. *******************************************************************************/

  122. void IrInit()
  123. {
  124.         IT0=1;//下降沿觸發
  125.         EX0=1;//打開中斷0允許
  126.         EA=1;        //打開總中斷

  127.         IRIN=1;//初始化端口
  128.     PWM1=0;
  129.         PWM2=0;
  130. }
  131. /*******************************************************************************
  132. * 函數名         : ReadIr()
  133. * 函數功能                   : 讀取紅外數值的中斷函數
  134. * 輸入           : 無
  135. * 輸出                  : 無
  136. *******************************************************************************/

  137. void ReadIr() interrupt 0
  138. {
  139.         unsigned char j,k;
  140.         unsigned int err;
  141.         Time=0;                                         
  142.         DelayMs(70);

  143.         if(IRIN==0)                //確認是否真的接收到正確的信號
  144.         {         
  145.                
  146.                 err=1000;                                //1000*10us=10ms,超過說明接收到錯誤的信號
  147.                 /*當兩個條件都為真是循環,如果有一個條件為假的時候跳出循環,免得程序出錯的時
  148.                 侯,程序死在這里*/        
  149.                 while((IRIN==0)&&(err>0))        //等待前面9ms的低電平過去                  
  150.                 {                        
  151.                         DelayMs(1);
  152.                         err--;
  153.                 }
  154.                 if(IRIN==1)                        //如果正確等到9ms低電平
  155.                 {
  156.                         err=500;
  157.                         while((IRIN==1)&&(err>0))                 //等待4.5ms的起始高電平過去
  158.                         {
  159.                                 DelayMs(1);
  160.                                 err--;
  161.                         }
  162.                         for(k=0;k<4;k++)                //共有4組數據
  163.                         {                                
  164.                                 for(j=0;j<8;j++)        //接收一組數據
  165.                                 {

  166.                                         err=60;               
  167.                                         while((IRIN==0)&&(err>0))//等待信號前面的560us低電平過去
  168.                                         {
  169.                                                 DelayMs(1);
  170.                                                 err--;
  171.                                         }
  172.                                         err=500;
  173.                                         while((IRIN==1)&&(err>0))         //計算高電平的時間長度。
  174.                                         {
  175.                                                 DelayMs(1);//0.14ms
  176.                                                 Time++;
  177.                                                 err--;
  178.                                                 if(Time>30)
  179.                                                 {
  180.                                                         EX0=1;
  181.                                                         return;
  182.                                                 }
  183.                                         }
  184.                                         IrValue[k]>>=1;         //k表示第幾組數據
  185.                                         if(Time>=8)                        //如果高電平出現大于565us,那么是1
  186.                                         {
  187.                                                 IrValue[k]|=0x80;
  188.                                         }
  189.                                         Time=0;                //用完時間要重新賦值                                                        
  190.                                 }
  191.                         }
  192.                 }
  193.                 if(IrValue[2]!=~IrValue[3])
  194.                 {
  195.                         return;
  196.                 }
  197.         }                        
  198. }

  199. /*******************************************************************************
  200. * 函 數 名       : Time1Config
  201. * 函數功能                 : 設置定時器
  202. * 輸    入       : 無
  203. * 輸    出       : 無
  204. *******************************************************************************/

  205. void Time1Config()
  206. ……………………

  207. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
程序.zip (30.61 KB, 下載次數: 264)


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

使用道具 舉報

沙發
ID:298119 發表于 2018-3-28 08:50 | 只看該作者
頂頂頂 剛好需要 謝謝樓主
回復

使用道具 舉報

板凳
ID:298119 發表于 2018-3-28 09:09 | 只看該作者
謝謝無私分享
回復

使用道具 舉報

地板
ID:317135 發表于 2018-5-18 14:37 | 只看該作者
下載后發現里面的前后左右程序沒有寫

9ecc890800614f7b269a6a155401e9d.png (33.42 KB, 下載次數: 219)

下載后發現里面的前后左右程序沒有寫

下載后發現里面的前后左右程序沒有寫
回復

使用道具 舉報

5#
ID:343934 發表于 2018-6-7 16:11 來自手機 | 只看該作者
好好好,,謝謝樓主
回復

使用道具 舉報

6#
ID:89217 發表于 2018-6-18 01:49 | 只看該作者
灰常感謝樓主,共享資料。學習了
回復

使用道具 舉報

7#
ID:326450 發表于 2018-11-4 18:48 | 只看該作者
郵電路圖和其他詳細資料么?
回復

使用道具 舉報

8#
ID:426007 發表于 2018-11-15 23:28 | 只看該作者
灰常感謝樓主,共享資料。學習了
回復

使用道具 舉報

9#
ID:428746 發表于 2018-11-18 16:26 | 只看該作者
謝謝樓主
回復

使用道具 舉報

10#
ID:426007 發表于 2018-11-18 23:48 | 只看該作者
樓主打不開啊
回復

使用道具 舉報

11#
ID:165792 發表于 2018-11-26 21:52 | 只看該作者
好,下載來試試
回復

使用道具 舉報

12#
ID:584662 發表于 2019-8-1 20:03 | 只看該作者
沒看到連接圖啊
回復

使用道具 舉報

13#
ID:592788 發表于 2019-8-6 23:38 | 只看該作者
學習學習
回復

使用道具 舉報

14#
ID:661170 發表于 2019-12-11 01:11 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

15#
ID:661170 發表于 2019-12-11 01:11 | 只看該作者
幫大忙了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产免费一区二区 | 亚洲精品久久久久久国产精华液 | 中文字幕爱爱视频 | 浴室洗澡偷拍一区二区 | 中文在线a在线 | 欧美日韩电影一区 | 日韩高清av | 91久久久精品国产一区二区蜜臀 | 一区二区三区四区国产精品 | 伊人网综合 | 国产精品亚洲一区二区三区在线 | 特黄色一级毛片 | 91精品国产91 | 国产精品久久毛片av大全日韩 | 中文字幕在线一区二区三区 | 一区二区三区四区视频 | www.天天干.com | 一区二区三区视频 | 欧美视频在线免费 | 男人的天堂久久 | 久久av一区二区三区 | 99精品免费 | 成人av网站在线观看 | 91久久久久久久久久久久久 | 97人人澡人人爽91综合色 | 正在播放国产精品 | 成人免费视频网站在线看 | 久久精品国产一区 | 自拍偷拍第一页 | 久久一区二区免费视频 | 日韩欧美中文字幕在线观看 | 欧美日韩国产免费 | 婷婷综合激情 | 伊人网在线综合 | 在线观看免费观看在线91 | 一区二区三区在线免费观看 | 国产精品成人一区二区三区 | 亚洲欧美久久 | 久久国品片 | 亚洲不卡在线观看 | 国产精品99久久久久久久久 |