找回密码
 立即注册

QQ登录

只需一步,快速开始

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

可用VB控制的单片机遥控小车

  [复制链接]
跳转到指定楼层
楼主
ID:133790 发表于 2018-12-22 15:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前做的一个循迹小车,最后变成了一个遥控小车,可以采用电脑VB编写的画面控制,也可以采用在淘宝上买购买的串口触摸屏控制。小车已经被我拆了给我女做了一辆遥控小车。
附件中是程序代码。
VB控制智能小车.zip (8.44 KB, 下载次数: 25)
智能小车遥控器.zip (1.07 MB, 下载次数: 12)
智能小车C51.zip (127.21 KB, 下载次数: 12)
YL-40 AD模块使用说明.pdf (204.13 KB, 下载次数: 11)
串口HMI入门指南.pdf (814.13 KB, 下载次数: 13)

单片机源程序如下:
  1.                         /**************************************
  2. #define N 1            //可一次接收数据量
  3. 中断0        外部中断
  4. 中断1        定时器/计数器0中断
  5. 中断2        外部中断1
  6. 中断3        定时器/计数器1中断
  7. 中断4        串口中断
  8. 中断5        定时器/计数器2中断
  9. 中断6        外部中断2(仅STC增强型8051系列单片机)
  10. 中断7        外部中断3(仅STC增强型8051系列单片机)
  11. 左转++    右转--
  12. **************************************/
  13. #include <reg52.h>
  14. #include <intrins.h>
  15. #define uchar unsigned char                // 0~255
  16. #define uint unsigned int                  //0~65535
  17. #define  AddWr1 0x90    //AddWr1 地址        10010000
  18. #define  AddRd1        0x91    //AddRd1 地址   10010001
  19. #define  AddWr2 0x94    //AddWr2 地址        10010100
  20. #define  AddRd2 0x95        //AddRd2 地址   10010101
  21. #define N 5            //可一次接收数据量
  22. void rs232_init(); //定义串口通信函数
  23. uchar flag,i;        //删除无用变量                           
  24. uchar table[N];     //接收缓存数组
  25. uchar j=0;      //接收计数器

  26. /*********总线端口********/
  27. sbit SCL1=P0^6; //串行时钟输入端
  28. sbit SDA1=P0^7; //串行数据输入端

  29. /*********功能端口********/
  30. sbit XJB=P0^5; //循迹开关

  31. /*********遥控端口********/
  32. sbit F=P1^0;//前进         
  33. sbit SCB=P1^2;//刹车/后退   
  34. sbit L=P1^3;//左转         
  35. sbit R=P1^1;//右转

  36. /*********循迹端口********/      
  37. sbit QL=P3^6;//前左雷达
  38. sbit QR=P3^5;//前右雷达
  39. sbit QM=P3^4;//前中雷达
  40. sbit XJL1=P3^7;//循迹L1
  41. sbit XJR1=P3^2;//循迹R1
  42. sbit XJL2=P1^6;//循迹L2
  43. sbit XJR2=P1^5;//循迹R2

  44. /*********驱动端口********/
  45. sbit ZFL=P0^0;//正反转L
  46. sbit SCL=P0^1;//刹车L
  47. sbit ZFR=P0^2;//正反转R
  48. sbit SCR =P0^3;//刹车R

  49. /*********转向端口********/
  50. sbit ZX=P2^7;     //转向端口
  51. sbit SN=P2^6;     //定义使能端口
  52. sbit OUT=P2^2;    //定义OUT输出端口
  53. sbit HOME=P3^3;   //方向回正标志

  54. signed int a=0,a1,a2;//当前位置,设定位置1,设定位置2         有符号        + -
  55. char code a3[]={0,67,111,222,333,444,556,667,778,889,1111,2000,
  56.                                 -67,-111,-222,-333,-444,-556,-667,-778,-889,-1111,-2000};//位置数组
  57. uchar code jy[]={0x00,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
  58.                                       0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
  59.                                           0x01,0x02,0x05,0x0b,0x0f,0xf0,0xf1,0xf2,0xf3};
  60. uchar b;//差补值
  61. uchar c=0;//回正标志位
  62. uchar dir1;//方向判断开始标志
  63. uchar scb1;//刹车完成标志
  64. uchar snButton=0;//使能开关:0,自动;1,使能关闭
  65. uchar d1=0,d2=0,d=0;//左边速度
  66. uchar e1=0,e=0;//右边速度
  67. uchar forward=0,back=0; //前进后退标志位
  68. uint t1=0,t2=0,t3=0,t4=0,t5=0,t6=0,t7=0,t8=0,t9,t10,t11,t12;//定时器
  69. uchar z1,z2,z3,z4,z5,z6,z7,z8,z9,z10,z11,z12;
  70. uchar table2;//串口数据储存
  71. uchar jy1,jy2;//校验数据大小
  72. uchar autoN=0; //自动续航
  73. /*********************************
  74. t1 方向使能保时
  75. t2 前进锁定保时
  76. t3 后退锁定保时
  77. t4 备用
  78. t5 前进刹车保时
  79. t6 后退刹车保时
  80. t7
  81. t8
  82. t9
  83. t10
  84. t11
  85. *********************************/

  86. /********自动巡航状态*************/
  87. uchar l0,l1,l2,l3;//L雷达
  88. uchar m0,m1,m2,m3;//M雷达
  89. uchar r0,r1,r2,r3;//R雷达
  90. uchar lm0,lm1,lm2,lm3;//LM雷达
  91. uchar mr0,mr1,mr2,mr3;//MR雷达
  92. uchar lr0,lr1,lr2,lr3;//LR雷达
  93. uchar lmr0,lmr1,lmr2,lmr3;//LMR雷达
  94. uchar gear;//档位
  95. uchar speed;//速度
  96. uchar s1,s2,s3;//档位标志位
  97. uchar FS,BS;//前进刹车标志,后退刹车标志



  98. /*********延时4-5us********/
  99. void delay1()       
  100. {;;}


  101. /*********延时    ********/
  102. void delay_1ms(uint z)
  103. {
  104. uint x,y;
  105. for(x=z;x>0;x--)
  106. for(y=speed;y>0;y--);
  107. }



  108. /*********开始信号********/
  109. void start()                //开始信号
  110. {
  111. SDA1=1;  //先把数据置1,再把时钟置1,后把数据置0. 以保证在时钟为1时,数据由高变低。
  112. delay1();
  113. SCL1=1;        //时钟信号为1
  114. delay1();
  115. SDA1=0;        //数据在时钟高电平时1-0则为开始信号。
  116. delay1();
  117. }
  118. /********* 停止信号   ********/
  119. void stop()                        //停止信号
  120. {
  121. SDA1=0; //先把数据置0,再把时钟置1,后把数据置1. 以保证在时钟为1时,数据由低变高。
  122. delay1();
  123. SCL1=1;          //时钟信号为1
  124. delay1();
  125. SDA1=1;           //数据在时钟高电平时0-1则为停止信号。
  126. delay1();
  127. }

  128. /*********应答    ********/
  129. void respons()//应答         相当于一个智能的延时函数
  130. {
  131. uchar i;
  132. SCL1=1;//scl高电平期间接收信号
  133. delay1();
  134. while((SDA1==1)&&(i<220))
  135. i++;
  136. SCL1=0;
  137. delay1();
  138. }
  139.         /********* 初始化   ********/
  140.         //void init()        //初始化
  141.         //{
  142.         //SDA1=1;
  143.         //delay1();
  144.         //SCL1=1;
  145.         //delay1();
  146.         //}

  147. /*********用移位溢出的方式逐位输出数据********/
  148. void write_byte(uchar date)        //写一字节数据
  149. {
  150. uchar i,temp;
  151. temp=date;
  152. for(i=0;i<8;i++)
  153. {
  154. temp=temp<<1;        //左移一位 移出的一位在 CY 中
  155. SCL1=0;
  156. delay1();
  157. SDA1=CY;
  158. delay1();
  159. SCL1=1;//此时读取总线数据
  160. delay1();
  161. }
  162. SCL1=0;
  163. delay1();
  164. SDA1=1;
  165. delay1();
  166. }


  167. /*********L速度模拟量模块驱动 ********/
  168. void write_add(uchar address,uchar date)
  169. {
  170. start();
  171. write_byte(AddWr1);        //10010000
  172. respons();
  173. write_byte(address);
  174. respons();
  175. write_byte(date);
  176. respons();
  177. stop();
  178. }
  179. /********R速度模拟量模块驱动 ********/
  180. void write_add1(uchar address,uchar date)
  181. {
  182. start(); //调用中断
  183. write_byte(AddWr2);        //10010100
  184. respons();
  185. write_byte(address);
  186. respons();
  187. write_byte(date);
  188. respons();
  189. stop();
  190. }



  191. /***********初始化串口通信参数设定************/
  192. void rs232_init() //初始化串口通信参数设定
  193. {
  194.       TMOD=0x20;
  195.       TH1=0xfd;
  196.       TL1=0xfd;
  197.       TR1=1;

  198.       SM0=0;//
  199.       SM1=1;// SM0 SM1 0 1 工作方式1 10位异步收发,波特率可变(T1溢出率/n,n=32或16)

  200.       REN=1;//先设定号工作方式,在打开允许接收
  201.       EA=1;
  202.       ES=1;        
  203. }
  204. /***************************************************************************
  205. (1)SM0 SM1:串行口工作方式选择位。
  206.         SM0 SM1 0 0 工作方式0 同步移位寄存器输入/输出,波特率固定为fosc/12
  207.         SM0 SM1 0 1 工作方式1 10位异步收发,波特率可变(T1溢出率/n,n=32或16)
  208.         SM0 SM1 1 0 工作方式2 11位异步收发,波特率固定为fosc/n,n=64或32)
  209.         SM0 SM1 1 1 工作方式3 11位异步收发,波特率可变(T1溢出率/n,n=32或16)

  210. (2)SM2:多机通信控制器位。在方式0中,SM2必须设成0。在方式1中,当处于接收状态时,若
  211.         SM2=1,则只有接收到有效的停止位“1”时,RI才能被激活成“1”(产生中断请求)。在方式2和方式
  212.         3中,若SM2=0,串行口以单机发送或接收方式工作,TI和RI以正常方式被激活并产生中断请求;若
  213.         SM2=1,RB8=1时,RI被激活并产生中断请求。

  214. (3)REN:串行接受允许控制位。该位由软件置位或复位。当REN=1,允许接收;当REN=0,禁止接收。

  215. (4)TB0:方式2和方式3中要发送的第9位数据。该位由软件置位或复位。在方式2和方式3时,
  216.         TB8是发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据 :
  217.         TB8=1表示地址,TB8=0表示数据。TB8还可用作奇偶校验位。

  218. (5)RB8:接收数据第9位。在方式2和方式3时,RB8存放接收到的第9位数据。RB8也可用作奇偶校验位。
  219.         在方式1中,若SM2=0,则RB8是接收到的停止位。在方式0中,该位未用。

  220. (6)TI:发送中断标志位。TI=1,表示已结束一帧数据发送,可由软件查询TI位标志,也可以向CPU申请
  221.         中断。

  222.         注意:TI在任何工作方式下都必须由软件清0。
  223. (7)RI:接收中断标志位。RI=1,表示一帧数据接收结束。可由软件查询RI位标志,也可以向CPU申请中断。
  224.        
  225.         注意:RI在任何工作方式下也都必须由软件清0。
  226.         在AT89C51中,串行发送中断TI和接收中断RI的中断入口地址是同是0023H,因此在中断程序中
  227.         必须由软件查询TI和RI的状态才能确定究竟是接收还是发送中断,进而作出相应的处理。单片机复位时,
  228.         SCON所有位均清0。


  229. *****************************************************************************/

  230. /***********左转弯控制***************/
  231. void Lpulse()//左转脉冲输出计数
  232. {
  233.         if(a<2000)//左转极限
  234.         {
  235.                 ZX=0;
  236.                 if(a1>a)
  237.                 {
  238.                         a++;
  239.                         OUT=~OUT;
  240.                 }
  241.         }       
  242. }
  243. /***********右转弯控制***************/
  244. void Rpulse()//右转脉冲输出计数
  245. {
  246.         if(a>-2000)//右转极限
  247.         {
  248.                 ZX=1;
  249.                 if(a1<a)
  250.                 {
  251.                         a--;
  252.                         OUT=~OUT;
  253.                 }
  254.         }       
  255. }

  256. /****************差速驱动***************************/
  257. void speed1()//
  258. {
  259.         if(a>0)
  260.         {
  261.                 if(a<2000)
  262.                 {
  263.                         d=speed -a/b;   //a偏角数,b差速倍率
  264.                         e=speed;
  265.                 }
  266.                 else
  267.                 {
  268.                         d=speed;
  269.                         e=speed;
  270.                 }
  271.         }
  272.         if(a<0)
  273.         {
  274.                 if(a>-2000)
  275.                 {
  276.                         d=speed;
  277.                         e=speed +a/b;
  278.                 }
  279.                 else
  280.                 {
  281.                         if(speed<150)
  282.                         {
  283.                                 d=speed+20;
  284.                                 e=0;
  285.                         }
  286.                         else
  287.                         {
  288.                                 d=speed;
  289.                                 e=0;                       
  290.                         }
  291.                 }
  292.         }
  293.         if(a==0)
  294.         {
  295.                 d=speed;
  296.                 e=speed;
  297.         }
  298. }
  299. /*************串口通信数据归零************************/
  300. void table1()
  301. {
  302. table[0]=0;
  303. }
  304. /*****************转向方向运算*****************************/


  305. /*****************前进刹车驱动*****************************/

  306. /*****************后退刹车驱动*****************************/


  307. /***************主程序******************/
  308. void main()
  309. {
  310.         TMOD=0X11;//定时器0采用工作方式1
  311.         TH0=(65536-200)/256;
  312.         TL0=(65536-200)%256;//初值,定时
  313.     TH2=(65536-50000)/256;//初值,定时1ms
  314.     TL2=(65536-50000)%256;//
  315.         T2CON=0;
  316.         EA=1;            //总中断打开
  317.     ET0=1;           //定时器0中断打开
  318.     ET2=1;           //定时器2中断打开
  319.         TR0=1;//启动定时器0
  320.         TR2=1;
  321.     rs232_init();   //调用串口通信参数设定函数
  322.         speed=90;
  323.         b=22;
  324.         jy1=1;
  325.         while(1)
  326.         {
  327. /*****************指令校验***************************/
  328. if(table[0]!=0)
  329. {
  330. for(jy1=0;jy1<43;jy1++)
  331. {
  332.          if(jy[jy1]==table[0])
  333.         {
  334.                 jy2=1;       
  335.         }
  336. }       
  337.         if(jy2==1&&jy1==42)//如果串口数据在列表中,校验成功,复位标志位jy2.
  338.         {
  339.                 table[0]=table[0];
  340.                 SCL=1;
  341.                 SCR=1;
  342.         }
  343.         if(jy2==0&&jy1==42&&table[0]!=0) //如果校验失败,启动刹车
  344.         {
  345.                 table1();
  346.                 F=1;
  347.                 SCB=1;
  348.                 forward=0;
  349.                 back=0;
  350.                 t2=0;
  351.                 t3=0;
  352.                 a1=0;
  353.                 dir1=1;
  354.                 speed=90;//刹车启动后设为一档
  355.                 b=22;//差速系数       
  356.                 SCL=0;
  357.                 SCR=0;
  358.         }
  359. }

  360. /**************转弯方向判断********************/
  361.                 if(dir1==1)
  362.                 {
  363.                         c=0;
  364.                         if(a1==a)
  365.                         {
  366.                                 L=1;
  367.                                 R=1;
  368.                                 dir1=0;
  369.                                 table1();
  370.                         }
  371.                         if(a1>a)        //启动左转
  372.                         {
  373.                                 L=0;
  374.                                 R=1;
  375.                         }
  376.                         if(a1<a)   //启动右转
  377.                         {
  378.                                 L=1;
  379.                                 R=0;
  380.                         }                       
  381.                 }


  382.                

  383. /***************串口通信*************************/
  384.             if(flag==1)
  385.             {
  386.                 ES=0;
  387.                 for(j=0;j<N;j++)                  //回传接收数组
  388.                 {
  389.                           SBUF=table[j];              //把接收到的数据重新赋值给串口缓存寄存器
  390.                    while(!TI);
  391.                    TI=0;
  392.                 }
  393.                 j=0;                                           //清零接收计数器
  394.                 ES=1;
  395.                 flag=0;
  396.             }

  397.                         if(table[0]==0x01)//前进
  398.                         {
  399.                                 F=0;
  400.                                 SCB=1;
  401.                                 t3=0;
  402.                                 back=0;
  403.                                 if(forward==1)//当前进锁定后,再次按下后退自动回正
  404.                                 {
  405.                                         c=1;//回正
  406.                                 }
  407.                         }
  408.                         if(table[0]==0x02)//后退
  409.                         {
  410.                                 F=1;
  411.                                 SCB=0;
  412.                                 t2=0;
  413.                                 forward=0;
  414.                                 if(back==1)        //当后退锁定后,再次按下后退自动回正
  415.                                 {
  416.                                         c=1;
  417.                                 }
  418.                         }
  419.                         if(table[0]==0x0f)//刹车
  420.                         {
  421.                                 F=1;
  422.                                 SCB=1;
  423.                                 t2=0;
  424.                                 t3=0;
  425.                                 a1=0;
  426.                                 dir1=1;
  427.                                 speed=90;//刹车启动后设为一档
  428.                                 b=22;//差速系数
  429.                         }
  430.                         if(table[0]==0xa0)//L3
  431.                         {
  432.                                 a1=67;
  433.                                 dir1=1;//方向判断
  434.                         }
  435.                         if(table[0]==0xa1)//L5
  436.                         {
  437.                                 a1=111;
  438.                                 dir1=1;//方向判断
  439.                         }
  440.                         if(table[0]==0xa2)//L10
  441.                         {
  442.                                 a1=222;
  443.                                 dir1=1;//方向判断
  444.                         }
  445.                         if(table[0]==0xa3)//L15
  446.                         {
  447.                                 a1=333;
  448.                                 dir1=1;//方向判断
  449.                         }
  450.                         if(table[0]==0xa4)//L20
  451.                         {
  452.                                   a1=444;//设定角度
  453.                                 dir1=1;//方向判断
  454.                         }
  455.                         if(table[0]==0xa5)//L25
  456.                         {
  457.                                   a1=556;//设定角度
  458.                                 dir1=1;//方向判断
  459.                         }
  460.                         if(table[0]==0xa6)//L30
  461.                         {
  462.                                   a1=667;//设定角度
  463.                                 dir1=1;//方向判断
  464.                         }
  465.                         if(table[0]==0xa7)//L35
  466.                         {
  467.                                   a1=778;//设定角度
  468.                                 dir1=1;//方向判断
  469.                         }
  470.                         if(table[0]==0xa8)//L40
  471.                         {
  472.                                   a1=889;//设定角度
  473.                                 dir1=1;//方向判断
  474.                         }
  475.                         if(table[0]==0xa9)//L45
  476.                         {
  477.                                   a1=1000;//设定角度
  478.                                 dir1=1;//方向判断
  479.                         }
  480.                         if(table[0]==0xaa)//L50
  481.                         {
  482.                                   a1=1111;//设定角度
  483.                                 dir1=1;//方向判断
  484.                         }
  485.                         if(table[0]==0xab)//L55
  486.                         {
  487.                                   a1=1222;//设定角度
  488.                                 dir1=1;//方向判断
  489.                         }
  490.                         if(table[0]==0xac)//L60
  491.                         {
  492.                                   a1=1333;//设定角度
  493.                                 dir1=1;//方向判断
  494.                         }
  495.                         if(table[0]==0xab)//L70
  496.                         {
  497.                                   a1=1556;//设定角度
  498.                                 dir1=1;//方向判断
  499.                         }
  500.                         if(table[0]==0xae)//L80
  501.                         {
  502.                                   a1=1778;//设定角度
  503.                                 dir1=1;//方向判断
  504.                         }
  505.                         if(table[0]==0xaf)//L90
  506.                         {
  507.                                   a1=2000;//设定角度
  508.                                 dir1=1;//方向判断
  509.                         }
  510.                         if(table[0]==0x05)//L微调
  511.                         {
  512.                                 a=a+20;
  513.                                 a1=0;
  514.                                 dir1=1;
  515.                                 table1();
  516.                         }
  517.                         if(table[0]==0x0b)//R微调
  518.                         {
  519.                                 a=a-20;
  520.                                 a1=0;
  521.                                 dir1=1;
  522.                                 table1();
  523.                         }
  524.                         if(table[0]==0x08)//回正
  525.                         {
  526.                                 a1=0;
  527.                                 dir1=1;
  528.                         }
  529.                         if(table[0]==0xb0)//R3
  530.                         {
  531.                                   a1=-67;//设定角度
  532.                                 dir1=1;//方向判断
  533.                         }
  534.                         if(table[0]==0xb1)//R3
  535.                         {
  536.                                   a1=-111;//设定角度
  537.                                 dir1=1;//方向判断
  538.                         }
  539.                         if(table[0]==0xb2)//R10
  540.                         {
  541.                                   a1=-222;//设定角度
  542.                                 dir1=1;//方向判断
  543.                         }
  544.                         if(table[0]==0xb3)//R15
  545.                         {
  546.                                   a1=-333;//设定角度
  547.                                 dir1=1;//方向判断
  548.                         }
  549.                         if(table[0]==0xb4)//R20
  550.                         {
  551.                                   a1=-444;//设定角度
  552.                                 dir1=1;//方向判断
  553.                         }
  554.                         if(table[0]==0xb5)//R25
  555.                         {
  556.                                   a1=-556;//设定角度
  557.                                 dir1=1;//方向判断
  558.                         }
  559.                         if(table[0]==0xb6)//R30
  560.                         {
  561.                                   a1=-667;//设定角度
  562.                                 dir1=1;//方向判断
  563.                         }
  564.                         if(table[0]==0xb7)//R35
  565.                         {
  566.                                   a1=-778;//设定角度
  567.                                 dir1=1;//方向判断
  568.                         }
  569.                         if(table[0]==0xb8)//R40
  570.                         {
  571.                                   a1=-889;//设定角度
  572.                                 dir1=1;//方向判断
  573.                         }
  574.                         if(table[0]==0xb9)//R45
  575.                         {
  576.                                   a1=-1000;//设定角度
  577.                                 dir1=1;//方向判断
  578.                         }
  579.                         if(table[0]==0xba)//R50
  580.                         {
  581.                                   a1=-1111;//设定角度
  582.                                 dir1=1;//方向判断
  583.                         }
  584.                         if(table[0]==0xbb)//R55
  585.                         {
  586.                                   a1=-1222;//设定角度
  587.                                 dir1=1;//方向判断
  588.                         }
  589.                         if(table[0]==0xbc)//R60
  590.                         {
  591.                                   a1=-1333;//设定角度
  592.                                 dir1=1;//方向判断
  593.                         }
  594.                         if(table[0]==0xbd)//R70
  595.                         {
  596.                                   a1=-1556;//设定角度
  597.                                 dir1=1;//方向判断
  598.                         }
  599.                         if(table[0]==0xbe)//R80
  600.                         {
  601.                                   a1=-1778;//设定角度
  602.                                 dir1=1;//方向判断
  603.                         }
  604.                         if(table[0]==0xbf)//R90
  605.                         {
  606.                                   a1=-2000;//设定角度
  607.                                 dir1=1;//方向判断
  608.                         }
  609.                         if(table[0]==0x12)//1档
  610.                         {
  611.                                 speed=90;
  612.                                 b=22;
  613.                         }
  614.                         if(table[0]==0x13)//2档
  615.                         {
  616.                                 speed=120;
  617.                                 b=17;
  618.                         }
  619.                         if(table[0]==0x14)//3档
  620.                         {
  621.                                 speed=150;
  622.                                 b=13;
  623.                         }
  624.                         if(table[0]==0xf0)//自动开始
  625.                         {
  626.                                  autoN=1;
  627.                         }
  628.                         if(table[0]==0xf1)//自动关闭
  629.                         {
  630.                                 autoN=0;
  631.                         }
  632.                         if(table[0]==0xf2)//使能手动关闭
  633.                         {
  634.                                 snButton=1;       
  635.                         }
  636.                         if(table[0]==0xf3)//使能自动
  637.                         {
  638.                                 snButton=0;       
  639.                         }

  640. /*************************************************/

  641. /*****************************************************/

  642.                 write_add(0x40,d1);        //调用函数write_add(ox40,a)  在前面函数声明中,只是声明了变量并未作赋值
  643.                 write_add1(0x40,e1);        //调用函数write_add(ox40,a)  在前面函数声明中,只是声明了变量并未作赋值       
  644.                 d1=d;//左边速度
  645.                 e1=e;//右边速度
  646. /**************************************************/
  647. if(autoN==1)
  648. {
  649.         scb1=0;//刹车完成标志rst
  650.         if(QL==0&&QR==1)
  651.         {
  652.                 a1=-1200;//设定角度
  653.                 dir1=1;//方向判断
  654.         }
  655.         if(QR==0&&QL==1)
  656.         {
  657.                 a1=1200;//设定角度
  658.                 dir1=1;//方向判断
  659.         }
  660.         if(QR==0&&QL==0)
  661.         {
  662.                                 F=1;
  663.                                 SCB=1;
  664.                                 forward=0;
  665.                                 back=0;
  666.                                 t2=0;
  667.                                 t3=0;
  668.                                 a1=0;
  669.                                 dir1=1;
  670.                                 speed=90;//刹车启动后设为一档
  671.                                 b=22;//差速系数
  672.         }
  673.         if(QM==0)
  674.         {
  675.                                 F=1;
  676.                                 SCB=0;
  677.                                 t2=0;
  678.                                 forward=0;
  679.                                 if(back==1)        //当后退锁定后,再次按下后退自动回正
  680.                                 {
  681.                                         c=1;
  682.                                 }
  683.         if(QL==0&&QR==1)
  684.         {
  685.                 a1=-1200;//设定角度
  686.                 dir1=1;//方向判断
  687.         delay_1ms(400);
  688.         }
  689.         if(QR==0&&QL==1)
  690.         {
  691.                 a1=1200;//设定角度
  692.                 dir1=1;//方向判断
  693.         delay_1ms(400);
  694.         }
  695.         delay_1ms(800);

  696.         }
  697.         else
  698.         {
  699.                                 F=0;
  700.                                 SCB=1;
  701.                                 t3=0;
  702.                                 back=0;
  703.                                 if(forward==1)//当前进锁定后,再次按下后退自动回正
  704.                                 {
  705.                                         c=1;//回正
  706.                                 }       
  707.         }
  708.         if(QL==1&&QR==1&&a!=0)
  709.         {
  710.                 a1=0;
  711.                 dir1=1;
  712.         }
  713. }
  714. /****************************************************/



  715.                         if(F==0||t2>10)
  716.                         {
  717.                                 t3=0;//后退自锁解除

  718.                                 if((back==0&&XJB==1)||t2<10)//按下F按钮10以内启动点动模式
  719.                                 {
  720.                                         t3=0; //按压后退开关延时自锁取消
  721.                                         speed1();//差速自动控制
  722.                                         if(t2>10)//当前进按钮按下10以上时前进标志位置位
  723.                                         {
  724.                                                 forward=1;    //前进标志位置位
  725.                                         }
  726.                                         else //如果没有超过10,则不启动前进标志位
  727.                                         {
  728.                                                 forward=0;
  729.                                         }       
  730.                                         SCL=1;
  731.                                         SCR=1;        //关闭刹车
  732.                                         if(a==0)
  733.                                         {
  734.                                                 ZFL=1;
  735.                                                 ZFR=1;
  736.                                     }
  737.                                         if(a>0)
  738.                                         {
  739.                                                 if(a<2000)
  740.                                                 {

  741.                                                 ZFL=1;
  742.                                                 ZFR=1;                                               
  743.                                                 }
  744.                                                 else
  745.                                                 {
  746.                                                 ZFL=0;
  747.                                                 ZFR=1;
  748.                                                 }
  749.                                     }
  750.                                         if(a<0)
  751.                                         {
  752.                                                 if(a>-2000)
  753.                                                 {
  754.                                                 ZFL=1;
  755.                                                 ZFR=1;
  756.                                                 }

  757.                                     }
  758.                                   }
  759.                                        

  760.                         }

  761. /************倒车**********************/
  762.                         if(SCB==0||t3>10)
  763.                         {
  764.                                 t2=0; //按压前进开关延时自锁取消                                                       
  765.                                 if(forward==0)
  766.                                 {
  767.                                         speed1();//差速自动控制
  768.                                         if(t3>10)
  769.                                         {
  770.                                                 back=1;    //后退标志位置位
  771.                                         }
  772.                                         else
  773.                                         {
  774.                                                 back=0;
  775.                                         }
  776.                                         forward=0; //前进标志位复位
  777.                                         SCL=1;
  778.                                         SCR=1;
  779.                                         t4=0;
  780.                                         if(a==0)
  781.                                         {
  782.                                                 ZFL=0;
  783.                                                 ZFR=0;
  784.                                     }
  785.                                         if(a>0)
  786.                                         {
  787.                                                 if(a<2000)
  788.                                                 {
  789.                                                 ZFL=0;
  790.                                                 ZFR=0;                                               
  791.                                                 }
  792.                                                 else
  793.                                                 {
  794.                                                 ZFL=1;
  795.                                                 ZFR=0;
  796.                                                 }
  797.                                     }
  798.                                         if(a<0)
  799.                                         {
  800.                                                 if(a>-2000)
  801.                                                 {
  802.                                                 ZFL=0;
  803.                                                 ZFR=0;
  804.                                                 }
  805.                                                 else
  806.                                                 {
  807.                                                 ZFL=0;
  808.                                                 ZFR=0;                                               
  809.                                                 }

  810.                                     }
  811.                                   }

  812.                         }
  813.                 if(F==1&&SCB==1&&t4<20) //当全部按钮释放,前进后退自锁取消时复位参数
  814.                 {
  815.                         t2=0;//前进自锁延时 复位
  816.                         t3=0;//后退自锁延时 复位
  817.                         d=0;//速度归零
  818.                         e=0;//
  819.                         d1=0;
  820.                         e1=0;
  821.                         if(back==1)
  822.                         {
  823.                                 ZFL=1;
  824.                                 ZFR=1;
  825.                                 forward=0;
  826.                                 back=0;
  827.                         }
  828.                         if(forward==1)
  829.                         {
  830.                                 ZFL=0;
  831.                                 ZFR=0;
  832.                                 forward=0;
  833.                                 back=0;                                                       
  834.                         }
  835.                         SCL=0;
  836.                         SCR=0;

  837.                 }
  838.                 else
  839.                 {
  840.                         if(t4>20)
  841.                         {
  842.                                  SCL=1;
  843.                                 SCR=1;
  844.                                 ZFL=1;
  845.                                 ZFR=1;
  846. ……………………

  847. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:1 发表于 2018-12-25 02:39 | 只看该作者
好资料,51黑有你更精彩!!!
回复

使用道具 举报

板凳
ID:459215 发表于 2019-1-1 11:48 | 只看该作者

好资料,51有你更精彩!!!
回复

使用道具 举报

地板
ID:667992 发表于 2019-12-19 09:08 | 只看该作者
感谢楼主分享
回复

使用道具 举报

5#
ID:881321 发表于 2021-1-29 11:19 | 只看该作者
vb的源代码有吗
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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