標(biāo)題: 步進(jìn)電機(jī)單片機(jī)代碼運(yùn)行不了 [打印本頁]

作者: 小汐安顏    時(shí)間: 2018-9-10 22:11
標(biāo)題: 步進(jìn)電機(jī)單片機(jī)代碼運(yùn)行不了
為什么我的代碼運(yùn)行不了?我想按鍵按一下松開后,電機(jī)正向轉(zhuǎn)動(dòng),再按另一個(gè)按鍵,電機(jī)反向轉(zhuǎn)動(dòng)。可是代碼運(yùn)行不了,檢查了,但是不知道問題出哪里了,求大神指教
  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. }
復(fù)制代碼



作者: sxhwdz    時(shí)間: 2018-9-11 06:51
        keyscan(); 這個(gè)語句只是在初始化的時(shí)候執(zhí)行一次,進(jìn)入主循環(huán)后不再執(zhí)行。應(yīng)該后移2行,放入主循環(huán)內(nèi)。
作者: gaojiafeng66    時(shí)間: 2018-9-11 08:37
swhich case 語句  試試。
作者: 1462634349    時(shí)間: 2018-9-11 16:24
鍵值獲取只執(zhí)行了一次,把keyscan()移入while里面,或者用中斷獲取按鍵狀態(tài),寫在主函數(shù)很容易跟延時(shí)函數(shù)沖突
作者: 小汐安顏    時(shí)間: 2018-9-11 21:13
sxhwdz 發(fā)表于 2018-9-11 06:51
keyscan(); 這個(gè)語句只是在初始化的時(shí)候執(zhí)行一次,進(jìn)入主循環(huán)后不再執(zhí)行。應(yīng)該后移2行,放入主循環(huán) ...

哦哦,真的是耶!謝謝
作者: 小汐安顏    時(shí)間: 2018-9-11 21:14
gaojiafeng66 發(fā)表于 2018-9-11 08:37
swhich case 語句  試試。

試過了,是我的鍵值獲取函數(shù)調(diào)用放錯(cuò)地方了,謝謝
作者: 小汐安顏    時(shí)間: 2018-9-11 21:15
1462634349 發(fā)表于 2018-9-11 16:24
鍵值獲取只執(zhí)行了一次,把keyscan()移入while里面,或者用中斷獲取按鍵狀態(tài),寫在主函數(shù)很容易跟延時(shí)函數(shù)沖 ...

好的,謝謝,檢查出來就是keyscan()放錯(cuò)地方了




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1