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

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

QQ登錄

只需一步,快速開始

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

簡(jiǎn)單89C52單片機(jī)控制小車 可尋跡測(cè)速避障 PWM控速源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
   實(shí)現(xiàn)智能小車的紅外避障、循跡、測(cè)速控速和1602顯示的功能,
直接上程序了


單片機(jī)源程序:
  1. #include <reg52.h>
  2. #include <intrins.h>     
  3. #define uint unsigned int        
  4. #define uchar unsigned char      
  5. void delayXms(uint );   
  6. void delay1ms(void);   
  7. void PWM(void);     
  8. uint i,m,n,z;
  9. uint  h=5, l=5;
  10. uchar bai1,shi1,ge1,bai2,shi2,ge2,bai3,shi3,ge3;
  11. long int s,s1,s2,M1,M2,f;
  12. sbit deng=P3^7;
  13. sbit fen=P2^7;
  14. sbit zuo=P2^0;
  15. sbit jia=P3^7;
  16. sbit you=P2^1;
  17. sbit bi=P2^2;
  18. sbit Zbi=P2^3;
  19. sbit Ybi=P2^4;
  20. sbit pwm1 = P1^6;
  21. sbit pwm2 = P1^7;
  22. sbit IN1 = P1^2;
  23. sbit IN2 = P1^3;
  24. sbit IN3 = P1^4;
  25. sbit IN4 = P1^5;
  26. sbit RS=P1^0;                                
  27. sbit RW=P1^1;        
  28. sbit E =P2^5;        
  29. uchar dis1[]={"Fr:  Hz PWM:   %"};
  30. uchar dis2[]={"Speed:   mm/s"};
  31. void forward()
  32. {
  33.         IN1 = 0;
  34.         IN2 = 1;
  35.         IN3        = 0;
  36.         IN4 = 1;
  37. }
  38. void go()        
  39. {
  40.   pwm1 = 1;
  41.   pwm2 = 1;
  42. }
  43. void stop()         
  44. {
  45.   pwm1 = 0;
  46.   pwm2 = 0;
  47. }
  48. void PWM(void)   
  49. {  go();
  50.    delayXms(h);
  51.    stop();
  52.    delayXms(l);
  53. }
  54. void delayXms(uint ms)
  55. {
  56.         uint k;
  57.         for(k=0;k<ms;k++)
  58.           {delay1ms();}
  59. }
  60. void delayms(uint xms)
  61. {
  62.         uint i,j;
  63.         for(i=xms;i>0;i++)
  64.           for(j=200;j>0;j--);
  65. }
  66. void delay1ms(void)
  67. {
  68.     uint j;
  69.     for(j=0;j<=120;j++)
  70.       {_nop_();}
  71. }
  72. uchar lcd_busy()
  73. {
  74.         bit result;
  75.         RS=0;
  76.         RW=1;
  77.         E=1;
  78.         _nop_();
  79.         _nop_();
  80.         _nop_();
  81.         _nop_();
  82.         result = (bit)(P0&0x80);
  83.         E=0;
  84.         return result;
  85. }
  86. void lcd_wcmd(uchar cmd)   
  87. {
  88.         while(lcd_busy());
  89.         RS=0;
  90.         RW=0;
  91.         E=0;
  92.         _nop_();
  93.         _nop_();
  94.         P0=cmd;
  95.         _nop_();
  96.         _nop_();
  97.         _nop_();
  98.         _nop_();
  99.         E=1;
  100.         _nop_();
  101.         _nop_();
  102.         _nop_();
  103.         _nop_();
  104.         E=0;               
  105. }

  106. void lcd_pos(uchar pos)         
  107. {
  108.         lcd_wcmd(pos|0x80);
  109. }
  110. void lcd_wdat(uchar dat)               
  111. {
  112.         while(lcd_busy());
  113.         RS=1;
  114.         RW=0;
  115.         E=0;
  116.         P0=dat;
  117.         _nop_();
  118.         _nop_();
  119.         _nop_();
  120.         _nop_();
  121.         E=1;
  122.         _nop_();
  123.         _nop_();
  124.         _nop_();
  125.         _nop_();
  126.         E=0;        
  127. }
  128. void LcdInit()                /*LCD1602初始化函數(shù)*/
  129. {
  130.         delayXms(12);
  131.         lcd_wcmd(0x38);
  132.         delayXms(4);
  133.         lcd_wcmd(0x38);        
  134.         delayXms(4);
  135.         lcd_wcmd(0x38);
  136.         delayXms(4);
  137.         lcd_wcmd(0x0c);
  138.         delayXms(4);
  139.         lcd_wcmd(0x06);
  140.         delayXms(4);
  141.         lcd_wcmd(0x01);
  142.         delayXms(4);        
  143. }
  144. /*******************定時(shí)器1初使化函數(shù)**********************/
  145. void T1_Init()
  146. {
  147.         TMOD = 0x10;         
  148.         ET1=1;                        
  149.         EA=1;            //打開總中斷
  150.         IP=0x04;          //設(shè)置中斷優(yōu)先級(jí)
  151.         TH1 = (65535-50000)/256;        //初使加載50毫秒
  152.         TL1 = (65535-50000)%256;
  153. }
  154. /*******************外部中斷初使化函數(shù)***********************/
  155. void INT_Init()
  156. {
  157.         IT0 = 1;                                //設(shè)置外部中斷0為下降沿觸發(fā)
  158. //        IT1 = 1;                         //設(shè)置外部中斷1為下降沿觸發(fā)
  159.         EX0 = 1;                          //開外部中斷0
  160. //        EX1 = 1;                        //開外部中斷1
  161.         EA = 1;                                //開總中斷
  162. }
  163. /********************外部中斷函數(shù)**************************/
  164. void my_INT0(void) interrupt 0
  165. {
  166.         M1=M1++;                        
  167. }
  168. //void my_INT1(void) interrupt 2
  169. //{
  170. //        M2=M2++;         
  171. //}
  172. /******************定時(shí)器1中斷函數(shù)*************************/
  173. void timer1() interrupt 3
  174. {   TR1=0;            
  175.         TH1 = (65535-50000)/256;  
  176.         TL1 = (65535-50000)%256;  
  177.         n=n+1;                              
  178.         if(n==20)                                          
  179.         {   
  180.         f=M1;   
  181.                 shi1=(f/10)+48;      
  182.                 ge1=(f%10)+48;      

  183.                 z=100*h/(h+l);        
  184.                 bai2=(z/100)+48;      
  185.                 shi2=(z%100/10)+48;   
  186.                 ge2=(z%100%10)+48;   

  187.                 s1=M1/100.00*3.14*65;        
  188.             //s2=M2/100.00*3.14*65;
  189.                 s=s1;           
  190.                 bai3=(s/100)+48;                    
  191.                 shi3=(s%100/10)+48;                 
  192.                 ge3=(s%100%10)+48;         
  193.                 n=0;                  
  194.                 s1=0;                 
  195.         //        s2=0;                  
  196.                 M1=0;               
  197.         //        M2=0;                  
  198.         }
  199.          TR1=1;                    //啟動(dòng)T1
  200. }
  201. void xunji()
  202. {
  203.                  if(zuo==0&&you==0&&bi==1&&Zbi==1&&Ybi==1)                          //zhizou
  204.         {
  205.                   go();
  206.    delayXms(h);
  207.    stop();
  208.    delayXms(l);
  209.    deng=0;
  210.    fen=0;
  211.         }
  212.         if(zuo==1&&you==1&&bi==1&&Zbi==1&&Ybi==1)                                   //tingzhi
  213.         {
  214.                   pwm1 = 0;
  215.   pwm2 = 0;
  216.   fen=0;
  217.   deng=0;
  218.         }
  219.         else if(zuo==1&&you==0&&bi==1&&Zbi==1&&Ybi==1)                                           //zuozhuan
  220.         {
  221.            pwm1=1;
  222.     pwm2 = 0;
  223.         deng=0;
  224.         fen=1;
  225.         }
  226.         else if(zuo==0&&you==1&&bi==1&&Zbi==1&&Ybi==1)                                                        //youzhuan
  227.         {
  228.           pwm2=1;
  229. delayXms(1);
  230. pwm2=0;
  231.    delayXms(0);
  232.     pwm1 = 0;
  233.         deng=0;
  234.         fen=1;
  235.         }
  236.         else if(bi==0&&Zbi==0&&Ybi==0&&zuo==0&&you==0)                                                                                          //zhongbi ting
  237.                 {                                                  
  238.                   pwm1 = 0;
  239.   pwm2 = 0;
  240.   deng=1;
  241.   fen=1;
  242.         }
  243.          else if(Zbi==0&&bi==0)
  244.                          {
  245.           pwm2=1;
  246. delayXms(h);
  247. pwm2=0;
  248.    delayXms(l);
  249.     pwm1 = 0;
  250.         deng=1;
  251.         fen=0;
  252.         }
  253.         else if(Ybi==0&&bi==0)
  254.                 {
  255.            pwm1=1;
  256. delayXms(h);
  257. pwm1=0;
  258.    delayXms(l);
  259.     pwm2 = 0;
  260.         deng=1;
  261.         fen=0;
  262.         }
  263.                 else if(Ybi==0&&bi==1&&Zbi==1)
  264.                 {
  265.              pwm1=1;
  266. delayXms(h);
  267. pwm1=0;
  268.    delayXms(l);
  269.     pwm2 = 0;
  270.         deng=1;
  271.         fen=0;
  272.         }
  273.         else if(Zbi==0&&bi==1&&Ybi==1)
  274.                          {
  275.           pwm2=1;
  276. delayXms(h);
  277. pwm2=0;
  278.    delayXms(l);
  279.     pwm1 = 0;
  280.         deng=1;
  281.         fen=0;
  282.         }
  283. }

  284. void main()
  285. {  
  286.         T1_Init();                 
  287.         INT_Init();            
  288.         LcdInit();                  
  289.         TR1=1;                                      
  290.         lcd_pos(0x00);
  291.         i=0;                                                                  
  292.         while(dis1[ i] != '\0')           //1602液晶顯示器第一行初使化顯示
  293.         {
  294.                 lcd_wdat(dis1[ i]);
  295.                 i++;
  296.         };
  297.         i=0;
  298.         lcd_pos(0x41);
  299.         while(dis2 != '\0')                     //1602液晶顯示器第二行初使化顯示
  300.         {
  301.                 lcd_wdat(dis2);
  302.                 i++;        
  303.         };
  304.         while(1)               
  305.         {   
  306.             forward();
  307.         xunji();
  308.             lcd_pos(0x03);            
  309.             lcd_wdat(shi1);           
  310.         lcd_pos(0x04);            
  311.                 lcd_wdat(ge1);               
  312.                 lcd_pos(0x0c);                     
  313.                 lcd_wdat(bai2);         
  314.     lcd_pos(0x0d);            
  315.            lcd_wdat(shi2);         
  316.                 lcd_pos(0x0e);         
  317.         lcd_wdat(ge2);                                          
  318.                 lcd_pos(0x47);                             
  319.                 lcd_wdat(bai3);         
  320.                 lcd_pos(0x48);           
  321.                 lcd_wdat(shi3);                    
  322.                 lcd_pos(0x49);                     
  323.                 lcd_wdat(ge3);                                                                        
  324.     }
  325. }  
復(fù)制代碼


評(píng)分

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

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:184592 發(fā)表于 2017-9-4 11:03 | 只看該作者
感謝樓主的分享~
回復(fù)

使用道具 舉報(bào)

板凳
ID:242298 發(fā)表于 2019-11-24 15:38 | 只看該作者
求電路圖啊@@@@@嘻嘻嘻謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99精品一区二区 | 成人性视频免费网站 | 欧美日日 | 999www视频免费观看 | 91色网站| 久久视频精品 | aaaaaaa片毛片免费观看 | 欧美视频第二页 | 久久久久国产精品午夜一区 | 鸳鸯谱在线观看高清 | 91久久精品一区二区二区 | 国产精品免费在线 | 欧美精品一区二区在线观看 | 久久成人久久 | 日本粉嫩一区二区三区视频 | 国产区在线观看 | 在线一级片 | 亚洲网站在线观看 | 日韩欧美视频免费在线观看 | 丁香五月缴情综合网 | 亚洲国产一区在线 | 久久久久久久电影 | 日本免费黄色一级片 | 国产成人精品午夜视频免费 | 国产在线精品一区二区 | 亚洲不卡 | 黄一区二区三区 | 91精品国产综合久久久久蜜臀 | 久久国产精品免费一区二区三区 | 欧美日韩精品久久久免费观看 | 欧美精品综合 | 国产精品网址 | 欧美国产中文字幕 | 色99视频 | 91超碰caoporn97人人 | 国产精品国产三级国产aⅴ无密码 | 国产精品一区二区三区久久 | 操人网站| 国产午夜亚洲精品不卡 | 中文字幕 在线观看 | 日韩欧美在线一区 |