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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7407|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+PNP三極管紅外線發(fā)射與接受程序Proteus仿真 實(shí)現(xiàn)遙控車(chē)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
單片機(jī)與紅外收發(fā)裝置及數(shù)碼管,獨(dú)立按鍵實(shí)現(xiàn)的遙控車(chē)仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)紅外線發(fā)射源程序如下:
  1. /***************************************************************
  2.         作品:紅外線發(fā)射
  3.   單片機(jī):STC89C52RC
  4.     晶振:12M
  5. 編譯環(huán)境:Keil uVision4 V9.00
  6. ***************************************************************/
  7. //
  8. //        發(fā)射引腳(接PNP三極管b極)
  9. //        PNP三極管e極接2Ω電阻,c極接紅外發(fā)射管
  10.      
  11. #include <REG51.h>
  12. #include <intrins.h>
  13. #define uchar unsigned char
  14. #define uint  unsigned int

  15. #define SBM   0x80                //識(shí)別碼

  16. #define m9    (65536-9000)               //約9mS
  17. #define m4_5  (65536-4500)               //約4.5mS
  18. #define m1_6  (65536-1630)               //約1.65mS
  19. #define m_65  (65536-580)               //約0.65mS
  20. #define m_56  (65536-560)               //約0.56mS
  21. #define m40   (65536-40000)       //約40mS
  22. #define m56   (65536-56000)       //56mS
  23. #define m2_25 (65536-2250)        //約2.25mS

  24. sbit IR  = P3^6;                                  //定義發(fā)射引腳(接PNP三極管基極)
  25. //按鍵
  26. sbit key1=P1^1;
  27. sbit key2=P1^2;
  28. sbit key3=P1^3;
  29. sbit key4=P1^4;
  30. sbit key5=P1^5;
  31. sbit key6=P1^6;
  32. sbit key7=P1^7;
  33. void  keyscan(void);
  34. void  ZZ(uchar x);
  35. void  Z0(uchar temp);
  36. void  TT0(bit BT,uint x);
  37. void  YS(uchar time);

  38. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  39. 函數(shù)功能:主函數(shù)
  40. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  41. void main(void)
  42. {

  43.   TMOD = 0x01;         //T0 16位工作方式
  44.   IR=1;                                   //發(fā)射端口常態(tài)為高電平

  45.   while(1)
  46.   {
  47.    keyscan();
  48.   }
  49. }

  50. /***************************************************************
  51. 函數(shù)功能:散轉(zhuǎn)程序
  52. 入口參數(shù):v
  53. //
  54. //  13 14 15 16
  55. //  9  10 11 12
  56. //  5  6  7  8
  57. //  1  2  3  4
  58. ***************************************************************/
  59. void keyscan(void)
  60. {
  61. //發(fā)送0x01
  62.   if(key1==0)                                          
  63.     {
  64.       YS(5);
  65.      if(key1==0)
  66.           {
  67.                   ZZ(0x01);
  68.                  
  69.                      while(!key1);//等待按鍵釋放
  70.           }
  71.         }
  72. //發(fā)送0x02
  73.   if(key2==0)                                          
  74.     {
  75.       YS(5);
  76.      if(key2==0)
  77.           {
  78.                   ZZ(0x02);
  79.                  
  80.                      while(!key2);//等待按鍵釋放
  81.           }
  82.         }
  83. //發(fā)送0x03
  84.   if(key3==0)                                          
  85.     {
  86.       YS(5);
  87.      if(key3==0)
  88.           {
  89.                   ZZ(0x03);
  90.                  
  91.                      while(!key3);//等待按鍵釋放
  92.           }
  93.         }
  94. //發(fā)送0x04
  95.   if(key4==0)                                          
  96.     {
  97.       YS(5);
  98.      if(key4==0)
  99.           {
  100.                   ZZ(0x04);
  101.                  
  102.                      while(!key4);//等待按鍵釋放
  103.           }
  104.         }
  105. //發(fā)送0x05
  106.   if(key5==0)                                          
  107.     {
  108.       YS(5);
  109.      if(key5==0)
  110.           {
  111.                   ZZ(0x05);
  112.                  
  113.                      while(!key5);//等待按鍵釋放
  114.           }
  115.         }
  116. //發(fā)送0x06
  117.   if(key6==0)                                          
  118.     {
  119.       YS(5);
  120.      if(key6==0)
  121.           {
  122.                   ZZ(0x06);
  123.                  
  124.                      while(!key6);//等待按鍵釋放
  125.           }
  126.         }
  127. //發(fā)送0x07
  128.   if(key7==0)                                          
  129.     {
  130.       YS(5);
  131.      if(key7==0)
  132.           {
  133.                   ZZ(0x07);
  134.                      while(!key7);//等待按鍵釋放
  135.           }
  136.         }
  137. }
  138. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  139. 函數(shù)功能:發(fā)送主程序
  140. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  141. void ZZ(uchar x)
  142. {
  143.   TT0(1,m9);                   //高電平9mS
  144.   TT0(0,m4_5);               //低電平4.5mS

  145.   /*┈ 發(fā)送4幀數(shù)據(jù) ┈*/
  146.   Z0(SBM);                                                                                                                                       
  147.   Z0(~SBM);
  148.   Z0(x);
  149.   Z0(~x);

  150.   /*┈┈ 結(jié)束碼 ┈┈*/
  151.   TT0(1,m_65);
  152.   TT0(0,m40);
  153.                   

  154. }
  155. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  156. 函數(shù)功能:?jiǎn)螏l(fā)送程序
  157. 入口參數(shù):1幀數(shù)據(jù)
  158. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  159. void Z0(uchar temp)
  160. {
  161.   uchar v;
  162.   for (v=0;v<8;v++)                     //循環(huán)8次移位
  163.        {     
  164.                  TT0(1,m_65);                        //高電平0.65mS         
  165.                          if(temp&0x01) TT0(0,m1_6); //發(fā)送最低位
  166.                          else          TT0(0,m_56);     
  167.                          temp >>= 1;                //右移一位
  168.         }   
  169. }

  170. /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
  171. 函數(shù)功能:38KHz脈沖發(fā)射 + 延時(shí)程序
  172. 入口參數(shù):(是否發(fā)射脈沖,延時(shí)約 x (uS))
  173. ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
  174. void TT0(bit BT,uint x)
  175. {
  176.   TH0 = x>>8;                    //輸入T0初始值
  177.   TL0 = x;
  178.   TF0=0;                                //清0
  179.   TR0=1;                                //啟動(dòng)定時(shí)器0
  180.   if(BT == 0) while(!TF0);        //BT=0時(shí)不發(fā)射38KHz脈沖只延時(shí);BT=1發(fā)射38KHz脈沖且延時(shí);
  181.   else while(1)                            //38KHz脈沖,占空比5:26
  182.          {
  183.                   IR = 0;
  184.                   if(TF0)break;
  185.               if(TF0)break;
  186.                   IR = 1;
  187.                 if(TF0)break;
  188.                  if(TF0)break;
  189.                  if(TF0)break;
  190.                   if(TF0)break;
  191.                  if(TF0)break;
  192.                  if(TF0)break;
  193.                  if(TF0)break;
  194.                  if(TF0)break;
  195.                  if(TF0)break;
  196.                   if(TF0)break;
  197.                  }
  198.   TR0=0;                                //關(guān)閉定時(shí)器0
  199.   TF0=0;                                //標(biāo)志位溢出則清0

  200.   IR =1;                                //脈沖停止后,發(fā)射端口常態(tài)為高電平
  201. }
  202. /***************************************************************
  203. 函數(shù)功能:按鍵消抖    延時(shí)程序
  204. 入口參數(shù):1ms×time       (晶振=12MHz)
  205. ***************************************************************/
  206. void YS(uchar time)
  207. {
  208.      uchar i,j;
  209.          for(i=0; i<time; i++)
  210.      for(j=0; j<247; j++)_nop_();
  211. }
復(fù)制代碼
  1. #include <REGX52.H>
  2. #include <intrins.h>
  3. #define uchar unsigned char   
  4. #define uint  unsigned int
  5. #define duanma P0  
  6. #define weima P2
  7. //按鍵
  8. sbit key1=P1^1;
  9. sbit key2=P1^2;
  10. sbit key3=P1^3;
  11. sbit key4=P1^4;
  12. sbit key5=P1^5;
  13. sbit key6=P1^6;
  14. sbit key7=P1^7;
  15. //紅外接收頭
  16. sbit        IR=P3^2;
  17. //電機(jī)接口       
  18. sbit motor1=P3^4;
  19. sbit motor2=P3^5;
  20. sbit motor3=P3^6;
  21. sbit motor4=P3^7;
  22. uchar code table[]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90,0xBF};//數(shù)碼管顯示0~9和 -
  23. uchar        N[4];                                 //識(shí)別碼,操作碼存放
  24. uchar num,count;//狀態(tài),加減選擇
  25. uint speed=100;//速度
  26. //延時(shí)函數(shù)
  27. void delay(uint mux)
  28. {                              
  29.   uint i,j;
  30.   
  31.   for(i=mux;i>0;i--)
  32.     for(j=100;j>0;j--);

  33. }
  34. //數(shù)碼管顯示內(nèi)容函數(shù)
  35. void display()
  36. {
  37.   
  38.     delay(1);
  39.   weima=0x01;
  40.   duanma=table[num];//顯示狀態(tài)
  41.      delay(1);
  42.   weima=0x02;
  43.   duanma=table[10];//顯示-
  44.      delay(1);
  45.   weima=0x04;
  46.   duanma=table[10];//顯示-
  47.      delay(1);
  48.   weima=0x08;
  49.   duanma=table[speed/100];//顯示檔位
  50.      delay(1);

  51. }
  52. //前進(jìn)
  53. void go()
  54. {
  55.   uint i;
  56.   for(i=speed;i>0;i=i-5)
  57.   {
  58.      if(i>10)
  59.          {
  60.        motor1=0;
  61.        motor2=1;

  62.        motor3=1;
  63.        motor4=0;
  64.           }
  65.          if(i<11)
  66.           {
  67.        motor1=0;
  68.        motor2=0;

  69.        motor3=0;
  70.        motor4=0;
  71.           }
  72.   }

  73. }
  74. //后退
  75. void back()
  76. {
  77.   uint i;
  78.   for(i=speed;i>0;i=i-5)
  79.   {
  80.      if(i>10)
  81.          {
  82.        motor1=1;
  83.        motor2=0;

  84.        motor3=0;
  85.        motor4=1;
  86.           }
  87.            if(i<11)
  88.           {
  89.        motor1=0;
  90.        motor2=0;

  91.        motor3=0;
  92.        motor4=0;
  93.           }
  94.   }

  95. }
  96. //停止
  97. void stop()
  98. {
  99.   motor1=0;
  100.   motor2=0;

  101.   motor3=0;
  102.   motor4=0;

  103. }
  104. //左轉(zhuǎn)
  105. void turn_left()
  106. {
  107.    uint i;
  108.   for(i=speed;i>0;i=i-5)
  109.   {
  110.      if(i>10)
  111.          {
  112.        motor1=1;
  113.        motor2=0;

  114.        motor3=1;
  115.        motor4=0;
  116.           }
  117.            if(i<11)
  118.           {
  119.        motor1=0;
  120.        motor2=0;

  121.        motor3=0;
  122.        motor4=0;
  123.           }
  124.   }

  125. }
  126. //右轉(zhuǎn)
  127. void turn_right()
  128. {
  129.    uint i;
  130.   for(i=speed;i>0;i=i-5)
  131.   {
  132.      if(i>10)
  133.          {
  134.        motor1=0;
  135.        motor2=1;

  136.        motor3=0;
  137.        motor4=1;
  138.           }
  139.            if(i<11)
  140.           {
  141.        motor1=0;
  142.        motor2=0;

  143.        motor3=0;
  144.        motor4=0;
  145.           }
  146.   }

  147. }
  148. //按鍵控制
  149. void keyscan()
  150. {
  151.   //加速
  152.   if(key1==0)                                          
  153.     {
  154.       delay(10);
  155.      if(key1==0)
  156.           {
  157.                   
  158.                   count=1;
  159.                      while(!key1);//等待按鍵釋放
  160.           }
  161.         }
  162. //左轉(zhuǎn)
  163.   if(key2==0)                                          
  164.     {
  165.        delay(10);
  166.      if(key2==0)
  167.           {
  168.                   
  169.                  num=3;
  170.                      while(!key2);//等待按鍵釋放
  171.           }
  172.         }
  173. //前進(jìn)
  174.   if(key3==0)                                          
  175.     {
  176.        delay(10);
  177.      if(key3==0)
  178.           {
  179.                   
  180.                   num=1;
  181.                      while(!key3);//等待按鍵釋放
  182.           }
  183.         }
  184. //停止
  185.   if(key4==0)                                          
  186.     {
  187.        delay(10);
  188.      if(key4==0)
  189.           {
  190.                   
  191.                   num=0;
  192.                      while(!key4);//等待按鍵釋放
  193.           }
  194.         }
  195. //后退
  196.   if(key5==0)                                          
  197.     {
  198.        delay(10);
  199.      if(key5==0)
  200.           {
  201.                   
  202.                    num=2;
  203.                      while(!key5);//等待按鍵釋放
  204.           }
  205.         }
  206. //減速
  207.   if(key6==0)                                          
  208.     {
  209.        delay(10);
  210.      if(key6==0)
  211.           {
  212.                   
  213.                    count=2;
  214.                      while(!key6);//等待按鍵釋放
  215.           }
  216.         }
  217. //右轉(zhuǎn)
  218.   if(key7==0)                                          
  219.     {
  220.        delay(10);
  221.      if(key7==0)
  222.           {
  223.                    num=4;
  224.                      while(!key7);//等待按鍵釋放
  225.           }
  226.         }

  227. }
  228. //主函數(shù)
  229. void main(void)
  230. {        
  231.   IT0 = 1;
  232.   EX0 = 1;
  233.   EA  = 1;

  234.   while(1)
  235.   {
  236.         display();
  237.         keyscan();
  238.            switch(num)
  239.         {
  240.           case 0: stop(); break;//暫停
  241.           case 1: go(); break;//前進(jìn)
  242.           case 2: back(); break; //后退
  243.           case 3: turn_left(); break;// 左轉(zhuǎn)
  244.           case 4: turn_right(); break; // 右轉(zhuǎn)
  245.        
  246.         }
  247.         if((count==1)&&(speed<410)){speed=speed+100;count=0;}        //加速
  248.         if((count==2)&&(speed>110)){speed=speed-100;count=0;}//減速
  249.   }
  250. }



  251. /********************** 外部中斷函數(shù)************************/
  252. void exint0() interrupt 0
  253. {          
  254.    uint cnt;
  255.    uchar i;

  256.    EX0 = 0;
  257.    cnt = 0;       
  258.        
  259. ……………………

  260. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載,仿真必須要Proteus7.5版本才能打開(kāi):
紅外遙控車(chē) 獨(dú)立按鍵.zip (191.29 KB, 下載次數(shù): 121)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:27161 發(fā)表于 2021-5-14 13:09 | 只看該作者
請(qǐng)教這個(gè)發(fā)射線路程序如何移植到STC15F104W上去運(yùn)行?我只需要簡(jiǎn)單的1到4按鍵按下發(fā)射對(duì)應(yīng)的鍵碼就可以,網(wǎng)上所有的發(fā)射程序我試了都可以在AT89和stc89系列上運(yùn)行,但在STC15F100系列上郡運(yùn)行不了,對(duì)C不太懂,只會(huì)看簡(jiǎn)單的程序。正在學(xué)習(xí)中。
回復(fù)

使用道具 舉報(bào)

板凳
ID:905775 發(fā)表于 2021-5-20 16:11 來(lái)自手機(jī) | 只看該作者
完全不用定時(shí)器中斷能做出來(lái)這個(gè)嗎
回復(fù)

使用道具 舉報(bào)

地板
ID:1044977 發(fā)表于 2022-9-18 01:12 來(lái)自手機(jī) | 只看該作者
樓主把這個(gè)做出來(lái)需要什么零件呢,有沒(méi)有清單什么的
回復(fù)

使用道具 舉報(bào)

5#
ID:1075299 發(fā)表于 2023-5-4 19:10 來(lái)自手機(jī) | 只看該作者
樓主,為什么我用的時(shí)候兩個(gè)電機(jī)同時(shí)動(dòng)的。還有左邊遙控器用了沒(méi)反應(yīng)的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人影院在线 | 中文字幕一区二区三区不卡在线 | 一二区成人影院电影网 | 偷偷操视频 | 国产欧美一区二区三区在线看 | 91 中文字幕| 91精品在线播放 | 精品一区二区不卡 | 久久综合狠狠综合久久综合88 | 久久久久精 | 日本一级淫片免费啪啪3 | 999精品视频| 天天干视频 | 久久99视频免费观看 | 亚洲在线视频 | 国产精品久久国产精品久久 | 亚洲一区毛片 | www免费视频 | 黄色毛片网站在线观看 | 伊人狠狠干 | 成人在线视频网 | 美女久久视频 | 欧美中文字幕一区二区三区 | 一区二区在线不卡 | 日韩中文字幕av | 亚洲高清电影 | 岛国av一区二区三区 | 91高清在线观看 | 国产乱码精品1区2区3区 | 久久综合一区二区三区 | 婷婷开心激情综合五月天 | 91在线视频国产 | 日本涩涩视频 | www.yw193.com| 亚洲一区精品在线 | 色av一区二区 | 青娱乐一区二区 | www.国产91 | 免费一级欧美在线观看视频 | 日韩欧美一二三区 | 日韩综合在线 |