完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
/*********控制小车行驶************/
#include "reg52.h" #define UCHAR unsigned char #define UP 'A' #define DOWN 'B' #define LEFT 'C' #define RIGHT 'D' #define STOP 'F' ***it RB=P1^0; //右后轮 ***it rb=P1^1; ***it RF=P1^2; //右前轮 ***it rf=P1^3; ***it LB=P1^4; //左后轮 ***it lb=P1^5; ***it LF=P1^6; //左前轮 ***it lf=P1^7; UCHAR count=0,flag=0,len=0,h=0,r[3]=0,flag_con=0; unsigned int a; /***************小车运动细节*************************/ /***********小车前进部分*****************/ void L_forward(UCHAR num) // 小车左排轮前进,num可调整占空比 { LF=1;lf=0; LB=0;lb=1; if(count<=num) { LF=1; lb=1; } else { LF=0; lb=0; } } void R_forward(UCHAR num) //小车右排轮前进,num可调整占空比 { RB=1;rb=0; RF=0;rf=1; if(count<=num) { RB=1; rf=1; } else { RB=0; rf=0; } } /***************小车后退部分********************/ void L_drawback(UCHAR num) //小车左排轮后退,num可调整占空比 { LF=0;lf=1; LB=1;lb=0; if(count<=num) { lf=1; LB=1; } else { lf=0; LB=0; } } void R_drawback(UCHAR num) //小车右排轮后退,num可调整占空比 { RB=0;rb=1; RF=1;rf=0; if(count<=num) { rb=1; RF=1; } else { rb=0; RF=0; } } /*********小车的基本运动状态*************/ void stop() //小车停止 { RB=0;rb=0; RF=0;rf=0; LF=0;lf=0; LB=0;lb=0; } void forward(UCHAR num) //小车前进,num可调整占空比 { L_forward(num); R_forward(num); } void drawback(UCHAR num) //小车后退,num可调整占空比 { L_drawback(num); R_drawback(num); } void B_round(UCHAR L,UCHAR R) //小车后退转弯 { //L控制左排轮速度 L_drawback(L); //R控制右排轮速度 R_drawback(R); } void F_round(UCHAR L,UCHAR R) //小车前进转弯 { //L控制左排轮速度 L_forward(L); //R控制右排轮速度 R_forward(R); } void turn_right45() //前进右转45度 { for(a=500;a>0;a--) { R_drawback(20); L_forward(40); } } void turn_right90() //前进右转90度 { for(a=500;a>0;a--) { R_drawback(50); L_forward(50); } } void turn_left45() //前进左转45度 { for(a=500;a>0;a--) { R_forward(40); L_drawback(20); } } void turn_left90() //前进左转90度 { for(a=650;a>0;a--) { R_forward(50); L_drawback(50); } } void delay(UCHAR ms) { UCHAR i,j; for(i=ms;i>0;i--) for(j=110;j>0;j--); } void main() { TMOD=0x21; TH0=(65536-9)/256; TL0=(65536-9)%256; TH1=0xfd; TL1=0xfd; //装初值 ET0=1; TR0=1; TR1=1; //定时器中断1打开 REN=1; //允许串行口接受数据 SM0=0; SM1=1; //串行口工作方式位01,10位异步收发,波特率可变 EA=1; //打开总中断 ES=1; //打开串口中断 stop(); while(1) { if(flag_con==1) { flag_con=0; if(r[0]=='O'&&r[1]=='N') { ES=0; SBUF=r[2]; while(!ti); TI=0; ES=1; switch(r[2]) { case UP: forward(80);break; case DOWN: drawback(80);break; case LEFT: turn_left45();break; case RIGHT: turn_right45();break; case STOP: stop();break; default:break; } } } } } void timer()interrupt 1 { TH0=(65536-9)/256; TL0=(65536-9)%256; count++; if(count>=100) {count=0;} } void inser() interrupt 4 { if(RI) { RI=0; h=SBUF; if(h='O'&&(len=0)) { flag=1; r[len]=h; flag=1; } else if(flag==1) { len++; r[len]=h; if(len>2) { len=0;flag=0;flag_con=1; } } } |
|
相关推荐
5个回答
|
|
|
|
笔画张 发表于 2014-4-28 16:29 好吧~受教了,多谢了~问题也已经解决了 |
|
|
|
|
|
|
|
可以先判断是否接收到数据 然后判断接收的数据是否满足协议要求
|
|
|
|
首先得确定单片机能不能正常接收数据。然后再看看电机驱动程序有没问题,一步步找出问题所在。
评分
|
||
|
||
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
如何配置Linux操作系统设备树让我的开发板可以将板子上的GPIO接口用作 I2S输出??
1675 浏览 1 评论
1450 浏览 0 评论
2078 浏览 0 评论
2019 浏览 2 评论
1118 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-20 04:21 , Processed in 0.607728 second(s), Total 88, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191