找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1083|回复: 2
打印 上一主题 下一主题
收起左侧

单片机循迹车循迹程序

[复制链接]
跳转到指定楼层
楼主
自己写的循迹车循迹程序,多多指教

单片机源程序如下:
  1. #include <reg52.H>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. /*****************延时函数 1ms******************/
  5. void delay(unsigned int ms)
  6. {
  7.         unsigned char i;
  8.         while(ms--)
  9.                 {
  10.                         for(i=0;i<125;i++);
  11.                 }       
  12. }
  13. uchar dianji,dianjiH,dianjiL;
  14. uchar duoji,duojiH,duojiL,duojiH2,duojiL2,duojiH3,duojiL3;                  
  15. sbit  IN1=P2^6;          // 电机使能控制端
  16. sbit  ENA=P2^7;            
  17. sbit  IN2=P2^5;

  18. sbit  pwm=P2^0;      // 舵机pwm控制
  19. sbit  Ghg=P2^4;     // 干簧管                                                                         
  20.                            
  21. uint gg,gd,dg,dd,zgg,zgd,zdg,zdd;

  22. /*****中断程序1******用于控制舵机偏转角度******周期20ms*******/
  23. void timer1() interrupt 1 using 0       //中断1  T0溢出中断
  24. {
  25.         pwm=!pwm;          //输出取反  
  26.         if(pwm==0)          //
  27.         {
  28.               pwm=0;
  29.               TH0=dg;
  30.               TL0=dd;
  31.         }
  32.         else
  33.         {
  34.               pwm=1;
  35.               TH0=gg;
  36.               TL0=gd;
  37.         }         
  38. }
  39. /*********中断程序2****用于控制电机转速*********/
  40. void timer2() interrupt 3 using 3       //中断3  T1溢出中断,使用工作组3
  41. {
  42.         IN2=!IN2;                        // 输出取反
  43.         if(IN2==0)                        //
  44.         {
  45.               IN2=0;
  46.               TH1=zdg;
  47.               TL1=zdd;
  48.         }
  49.         else
  50.         {
  51.               IN2=1;
  52.               TH1=zgg;
  53.               TL1=zgd;
  54.         }         
  55. }

  56. /*&&&&&&&&& (一)此段子函数对舵机方向进行操作&&&&&&&&&&&&&&*/

  57. /********右转45度*******高低电位占空比为1.675:18.325ms**********/
  58. void yz45(void)
  59. {
  60.         gg=0xf9-duojiH3-(0x74<duojiL3);
  61.                 gd=0x74-duojiL3;
  62.                 dg=0xb8+duojiH3+(0x6a+duojiL3)/256;
  63.                 dd=0x6a+duojiL3;
  64.                 TR0=1;
  65. }                                                           

  66. /******右转25度******高低电位占空比为1.6:18.4ms*********/
  67. void yz25(void)
  68. {
  69.         gg=0xf9-duojiH2-(0xbf<duojiL2);     // 63935    65536-63935=1601
  70.                 gd=0xbf-duojiL2;
  71.                 dg=0xb8+duojiH2+(0x1f+duojiL2)/256;//  47135   65536-47135=18401
  72.                 dd=0x1f+duojiL2;
  73.         TR0=1;
  74.                
  75. }

  76. /******右转15度******高低电位占空比为1.55:18.45ms*********/
  77. void yz15(void)
  78. {
  79.         gg=0xf9-duojiH-(0xf1<duojiL);
  80.                 gd=0xf1-duojiL;
  81.                 dg=0xb7+duojiH+(0xed+duojiL)/256;
  82.                 dd=0xed+duojiL;
  83.         TR0=1;
  84.                
  85. }

  86. /*********复位*****高低电位占空比为1.5ms:18.5ms************/
  87. void fw(void)
  88. {
  89.         gg=0xfa;
  90.                 gd=0x23;
  91.                 dg=0xb7;
  92.                 dd=0xbb;
  93.         TR0=1;               
  94. }
  95. /******左转15度***********高低电位占空比为1.45:18.55ms***********/
  96. void zz15(void)
  97. {
  98.         gg=0xfa+duojiH+(0x55+duojiL)/256;
  99.                 gd=0x55+duojiL;
  100.                 dg=0xb7-duojiH-(0x89<duojiL);
  101.                 dd=0x89-duojiL;
  102.                 TR0=1;
  103.                
  104. }

  105. /******左转25度***********高低电位占空比为1.4:18.6ms***********/
  106. void zz25(void)
  107. {
  108.         gg=0xfa+duojiH2+(0x87+duojiL2)/256;
  109.                 gd=0x87+duojiL2;
  110.                 dg=0xb7-duojiH2-(0x57<duojiL2);
  111.                 dd=0x57-duojiL2;
  112.                 TR0=1;
  113.                
  114. }
  115. /********左转45度*****高低电位占空比为1.325:18.675ms*************/
  116. void zz45(void)
  117. {
  118.         gg=0xfa+duojiH3+(0xd2+duojiL3)/256;
  119.                 gd=0xd2+duojiL3;
  120.                 dg=0xb7-duojiH3-(0x0c<duojiL3);
  121.                 dd=0x0c-duojiL3;
  122.                 TR0=1;               
  123. }  

  124. /*&&&&&& (二)此段子函数对驱动电机进行操作*/
  125. void run(void)               //前进          高低电位占空比为4:16ms
  126. {      
  127.        
  128.     zgg=0xf0-dianjiH-(0x5f<dianjiL);
  129.         zgd=0x5f-dianjiL;  
  130.         zdg=0xc1+dianjiH+(0x7f+dianjiL)/256;
  131.         zdd=0x7f+dianjiL;
  132.    
  133. }
  134. void stop(void)               //停车          
  135. {      
  136.         ENA=1;
  137.         IN1=0;
  138.         IN2=0;       
  139. }

  140. /***********************主函数****************************/
  141. void main(void)                                                                          
  142. {   
  143.    
  144.     unsigned char i=0;                                                                   
  145.                                            
  146.         TMOD=0x11;                                                                                  //
  147.         ET0=1;                                                                                          //
  148.         ET1=1;                                                                                          //   中断初始化
  149.         EA=1;                                                                                          //
  150.         TR0=0;                                                                                          //
  151.         TR1=0;

  152.     Ghg=1;
  153.     P0=0XFF;         // 单片机端口初始化
  154.         P1=0xff;

  155.         i=P1;                                                            //拨码开关
  156.         dianji=i/16;                                            //
  157.         dianjiH=(150*dianji)/256;                    // 初始化电机速度 改电机输出电压最小值                                                               
  158.         dianjiL=(20*dianji)%256;                    //                                 
  159.        
  160.         duoji=i%16;                                                  // 舵机角度
  161.         duojiH=(2*duoji)/256;                          // 初始值10                                                               
  162.         duojiL=(2*duoji)%256;                          // 初始值10                                                               
  163.         duojiH2=(6*duoji)/256;                          // 初始值 20                                                  
  164.         duojiL2=(6*duoji)%256;                          // 初始值 20                                                       
  165.         duojiH3=(10*duoji)/256;                          // 初始值         33                                                  
  166.         duojiL3=(10*duoji)%256;                          // 初始值  33                                               
  167.         fw();
  168. //  ENA=1;         // L298 使能端高有效 控制端状态不同   状态相同时 快速停车
  169.         IN1=0;
  170. //        IN2=1;                       
  171.         run();
  172.         TR1=1;                                                                                                                                                                                                               

  173. /*************************舵机测试程序*************************************
  174. while(1)               
  175. {
  176. fw();
  177. delay(2000);
  178. yz45();
  179. delay(2000);
  180. yz25();
  181. delay(2000);
  182. yz25();
  183. delay(2000);
  184. delay(2000);
  185. zz15();
  186. delay(2000);
  187. zz25();
  188. delay(2000);
  189. zz45();  
  190. delay(2000);
  191. run();
  192. }   
  193. } */
  194. /******************循迹部分**传感器反*****最左P0.7最右P0.0***************/
  195.         while(1)               
  196.         {
  197.             if(Ghg == 0)
  198.             {
  199.                 fw();
  200.                         stop();
  201.              }   
  202. /************************循迹处理****************************/                                       
  203. /*P0_0==0  黑道          ..........P0_6==0黑道   从低往高 P0^7到P0^0*/       
  204.                 if(P0==0xF7)           //           1111 0111
  205.                         {
  206.                                 fw();
  207.                         }
  208.                 else if(P0==0xEF)        //                1110 1111
  209.                         {
  210.                                 zz15();
  211.                         }
  212.                 else if(P0==0XDF)         
  213.                         {
  214.                                 zz25();
  215.                         }
  216.                 else if(P0==0XBF)         
  217.                         {
  218.                                 zz45();
  219.                         }
  220.                 else if(P0==0XFB)         
  221.                         {
  222.                                 yz15();
  223.                         }
  224.                 else if(P0==0XFD)          
  225.                         {
  226.                                 yz25();
  227.                         }
  228.                 else if(P0==0XFE)                   
  229.                         {
  230.                                 yz45();
  231.                         }
  232.                 else;
  233.                         delay(10);
  234.                         run();       
  235.         }
  236. }
复制代码

所有资料51hei提供下载:
新建文件夹.rar (38.13 KB, 下载次数: 8)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-5-14 18:13 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

板凳
ID:319800 发表于 2019-5-14 18:50 | 只看该作者

Screenshot_2019-05-14-18-45-29-90.png (339.88 KB, 下载次数: 33)

电路图

电路图

Screenshot_2019-05-14-18-45-42-48.png (516.16 KB, 下载次数: 28)

组成

组成

Screenshot_2019-05-14-18-46-14-62.png (2.22 MB, 下载次数: 32)

焊接

焊接

Screenshot_2019-05-14-18-46-31-88.png (477.12 KB, 下载次数: 30)

降电路压

降电路压

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表