完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
51单片机自动循迹小车
#include ***it IN1=P1^2; //左电机正转 ***it IN2=P1^3; //左电机反转 ***it IN3=P1^6; //右电机正转 ***it IN4=P1^7; //右电机反转 ***it SE1=P3^4; //左边红外传感器接口 ***it SE2=P3^5; //右边红外传感器接口 //使用跳线帽将使能端与VCC接到一起,使能端一直处于高电平状态,无需另外设置 #define uint unsigned int #define uchar unsigned char uchar pwm_left_val=0; //设置占空比 uchar pwm_right_val=0; uchar pwm_t=0; //周期 uchar flag=1; void forward(); void stops(); void turn_left(); void turn_right(); void init(); void delay(uchar z); void XJ(); void main() { init(); while(1) { XJ(); while(flag); //flag保证pwm一个周期完整运行(存疑) flag=1; } } void timer0() interrupt 1 //定时器0中断 { pwm_t++; if(pwm_t==255) { pwm_t=0; flag=0; } if(pwm_left_val<=pwm_t) IN1=IN2=0; if(pwm_right_val<=pwm_t) IN3=IN4=0; } void init() { TMOD=0x02;//8位自动重装模块 10模式 TH0=220; TL0=220; //设置输出频率为100hz TR0=1; //定时器0控制运行位 ET0=1; //定时器0中断 EA=1; //总中断 } void forward() //小车前进 { pwm_left_val=100; pwm_right_val=100; IN1=1 ; IN2=0 ; IN3=1; IN4=0 ; } void turn_left() //小车左转 { pwm_left_val=0; pwm_right_val=100; IN1=0 ; IN2=0 ; IN3=1; IN4=0 ; } void turn_right() //小车右转 { pwm_left_val=100; pwm_right_val=0; IN1=1; IN2=0; IN3=0; IN4=0; } void stops() //小车停止 { pwm_left_val=0; pwm_right_val=0; IN1=0 ; IN2=0 ; IN3=0; IN4=0 ; } void XJ() { if(SE1==1&&SE2==1) { stops(); } else if(SE1==0&&SE2==1) { turn_right(); } else if(SE1==1&&SE2==0) { turn_left(); } else { forward(); } } |
|
|
|
只有小组成员才能发言,加入小组>>
2555 浏览 0 评论
1155浏览 2评论
758浏览 1评论
509浏览 0评论
270浏览 0评论
444浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 13:13 , Processed in 1.260850 second(s), Total 48, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号