之前做的一個循跡小車,最后變成了一個遙控小車,可以采用電腦VB編寫的畫面控制,也可以采用在淘寶上買購買的串口觸摸屏控制。小車已經(jīng)被我拆了給我女做了一輛遙控小車。
附件中是程序代碼。
VB控制智能小車.zip
(8.44 KB, 下載次數(shù): 26)
2018-12-22 15:39 上傳
點擊文件名下載附件
vb編寫的電腦控制小車,需要配合無線串口才可以使用。 下載積分: 黑幣 -5
智能小車遙控器.zip
(1.07 MB, 下載次數(shù): 13)
2018-12-22 15:40 上傳
點擊文件名下載附件
這個是串口觸摸屏 下載積分: 黑幣 -5
智能小車C51.zip
(127.21 KB, 下載次數(shù): 13)
2018-12-22 15:41 上傳
點擊文件名下載附件
STC89C52單片機寫的程序 下載積分: 黑幣 -5
YL-40 AD模塊使用說明.pdf
(204.13 KB, 下載次數(shù): 12)
2018-12-22 15:46 上傳
點擊文件名下載附件
模擬量模塊用來調(diào)速用的。 下載積分: 黑幣 -5
串口HMI入門指南.pdf
(814.13 KB, 下載次數(shù): 14)
2018-12-22 15:50 上傳
點擊文件名下載附件
串口觸摸屏 下載積分: 黑幣 -5
單片機源程序如下:
- /**************************************
- #define N 1 //可一次接收數(shù)據(jù)量
- 中斷0 外部中斷
- 中斷1 定時器/計數(shù)器0中斷
- 中斷2 外部中斷1
- 中斷3 定時器/計數(shù)器1中斷
- 中斷4 串口中斷
- 中斷5 定時器/計數(shù)器2中斷
- 中斷6 外部中斷2(僅STC增強型8051系列單片機)
- 中斷7 外部中斷3(僅STC增強型8051系列單片機)
- 左轉(zhuǎn)++ 右轉(zhuǎn)--
- **************************************/
- #include <reg52.h>
- #include <intrins.h>
- #define uchar unsigned char // 0~255
- #define uint unsigned int //0~65535
- #define AddWr1 0x90 //AddWr1 地址 10010000
- #define AddRd1 0x91 //AddRd1 地址 10010001
- #define AddWr2 0x94 //AddWr2 地址 10010100
- #define AddRd2 0x95 //AddRd2 地址 10010101
- #define N 5 //可一次接收數(shù)據(jù)量
- void rs232_init(); //定義串口通信函數(shù)
- uchar flag,i; //刪除無用變量
- uchar table[N]; //接收緩存數(shù)組
- uchar j=0; //接收計數(shù)器
- /*********總線端口********/
- sbit SCL1=P0^6; //串行時鐘輸入端
- sbit SDA1=P0^7; //串行數(shù)據(jù)輸入端
- /*********功能端口********/
- sbit XJB=P0^5; //循跡開關(guān)
- /*********遙控端口********/
- sbit F=P1^0;//前進
- sbit SCB=P1^2;//剎車/后退
- sbit L=P1^3;//左轉(zhuǎn)
- sbit R=P1^1;//右轉(zhuǎn)
- /*********循跡端口********/
- sbit QL=P3^6;//前左雷達
- sbit QR=P3^5;//前右雷達
- sbit QM=P3^4;//前中雷達
- sbit XJL1=P3^7;//循跡L1
- sbit XJR1=P3^2;//循跡R1
- sbit XJL2=P1^6;//循跡L2
- sbit XJR2=P1^5;//循跡R2
- /*********驅(qū)動端口********/
- sbit ZFL=P0^0;//正反轉(zhuǎn)L
- sbit SCL=P0^1;//剎車L
- sbit ZFR=P0^2;//正反轉(zhuǎn)R
- sbit SCR =P0^3;//剎車R
- /*********轉(zhuǎn)向端口********/
- sbit ZX=P2^7; //轉(zhuǎn)向端口
- sbit SN=P2^6; //定義使能端口
- sbit OUT=P2^2; //定義OUT輸出端口
- sbit HOME=P3^3; //方向回正標志
- signed int a=0,a1,a2;//當前位置,設(shè)定位置1,設(shè)定位置2 有符號 + -
- char code a3[]={0,67,111,222,333,444,556,667,778,889,1111,2000,
- -67,-111,-222,-333,-444,-556,-667,-778,-889,-1111,-2000};//位置數(shù)組
- uchar code jy[]={0x00,0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
- 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
- 0x01,0x02,0x05,0x0b,0x0f,0xf0,0xf1,0xf2,0xf3};
- uchar b;//差補值
- uchar c=0;//回正標志位
- uchar dir1;//方向判斷開始標志
- uchar scb1;//剎車完成標志
- uchar snButton=0;//使能開關(guān):0,自動;1,使能關(guān)閉
- uchar d1=0,d2=0,d=0;//左邊速度
- uchar e1=0,e=0;//右邊速度
- uchar forward=0,back=0; //前進后退標志位
- uint t1=0,t2=0,t3=0,t4=0,t5=0,t6=0,t7=0,t8=0,t9,t10,t11,t12;//定時器
- uchar z1,z2,z3,z4,z5,z6,z7,z8,z9,z10,z11,z12;
- uchar table2;//串口數(shù)據(jù)儲存
- uchar jy1,jy2;//校驗數(shù)據(jù)大小
- uchar autoN=0; //自動續(xù)航
- /*********************************
- t1 方向使能保時
- t2 前進鎖定保時
- t3 后退鎖定保時
- t4 備用
- t5 前進剎車保時
- t6 后退剎車保時
- t7
- t8
- t9
- t10
- t11
- *********************************/
- /********自動巡航狀態(tài)*************/
- uchar l0,l1,l2,l3;//L雷達
- uchar m0,m1,m2,m3;//M雷達
- uchar r0,r1,r2,r3;//R雷達
- uchar lm0,lm1,lm2,lm3;//LM雷達
- uchar mr0,mr1,mr2,mr3;//MR雷達
- uchar lr0,lr1,lr2,lr3;//LR雷達
- uchar lmr0,lmr1,lmr2,lmr3;//LMR雷達
- uchar gear;//檔位
- uchar speed;//速度
- uchar s1,s2,s3;//檔位標志位
- uchar FS,BS;//前進剎車標志,后退剎車標志
- /*********延時4-5us********/
- void delay1()
- {;;}
- /*********延時 ********/
- void delay_1ms(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=speed;y>0;y--);
- }
- /*********開始信號********/
- void start() //開始信號
- {
- SDA1=1; //先把數(shù)據(jù)置1,再把時鐘置1,后把數(shù)據(jù)置0. 以保證在時鐘為1時,數(shù)據(jù)由高變低。
- delay1();
- SCL1=1; //時鐘信號為1
- delay1();
- SDA1=0; //數(shù)據(jù)在時鐘高電平時1-0則為開始信號。
- delay1();
- }
- /********* 停止信號 ********/
- void stop() //停止信號
- {
- SDA1=0; //先把數(shù)據(jù)置0,再把時鐘置1,后把數(shù)據(jù)置1. 以保證在時鐘為1時,數(shù)據(jù)由低變高。
- delay1();
- SCL1=1; //時鐘信號為1
- delay1();
- SDA1=1; //數(shù)據(jù)在時鐘高電平時0-1則為停止信號。
- delay1();
- }
- /*********應(yīng)答 ********/
- void respons()//應(yīng)答 相當于一個智能的延時函數(shù)
- {
- uchar i;
- SCL1=1;//scl高電平期間接收信號
- delay1();
- while((SDA1==1)&&(i<220))
- i++;
- SCL1=0;
- delay1();
- }
- /********* 初始化 ********/
- //void init() //初始化
- //{
- //SDA1=1;
- //delay1();
- //SCL1=1;
- //delay1();
- //}
- /*********用移位溢出的方式逐位輸出數(shù)據(jù)********/
- void write_byte(uchar date) //寫一字節(jié)數(shù)據(jù)
- {
- uchar i,temp;
- temp=date;
- for(i=0;i<8;i++)
- {
- temp=temp<<1; //左移一位 移出的一位在 CY 中
- SCL1=0;
- delay1();
- SDA1=CY;
- delay1();
- SCL1=1;//此時讀取總線數(shù)據(jù)
- delay1();
- }
- SCL1=0;
- delay1();
- SDA1=1;
- delay1();
- }
- /*********L速度模擬量模塊驅(qū)動 ********/
- void write_add(uchar address,uchar date)
- {
- start();
- write_byte(AddWr1); //10010000
- respons();
- write_byte(address);
- respons();
- write_byte(date);
- respons();
- stop();
- }
- /********R速度模擬量模塊驅(qū)動 ********/
- void write_add1(uchar address,uchar date)
- {
- start(); //調(diào)用中斷
- write_byte(AddWr2); //10010100
- respons();
- write_byte(address);
- respons();
- write_byte(date);
- respons();
- stop();
- }
- /***********初始化串口通信參數(shù)設(shè)定************/
- void rs232_init() //初始化串口通信參數(shù)設(shè)定
- {
- TMOD=0x20;
- TH1=0xfd;
- TL1=0xfd;
- TR1=1;
- SM0=0;//
- SM1=1;// SM0 SM1 0 1 工作方式1 10位異步收發(fā),波特率可變(T1溢出率/n,n=32或16)
- REN=1;//先設(shè)定號工作方式,在打開允許接收
- EA=1;
- ES=1;
- }
- /***************************************************************************
- (1)SM0 SM1:串行口工作方式選擇位。
- SM0 SM1 0 0 工作方式0 同步移位寄存器輸入/輸出,波特率固定為fosc/12
- SM0 SM1 0 1 工作方式1 10位異步收發(fā),波特率可變(T1溢出率/n,n=32或16)
- SM0 SM1 1 0 工作方式2 11位異步收發(fā),波特率固定為fosc/n,n=64或32)
- SM0 SM1 1 1 工作方式3 11位異步收發(fā),波特率可變(T1溢出率/n,n=32或16)
- (2)SM2:多機通信控制器位。在方式0中,SM2必須設(shè)成0。在方式1中,當處于接收狀態(tài)時,若
- SM2=1,則只有接收到有效的停止位“1”時,RI才能被激活成“1”(產(chǎn)生中斷請求)。在方式2和方式
- 3中,若SM2=0,串行口以單機發(fā)送或接收方式工作,TI和RI以正常方式被激活并產(chǎn)生中斷請求;若
- SM2=1,RB8=1時,RI被激活并產(chǎn)生中斷請求。
- (3)REN:串行接受允許控制位。該位由軟件置位或復(fù)位。當REN=1,允許接收;當REN=0,禁止接收。
- (4)TB0:方式2和方式3中要發(fā)送的第9位數(shù)據(jù)。該位由軟件置位或復(fù)位。在方式2和方式3時,
- TB8是發(fā)送的第9位數(shù)據(jù)。在多機通信中,以TB8位的狀態(tài)表示主機發(fā)送的是地址還是數(shù)據(jù) :
- TB8=1表示地址,TB8=0表示數(shù)據(jù)。TB8還可用作奇偶校驗位。
- (5)RB8:接收數(shù)據(jù)第9位。在方式2和方式3時,RB8存放接收到的第9位數(shù)據(jù)。RB8也可用作奇偶校驗位。
- 在方式1中,若SM2=0,則RB8是接收到的停止位。在方式0中,該位未用。
- (6)TI:發(fā)送中斷標志位。TI=1,表示已結(jié)束一幀數(shù)據(jù)發(fā)送,可由軟件查詢TI位標志,也可以向CPU申請
- 中斷。
- 注意:TI在任何工作方式下都必須由軟件清0。
- (7)RI:接收中斷標志位。RI=1,表示一幀數(shù)據(jù)接收結(jié)束。可由軟件查詢RI位標志,也可以向CPU申請中斷。
-
- 注意:RI在任何工作方式下也都必須由軟件清0。
- 在AT89C51中,串行發(fā)送中斷TI和接收中斷RI的中斷入口地址是同是0023H,因此在中斷程序中
- 必須由軟件查詢TI和RI的狀態(tài)才能確定究竟是接收還是發(fā)送中斷,進而作出相應(yīng)的處理。單片機復(fù)位時,
- SCON所有位均清0。
- *****************************************************************************/
- /***********左轉(zhuǎn)彎控制***************/
- void Lpulse()//左轉(zhuǎn)脈沖輸出計數(shù)
- {
- if(a<2000)//左轉(zhuǎn)極限
- {
- ZX=0;
- if(a1>a)
- {
- a++;
- OUT=~OUT;
- }
- }
- }
- /***********右轉(zhuǎn)彎控制***************/
- void Rpulse()//右轉(zhuǎn)脈沖輸出計數(shù)
- {
- if(a>-2000)//右轉(zhuǎn)極限
- {
- ZX=1;
- if(a1<a)
- {
- a--;
- OUT=~OUT;
- }
- }
- }
- /****************差速驅(qū)動***************************/
- void speed1()//
- {
- if(a>0)
- {
- if(a<2000)
- {
- d=speed -a/b; //a偏角數(shù),b差速倍率
- e=speed;
- }
- else
- {
- d=speed;
- e=speed;
- }
- }
- if(a<0)
- {
- if(a>-2000)
- {
- d=speed;
- e=speed +a/b;
- }
- else
- {
- if(speed<150)
- {
- d=speed+20;
- e=0;
- }
- else
- {
- d=speed;
- e=0;
- }
- }
- }
- if(a==0)
- {
- d=speed;
- e=speed;
- }
- }
- /*************串口通信數(shù)據(jù)歸零************************/
- void table1()
- {
- table[0]=0;
- }
- /*****************轉(zhuǎn)向方向運算*****************************/
- /*****************前進剎車驅(qū)動*****************************/
- /*****************后退剎車驅(qū)動*****************************/
- /***************主程序******************/
- void main()
- {
- TMOD=0X11;//定時器0采用工作方式1
- TH0=(65536-200)/256;
- TL0=(65536-200)%256;//初值,定時
- TH2=(65536-50000)/256;//初值,定時1ms
- TL2=(65536-50000)%256;//
- T2CON=0;
- EA=1; //總中斷打開
- ET0=1; //定時器0中斷打開
- ET2=1; //定時器2中斷打開
- TR0=1;//啟動定時器0
- TR2=1;
- rs232_init(); //調(diào)用串口通信參數(shù)設(shè)定函數(shù)
- speed=90;
- b=22;
- jy1=1;
- while(1)
- {
- /*****************指令校驗***************************/
- if(table[0]!=0)
- {
- for(jy1=0;jy1<43;jy1++)
- {
- if(jy[jy1]==table[0])
- {
- jy2=1;
- }
- }
- if(jy2==1&&jy1==42)//如果串口數(shù)據(jù)在列表中,校驗成功,復(fù)位標志位jy2.
- {
- table[0]=table[0];
- SCL=1;
- SCR=1;
- }
- if(jy2==0&&jy1==42&&table[0]!=0) //如果校驗失敗,啟動剎車
- {
- table1();
- F=1;
- SCB=1;
- forward=0;
- back=0;
- t2=0;
- t3=0;
- a1=0;
- dir1=1;
- speed=90;//剎車啟動后設(shè)為一檔
- b=22;//差速系數(shù)
- SCL=0;
- SCR=0;
- }
- }
- /**************轉(zhuǎn)彎方向判斷********************/
- if(dir1==1)
- {
- c=0;
- if(a1==a)
- {
- L=1;
- R=1;
- dir1=0;
- table1();
- }
- if(a1>a) //啟動左轉(zhuǎn)
- {
- L=0;
- R=1;
- }
- if(a1<a) //啟動右轉(zhuǎn)
- {
- L=1;
- R=0;
- }
- }
-
- /***************串口通信*************************/
- if(flag==1)
- {
- ES=0;
- for(j=0;j<N;j++) //回傳接收數(shù)組
- {
- SBUF=table[j]; //把接收到的數(shù)據(jù)重新賦值給串口緩存寄存器
- while(!TI);
- TI=0;
- }
- j=0; //清零接收計數(shù)器
- ES=1;
- flag=0;
- }
- if(table[0]==0x01)//前進
- {
- F=0;
- SCB=1;
- t3=0;
- back=0;
- if(forward==1)//當前進鎖定后,再次按下后退自動回正
- {
- c=1;//回正
- }
- }
- if(table[0]==0x02)//后退
- {
- F=1;
- SCB=0;
- t2=0;
- forward=0;
- if(back==1) //當后退鎖定后,再次按下后退自動回正
- {
- c=1;
- }
- }
- if(table[0]==0x0f)//剎車
- {
- F=1;
- SCB=1;
- t2=0;
- t3=0;
- a1=0;
- dir1=1;
- speed=90;//剎車啟動后設(shè)為一檔
- b=22;//差速系數(shù)
- }
- if(table[0]==0xa0)//L3
- {
- a1=67;
- dir1=1;//方向判斷
- }
- if(table[0]==0xa1)//L5
- {
- a1=111;
- dir1=1;//方向判斷
- }
- if(table[0]==0xa2)//L10
- {
- a1=222;
- dir1=1;//方向判斷
- }
- if(table[0]==0xa3)//L15
- {
- a1=333;
- dir1=1;//方向判斷
- }
- if(table[0]==0xa4)//L20
- {
- a1=444;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xa5)//L25
- {
- a1=556;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xa6)//L30
- {
- a1=667;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xa7)//L35
- {
- a1=778;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xa8)//L40
- {
- a1=889;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xa9)//L45
- {
- a1=1000;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xaa)//L50
- {
- a1=1111;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xab)//L55
- {
- a1=1222;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xac)//L60
- {
- a1=1333;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xab)//L70
- {
- a1=1556;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xae)//L80
- {
- a1=1778;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xaf)//L90
- {
- a1=2000;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0x05)//L微調(diào)
- {
- a=a+20;
- a1=0;
- dir1=1;
- table1();
- }
- if(table[0]==0x0b)//R微調(diào)
- {
- a=a-20;
- a1=0;
- dir1=1;
- table1();
- }
- if(table[0]==0x08)//回正
- {
- a1=0;
- dir1=1;
- }
- if(table[0]==0xb0)//R3
- {
- a1=-67;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xb1)//R3
- {
- a1=-111;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xb2)//R10
- {
- a1=-222;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xb3)//R15
- {
- a1=-333;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xb4)//R20
- {
- a1=-444;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xb5)//R25
- {
- a1=-556;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xb6)//R30
- {
- a1=-667;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xb7)//R35
- {
- a1=-778;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xb8)//R40
- {
- a1=-889;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xb9)//R45
- {
- a1=-1000;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xba)//R50
- {
- a1=-1111;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xbb)//R55
- {
- a1=-1222;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xbc)//R60
- {
- a1=-1333;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xbd)//R70
- {
- a1=-1556;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xbe)//R80
- {
- a1=-1778;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0xbf)//R90
- {
- a1=-2000;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(table[0]==0x12)//1檔
- {
- speed=90;
- b=22;
- }
- if(table[0]==0x13)//2檔
- {
- speed=120;
- b=17;
- }
- if(table[0]==0x14)//3檔
- {
- speed=150;
- b=13;
- }
- if(table[0]==0xf0)//自動開始
- {
- autoN=1;
- }
- if(table[0]==0xf1)//自動關(guān)閉
- {
- autoN=0;
- }
- if(table[0]==0xf2)//使能手動關(guān)閉
- {
- snButton=1;
- }
- if(table[0]==0xf3)//使能自動
- {
- snButton=0;
- }
- /*************************************************/
- /*****************************************************/
- write_add(0x40,d1); //調(diào)用函數(shù)write_add(ox40,a) 在前面函數(shù)聲明中,只是聲明了變量并未作賦值
- write_add1(0x40,e1); //調(diào)用函數(shù)write_add(ox40,a) 在前面函數(shù)聲明中,只是聲明了變量并未作賦值
- d1=d;//左邊速度
- e1=e;//右邊速度
- /**************************************************/
- if(autoN==1)
- {
- scb1=0;//剎車完成標志rst
- if(QL==0&&QR==1)
- {
- a1=-1200;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(QR==0&&QL==1)
- {
- a1=1200;//設(shè)定角度
- dir1=1;//方向判斷
- }
- if(QR==0&&QL==0)
- {
- F=1;
- SCB=1;
- forward=0;
- back=0;
- t2=0;
- t3=0;
- a1=0;
- dir1=1;
- speed=90;//剎車啟動后設(shè)為一檔
- b=22;//差速系數(shù)
- }
- if(QM==0)
- {
- F=1;
- SCB=0;
- t2=0;
- forward=0;
- if(back==1) //當后退鎖定后,再次按下后退自動回正
- {
- c=1;
- }
- if(QL==0&&QR==1)
- {
- a1=-1200;//設(shè)定角度
- dir1=1;//方向判斷
- delay_1ms(400);
- }
- if(QR==0&&QL==1)
- {
- a1=1200;//設(shè)定角度
- dir1=1;//方向判斷
- delay_1ms(400);
- }
- delay_1ms(800);
- }
- else
- {
- F=0;
- SCB=1;
- t3=0;
- back=0;
- if(forward==1)//當前進鎖定后,再次按下后退自動回正
- {
- c=1;//回正
- }
- }
- if(QL==1&&QR==1&&a!=0)
- {
- a1=0;
- dir1=1;
- }
- }
- /****************************************************/
- if(F==0||t2>10)
- {
- t3=0;//后退自鎖解除
- if((back==0&&XJB==1)||t2<10)//按下F按鈕10以內(nèi)啟動點動模式
- {
- t3=0; //按壓后退開關(guān)延時自鎖取消
- speed1();//差速自動控制
- if(t2>10)//當前進按鈕按下10以上時前進標志位置位
- {
- forward=1; //前進標志位置位
- }
- else //如果沒有超過10,則不啟動前進標志位
- {
- forward=0;
- }
- SCL=1;
- SCR=1; //關(guān)閉剎車
- if(a==0)
- {
- ZFL=1;
- ZFR=1;
- }
- if(a>0)
- {
- if(a<2000)
- {
- ZFL=1;
- ZFR=1;
- }
- else
- {
- ZFL=0;
- ZFR=1;
- }
- }
- if(a<0)
- {
- if(a>-2000)
- {
- ZFL=1;
- ZFR=1;
- }
- }
- }
-
- }
- /************倒車**********************/
- if(SCB==0||t3>10)
- {
- t2=0; //按壓前進開關(guān)延時自鎖取消
- if(forward==0)
- {
- speed1();//差速自動控制
- if(t3>10)
- {
- back=1; //后退標志位置位
- }
- else
- {
- back=0;
- }
- forward=0; //前進標志位復(fù)位
- SCL=1;
- SCR=1;
- t4=0;
- if(a==0)
- {
- ZFL=0;
- ZFR=0;
- }
- if(a>0)
- {
- if(a<2000)
- {
- ZFL=0;
- ZFR=0;
- }
- else
- {
- ZFL=1;
- ZFR=0;
- }
- }
- if(a<0)
- {
- if(a>-2000)
- {
- ZFL=0;
- ZFR=0;
- }
- else
- {
- ZFL=0;
- ZFR=0;
- }
- }
- }
- }
- if(F==1&&SCB==1&&t4<20) //當全部按鈕釋放,前進后退自鎖取消時復(fù)位參數(shù)
- {
- t2=0;//前進自鎖延時 復(fù)位
- t3=0;//后退自鎖延時 復(fù)位
- d=0;//速度歸零
- e=0;//
- d1=0;
- e1=0;
- if(back==1)
- {
- ZFL=1;
- ZFR=1;
- forward=0;
- back=0;
- }
- if(forward==1)
- {
- ZFL=0;
- ZFR=0;
- forward=0;
- back=0;
- }
- SCL=0;
- SCR=0;
- }
- else
- {
- if(t4>20)
- {
- SCL=1;
- SCR=1;
- ZFL=1;
- ZFR=1;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
|