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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

自己做的單片機紅外遙控遙控小車程序及Proteus仿真圖

  [復制鏈接]
跳轉到指定樓層
樓主
制作的的遙控小車,要求自己寫小車程序和遙控器程序,自己就選擇做的用紅外線控制的,該設計包含紅外遙控小車的程序與控制器程序,可以實現小車前進、后退、左轉、右轉,以及利用PWM控制小車的加減速,另外還加了控制時按鍵數值顯示,可以作為傳輸信號是否正確。期間所學到的東西在本次設計中都有體現,可以作為初學者的學習程序。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


遙控器的發送程序如下:
  1. #include <AT89X51.h>

  2. static bit OP;        //紅外發射管的亮滅
  3. static unsigned int count;       //延時計數器
  4. static unsigned int endcount; //終止延時計數
  5. static unsigned char Flag;      //紅外發送標志
  6. char iraddr1;  //十六位地址的第一個字節
  7. char iraddr2;  //十六位地址的第二個字節

  8. void SendIRdata(char p_irdata);
  9. //void delay();
  10. char getkey()
  11. {
  12.         if(!P2_0)return 1;   //go
  13.         if(!P2_1)return 2;   //back
  14.         if(!P2_2)return 3;   //right
  15.         if(!P2_3)return 4;   //back
  16.         if(!P2_4)return 5;   //up
  17.         if(!P2_5)return 6;   //down
  18.         return 0;
  19. }

  20. void main(void)
  21. {
  22.         char key;
  23.         count = 0;
  24.         Flag = 0;
  25.         OP = 0;
  26.         P3_4 = 1;
  27.         EA = 1; //允許CPU中斷
  28.         TMOD = 0x11; //設定時器0和1為16位模式1
  29.         ET0 = 1; //定時器0中斷允許

  30.         P1=0xff;
  31.         TH0 = 0xFF;
  32.         TL0 = 0xE6; //設定時值0為38K 也就是每隔26us中斷一次  
  33.         TR0 = 1;//開始計數

  34.         iraddr1=0xff;
  35.         iraddr2=0xff;


  36.         do{
  37.                 key=getkey();
  38.                 if(key==1)SendIRdata(0x12);//go
  39.               if(key==2)SendIRdata(0x0b);//back
  40.               if(key==3)SendIRdata(0x1a);//right
  41.               if(key==4)SendIRdata(0x1e);//left
  42.               if(key==5)SendIRdata(0x0e);//up
  43.               if(key==6)SendIRdata(0x1d);//dowm
  44.           }
  45.          while(1);
  46. }
  47. //定時器0中斷處理
  48. void timeint(void) interrupt 1
  49. {
  50.         TH0=0xFF;
  51.         TL0=0xE6; //設定時值為38K 也就是每隔26us中斷一次
  52.         count++;
  53. }


  54. void SendIRdata(char p_irdata)
  55. {
  56.         int i;
  57.         char irdata=p_irdata;

  58.   //發送9ms的起始碼
  59.         endcount=223;
  60.           Flag=1;
  61.           count=0;
  62.           P3_4=0;
  63.           do{}while(count<endcount);

  64.   //發送4.5ms的結果碼
  65.           endcount=117;
  66.           Flag=0;
  67.          count=0;
  68.           P3_4=1;
  69.           do{}while(count<endcount);

  70.   //發送十六位地址的前八位
  71.           irdata=iraddr1;
  72.           for(i=0;i<8;i++)
  73.           {

  74.      //先發送0.56ms的38KHZ紅外波(即編碼中0.56ms的低電平)
  75.                 endcount=10;
  76.              Flag=1;
  77.              count=0;
  78.                  P3_4=0;
  79.              do{}
  80.                 while(count<endcount);

  81.     //停止發送紅外信號(即編碼中的高電平)
  82.                 if(irdata-(irdata/2)*2)  //判斷二進制數個位為1還是0
  83.              {
  84.                        endcount=15;  //1為寬的高電平
  85.              }
  86.             else
  87.              {
  88.                      endcount=41;   //0為窄的高電平
  89.              }
  90.             Flag=0;
  91.             count=0;
  92.                 P3_4=1;
  93.             do{}while(count<endcount);

  94.             irdata=irdata>>1;
  95.           }

  96.   //發送十六位地址的后八位
  97.           irdata=iraddr2;
  98.           for(i=0;i<8;i++)
  99.           {
  100.              endcount=10;
  101.              Flag=1;
  102.              count=0;
  103.                  P3_4=0;
  104.              do{}
  105.                 while(count<endcount);

  106.              if(irdata-(irdata/2)*2)
  107.              {
  108.                 endcount=15;
  109.              }
  110.              else
  111.              {
  112.                       endcount=41;
  113.              }
  114.              Flag=0;
  115.              count=0;
  116.                  P3_4=1;
  117.              do{}while(count<endcount);

  118.              irdata=irdata>>1;
  119.           }

  120.   //發送八位數據
  121.           irdata=~p_irdata;
  122.           for(i=0;i<8;i++)
  123.           {
  124.              endcount=10;
  125.              Flag=1;
  126.              count=0;
  127.                  P3_4=0;
  128.              do{}while(count<endcount);

  129.              if(irdata-(irdata/2)*2)
  130.              {
  131.                  endcount=15;
  132.              }
  133.              else
  134.              {
  135.                        endcount=41;
  136.              }
  137.              Flag=0;
  138.              count=0;
  139.                  P3_4=1;
  140.              do{}while(count<endcount);

  141.              irdata=irdata>>1;
  142.           }

  143.   //發送八位數據的反碼
  144.           irdata=p_irdata;
  145.           for(i=0;i<8;i++)
  146.           {
  147.              endcount=10;
  148.              Flag=1;
  149.              count=0;
  150.                  P3_4=0;
  151.              do{}while(count<endcount);

  152.              if(irdata-(irdata/2)*2)
  153.              {
  154.                  endcount=15;
  155.              }
  156.              else
  157.              {
  158.                        endcount=41;
  159.              }
  160.              Flag=0;
  161.              count=0;
  162.                  P3_4=1;
  163.              do{}while(count<endcount);

  164.              irdata=irdata>>1;
  165.           }

  166.           endcount=10;
  167.           Flag=1;
  168.           count=0;
  169.           P3_4=0;
  170.          do{}while(count<endcount);
  171.           P3_4=1;
  172.           Flag=0;
  173. }
復制代碼

Keil代碼與Proteus8.8仿真下載: 遙控小車.7z (79.47 KB, 下載次數: 114)

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:262 發表于 2022-4-14 16:44 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:1031405 發表于 2022-6-2 13:44 | 只看該作者
大佬,紅外小車的可以出教程嗎
回復

使用道具 舉報

地板
ID:1129401 發表于 2024-8-12 02:18 | 只看該作者
這個是遙控的摸
回復

使用道具 舉報

5#
ID:1142457 發表于 2025-1-4 18:06 | 只看該作者
感謝樓主分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99看片网 | 欧美日韩国产一区二区三区 | 久久男人 | 久久久久九九九女人毛片 | 亚洲欧美在线观看 | 中文字幕国产日韩 | 国产色 | 岛国av一区二区三区 | 日韩中文字幕一区二区 | 国产精品久久久久aaaa樱花 | 日本大片在线播放 | 2022精品国偷自产免费观看 | 日韩一区在线视频 | 午夜专区 | 亚洲精品在线看 | 精品久久久久久红码专区 | 精品视频一区二区在线观看 | 午夜精品久久久久久 | 亚洲一区二区成人 | 欧美日韩成人在线观看 | 久久综合欧美 | 国产欧美在线 | 波多野吉衣久久 | 精品欧美视频 | 精品欧美一区二区三区久久久 | 国产精品久久久精品 | 欧日韩在线 | 成人做爰9片免费看网站 | 国产三区视频在线观看 | 97视频精品| 国产精品久久久久久久久久久久久久 | 欧美日韩综合 | 欧美一区二区三区一在线观看 | 综合久久久 | 亚洲一区二区三区四区五区午夜 | 美美女高清毛片视频免费观看 | 亚洲一区二区中文字幕 | 欧美精品91| 国产一区二区三区免费观看在线 | 99久久精品国产一区二区三区 | 久久精品欧美一区二区三区不卡 |