2019-07-15 20:08发布
daxiandajie 发表于 2014-4-20 20:55 行,晚点我问问我们这的大神
daxiandajie 发表于 2014-4-20 21:55 楼主是否使用了,定时中断?
zhileung 发表于 2014-4-23 20:57 我数码管是用了定时的,数码管的在段选的时候用了延时,在电机的旋转过程中主要也是用了延时,就像我们的 ...
最多设置5个标签!
楼主还没解决?我作为一个见习大神决定打救你。
你的数码管和步进电机不能同时工作是因为你两个都用到了延时函数。电机转动的时候。数码管就不能正常显示。
因此你可以用到定时器来解决这个问题。因为我手头没有完整的程序我只能给你讲个思路。具体的程序还得你自己写。
步进电机工作是不断
- void TimeInterrupt() interrupt 1
- {
- TH0 = 0xfe; //重装初值
- TL0 = 0x33;
- if( CT++==speed) //每进一次中断CT.直到CT和设定的初速度
- {
- CT=0; //清零,重新计数
- Motor() //调用电机驱动函数
- }
- }
复制代码上面就是定时器中断处理函数。他是没到一定的时间就运行一次电机驱动函数。如果想实现调速,在主函数中改变speed的值就实现调速功能。- void Motor()
- {
- switch(MotorStep)
- {
- case 0: // A
- a = 0; //0xf1
- b = 1;
- c = 1;
- d = 1;
- MotorStep = 1;
- break;
- case 1: // AB
- a = 0; //0xf3
- b = 0;
- c = 1;
- d = 1;
- MotorStep = 2;
- break;
- case 2: //B
- a = 1;
- b = 0; //0xf2
- c = 1;
- d = 1;
- MotorStep = 3;
- break;
- case 3: //BC
- a = 1;
- b = 0; //0xf6
- c = 0;
- d = 1;
- MotorStep = 4;
- break;
复制代码上面就是步进电机的驱动函数。他每次都只运行一步。下一次调用这个函数时就运行下一步。循环运行八步实现驱动电机转动。因为步进电机驱动是在中断里面实现的。因此不会影响主函数的运行。因此数码管就不会出现闪烁或显示不正常的现象。
我数码管是用了定时的,数码管的在段选的时候用了延时,在电机的旋转过程中主要也是用了延时,就像我们的见习大神说的如果电机的延时用定时器中断的话,我还要好好看看研究一下。本来我是想把我的程序放上去,好让大神们帮我找找毛病,但是我是用汇编语言写的,篇幅太长,所以就没有发上来,如果实现了的话,会发到论坛上分享。
数码管用定时器也是可以的。只要不是电机和数码管同时延时就行了。思路就是这样。我也没有完整的程序给你参考。汇编语言的程序可读性实在是太差了。以前我也是用汇编编程c不会。现在会c就不想用汇编了。C语言编程还是很简单的,会一些基本的东西编单片机完全没问题了。以后还是习惯用c吧。
一周热门 更多>