标题: 步进电机单片机代码运行不了 [打印本页]

作者: 小汐安颜    时间: 2018-9-10 22:11
标题: 步进电机单片机代码运行不了
为什么我的代码运行不了?我想按键按一下松开后,电机正向转动,再按另一个按键,电机反向转动。可是代码运行不了,检查了,但是不知道问题出哪里了,求大神指教
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define out P2
  5. sbit pos=P0^0;
  6. sbit neg=P0^1;
  7. uchar posflag,negflag;
  8. void delayms(uint);
  9. uchar code turn[]={0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03};
  10. void keyscan(void)
  11. {
  12. if(pos==0)
  13. {
  14. delayms(2);
  15. if(pos==0)
  16. {
  17. while(!pos);
  18. posflag=1;
  19. negflag=0;
  20. }
  21. }
  22. else if(neg==0)
  23. {
  24. delayms(2);
  25. if(neg==0)
  26. {
  27. while(!neg);
  28. negflag=1;
  29. posflag=0;
  30. }
  31. }
  32. }

  33. void main(void)
  34. {
  35. uchar i;
  36. out=0x03;
  37. keyscan();
  38. while(1)
  39. {
  40. if(posflag==1)
  41. {
  42. i=i<8?i+1:0;
  43. out=turn[i];
  44. delayms(100);
  45. }
  46. else if(negflag==1)
  47. {
  48. i=i>0?i-1:7;
  49. out=turn[i];
  50. delayms(100);
  51. }
  52. }
  53. }
  54. void delayms(uint j)
  55. {
  56. uchar i;
  57. for(;j>0;j--)
  58. {
  59. i=250;
  60. while(--i);
  61. i=249;
  62. while(--i);
  63. }
  64. }
复制代码



作者: sxhwdz    时间: 2018-9-11 06:51
        keyscan(); 这个语句只是在初始化的时候执行一次,进入主循环后不再执行。应该后移2行,放入主循环内。
作者: gaojiafeng66    时间: 2018-9-11 08:37
swhich case 语句  试试。
作者: 1462634349    时间: 2018-9-11 16:24
键值获取只执行了一次,把keyscan()移入while里面,或者用中断获取按键状态,写在主函数很容易跟延时函数冲突
作者: 小汐安颜    时间: 2018-9-11 21:13
sxhwdz 发表于 2018-9-11 06:51
keyscan(); 这个语句只是在初始化的时候执行一次,进入主循环后不再执行。应该后移2行,放入主循环 ...

哦哦,真的是耶!谢谢
作者: 小汐安颜    时间: 2018-9-11 21:14
gaojiafeng66 发表于 2018-9-11 08:37
swhich case 语句  试试。

试过了,是我的键值获取函数调用放错地方了,谢谢
作者: 小汐安颜    时间: 2018-9-11 21:15
1462634349 发表于 2018-9-11 16:24
键值获取只执行了一次,把keyscan()移入while里面,或者用中断获取按键状态,写在主函数很容易跟延时函数冲 ...

好的,谢谢,检查出来就是keyscan()放错地方了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1