1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 sonexin 于 2015-6-5 18:44 编辑
程序如下,求大神帮忙看看是程序问题还是硬件问题,急急急,在此谢过! #include "car.h" void forward_1() { In1=0; In2=1; } void back_1() { In1=1; In2=0; } void forward_2() { In3=0; In4=1; } void back_2() { In3=1; In4=0; } void stop() { EN1=0; EN2=0; } void go_straight() { forward_1(); forward_2(); } void turn_right() { forward_1(); back_2(); } void turn_left() { forward_2(); back_1(); } void timer1_init(void) //定时器1 { TMOD=0x10;//定时器1 工作方式1 TH1=(65536-50003)/256; //20ms溢出一次 TL1=(65536-50003)%256; EA=1; ET1=1; TR1=1; } void timer0_init(void) { TMOD=0x01;//定时器1 工作方式1 TH0=(65536-50)/256; //20ms溢出一次 TL0=(65536-50)%256; EA=1; ET0=1; TR0=1; } void INT0_init(void) { EA=1; EX0=1; IT0=1;//下降沿触发 } void INT1_init(void) { EA=1; EX1=1; IT1=1;//下降沿触发 } void int0()interrupt 0 //外部中断0 { if(hw1==0) { delay_50us(100);//延时消抖 if(hw1==0) { num_front++; } } } void main() { //Init(); PT1=1; // PX1=1; INT0_init() ; // INT1_init() ; timer1_init(); timer0_init(); TMOD=0x11; go_straight(); percent=high_speed; while(1) { if(num_front==3||num_front==9) //DE区减速 { go_straight(); percent=low_speed; } if(num_front==4||num_front==10) //EF区稍微加速 { go_straight(); percent=mid_speed; } // if(num_front==5) //FG区减速至停车 // { // go_straight(); // percent=low_speed; // delay_50ms(40); // } if(num_front==6) { turn_right(); //小车调头 percent=high_speed; delay_50ms(10); stop(); percent=0; delay_50ms(50); percent=high_speed; go_straight(); } if(num_front==12) // 小车返回终点,停下 { stop(); percent=0; } } } void timer1 ()interrupt 3 //中断函数,每50ms红外转向 { TH1=(65536-50003)/256; //50ms溢出一次 TL1=(65536-50003)%256; if(hw3==0) //右边的红外 { delay_50us(100);//延时消抖 while(hw3==0) { EN1=1; EN2=1; percent=low_speed; turn_left(); } if(hw3==1) { delay_50us(100);//延时消抖 if(hw3==1) { EN1=1; EN2=1; go_straight(); } } } else if(hw4==0) //左边的红外 { delay_50us(100);//延时消抖 while(hw4==0) { EN1=1; EN2=1; percent=low_speed; turn_right(); } if(hw4==1) { delay_50us(100); if(hw4==1) { EN1=1; EN2=1; go_straight(); } } } } void timer0 ()interrupt 1 { // TF2=0; TH0=(65536-50)/256; //20ms溢出一次 TL0=(65536-50)%256; if(count>100) { count=0; } if(count>percent) { EN1=0; EN2=0; count++; } else if(count<=percent) { EN1=1; EN2=1; count++; } }为啥车子跑着跑着就停了呢,我后来在程序里面删去了停止的命令以后还是这样,但是指示灯都是亮着的? |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12011 浏览 31 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 23:05 , Processed in 0.343314 second(s), Total 39, Slave 32 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号