完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
舵机通电一下就向左转一下。按键无反应。
L298N通直流电机(L298N指示灯常亮),按键直流电机无反应。L298N的12V口与GND连接一个9V电池。 无线模块用的是2272,这个测试无问题。 单片机是AT89S52. 求大神帮我看下问题出在哪儿。 #include #include #define uchar unsigned char //遥控器 ***it w=P1^1; //上 ***it s=P1^2; //下 ***it a=P1^3; //左 ***it d=P1^4; //右 //船身 ***it en1=P0^0; /* L298的Enable A */ ***it en2=P0^1; /* L298的Enable B */ ***it s1=P0^2; /* L298的Input 1 */ ***it s2=P0^3; /* L298的Input 2 */ ***it s3=P0^4; /* L298的Input 3 */ ***it s4=P0^5; /* L298的Input 4 */ ***it pwm =P0^6;/* 舵机PWM信号输出 */ uchar t=0; /* 中断计数器 */ uchar m1=0; /* 电机速度值 */ uchar tmp1; /* 电机当前速度值 */ char speed; uchar jd; /*角度标识*/ uchar count; /*0.5ms次数标识*/ /*差点又忘了的函数声明QWQ*/ void delay(uchar); void zuo(uchar x); void you(uchar x); void qian(uchar x); void hou(uchar x); /*提莫的再也不敢忘了声明函数了*/ void main() { //定时器初始化 TMOD=0x01; //定时器0工作在方式1 TH0=0xfe; TH1=0xfe; TL0=0x33; //11.0592MZ晶振,0.5ms TL1=0X33; EA=1; //总中断 ET0=1; ET1=1; TR0=1; //定时器开始 TR1=1; jd=3; count=0; speed=0; while(1) { qian(w); zuo(a); you(d); hou(s); } } void delay(uchar i)/*延时*/ { uchar j,k; for(j=i;j>0;j--) for(k=125;k>0;k--); } void zuo(uchar x) { bit left; while(1) { left=x; if(left==1) //角度减小按键是否按下 { delay(10); if(left==1) { jd--; //角度标识减1 count=0; if(jd==0) jd=1; //已经是0度,则保持 } } } } void you(uchar x) { bit right; while(1) {right=x; if(right==1) //角度增加按键是否按下 { delay(10); //按下延时,消抖 if(right==1) //确实按下 { jd++; //角度标识加1 count=0; //按键按下 则20ms周期从新开始 if(jd==6) jd=5; //已经是180度,则保持 } } } } void T0_time() interrupt 1 /*舵机中断程序*/ { TH0=0xfe; //重新赋值 TL0=0x33; if(count< jd) //判断0.5ms次数是否小于角度标识 pwm=1; //确实小于,PWM输出高电平 else pwm=0; //大于则输出低电平 count=(count+1); //0.5ms次数加1 count=count%40; //保持周期为20ms } void qian(uchar x) {bit temp; temp=x; if(temp==1) { if(speed>=-10 && speed<=10) {speed++; m1=abs(speed); /* 取速度的绝对值 */ if(speed<0) /* 速度值为负则反转 */ { s1=0; s2=1; s3=0; s4=1; } else /* 不为负数则正转 */ { s1=1; s2=0; s3=1; s4=0; } } } } void hou(uchar x) {bit temp; temp=x; if(temp==1) { if(speed>=-10 && speed<=10) {speed--; m1=abs(speed); if(speed<0) { s1=0; s2=1; s3=0; s4=1; } else { s1=1; s2=0; s3=1; s4=0; } } } } void T1_time() interrupt 3 /*直流电机中断程序*/ { TH1=0xfe; TL1=0x33; if(t==0) /* 1个PWM周期完成后才会接受新数值 */ { tmp1=m1; } if(t en1=1; en2=1; } else { en1=0; en2=0; } /* 产生电机的PWM信号 */ t++; if(t>=10) t=0; /* 1个PWM信号由10次中断产生 */ } |
|
相关推荐
5个回答
|
|
虽然我不懂编程,但是我想要积分呀,枪个楼加加人气吧,呵呵
|
|
|
|
我说怎么没人呢,原来需要审核呀!那我的积分泡汤了 !呵呵呵
|
|
|
|
............................................... |
|
|
|
粗略的看了一下:
首先,我没在你这程序里面看到前后左右四个按键的采集子程序呀。 再来,你主程序一个while(1), 然后,你前,后 的程序里面又有while(1), 如果真的进入到这子程序里面了,那程序还出得来吗? 所以很多地方要改的。 |
|
|
|
程序前半部分能看懂,后面就看不懂了,还需要继续努力啊
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-ubuntu18.04通过网线共享网络
461 浏览 0 评论
492 浏览 0 评论
836 浏览 0 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡 - 如何在Ubuntu中编译OpenCV库(X86架构)
1478 浏览 0 评论
1429 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
9378 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-6-29 21:08 , Processed in 0.480192 second(s), Total 50, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号