完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
这里只粘贴了部分代码,但是基本上能看出作用。这个代码的作用是根据定义的四个独立按键来控制电机的正转,反转,加速和减速。现在我做的比较简单(因为是新手,还在逐渐摸索中)。我采用的定时中断对键盘进行实时扫描,但是出现了一个问题,按下一个键,比如K1的时候,如果不放的话程序就会停止运行,这就意味着电机在这个时候不会转。哪位大神帮我看看,这个问题怎么解决?
/*****************独立键盘按键扫描函数**********************/ void Key_Selfscan() { if(K1==0) //检测按键K1是否按下 { Delay(2); //消除抖动 if(K1==0) { Direction = 1; //正转方向标识 } while((i<50)&&(K1==0)) //检测按键是否松开 { Delay(2); i++; } i=0; } if(K2==0) //检测按键K2是否按下 { Delay(2); if(K2==0) { Direction = 2; //反转方向标识 } while((i<50)&&(K2==0)) { Delay(2); i++; } i=0; } if(K3==0) //检测按键K3是否按下 { Delay(2); if(K3==0) { Speed = Speed+2; //加速 } while((i<50)&&(K3==0)) { Delay(2); i++; } i=0; } if(K4==0) //检测按键K4是否按下 { Delay(2); if(K4==0) { Speed = Speed-2; //减速 } while((i<50)&&(K4==0)) { Delay(2); i++; } i=0; } } /*******************电机旋转函数****************/ void Motor_Whirl() { for(i=0;i<4;i++) { if(Direction==1) {Motor = Double_pos[i]; //取正转链表 if(Direction==2) { Motor = Double_rev[i]; //取反转链表} Delay(Speed); //调节转速 } } /******************定时中断****************/ void Timer_Configuration() { TMOD = 0x01;//选择工作方式1 TH0 = 0x3c; //设置初始值,定时50ms TL0 = 0xb0; EA =1; //打开总中断 ET0 = 1; //打开定时器0中断 TR0 = 1;//启动定时器0 } void Timer0() interrupt 1 { TH0 = 0x3c; TL0 = 0xb0; Key_Selfscan(); } /***************主函数********************/ void main(void) { Speed=100; P2=0xf0; //电机端口初始化 Timer_Configuration(); while(1) { Motor_Whirl(); } } |
|
相关推荐
9 个讨论
|
|
24 浏览 0 评论
567 浏览 0 评论
735 浏览 0 评论
901 浏览 0 评论
840 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17069 浏览 31 评论
浏览过的版块 |
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-15 14:40 , Processed in 1.117590 second(s), Total 64, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2664