找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1383|回复: 4
打印 上一主题 下一主题
收起左侧

这个单片机电机控制程序有错误吗?可以用Proteus仿真吗? 求帮助

[复制链接]
回帖奖励 50 黑币 回复本帖可获得 50 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:697560 发表于 2020-3-6 13:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
程序主要内容  首先按键选择模式  然后根据对应的模式进行相应的延时  最后都驱动电机旋转  程序如果有错希望帮我改正
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #include<intrins.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
  7. uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
  8. uint F_key;
  9. sbit KEY1 = P3^0;
  10. sbit KEY2 = P3^1;
  11. sbit KEY3 = P3^2;
  12. sbit KEY4 = P3^3;


  13. void delay(uint t)
  14. {
  15. uint k;
  16. while(t--)
  17. {
  18. for(k=0; k<125; k++)
  19. { ;}
  20. }
  21. }


  22. void motor_ffw(uint n)
  23. {
  24. uchar i;
  25. uint j;
  26. for (j=0; j<12*n; j++)
  27. {
  28. for (i=0; i<8; i++)
  29. {
  30. P1 = FFW[i];
  31. delay(15);
  32. }
  33. }
  34. }


  35. void motor_rev(uint n)
  36. {
  37. uchar i;
  38. uint j;
  39. for (j=0; j<12*n; j++)
  40. {
  41. for (i=0; i<8; i++)
  42. {
  43. P1 = REV[i];
  44. delay(15);
  45. }
  46. }
  47. }



  48. void main()
  49. {
  50. if(KEY1==0)
  51. {
  52. if(F_key==0)
  53. {
  54.    F_key=1;
  55.    
  56.   {                        
  57.         uint i=0;
  58.         uchar j=0;
  59.         while(1)
  60.         {
  61.                 delay(10);
  62.                 i++;        
  63.                 if(i==30000)   
  64.                 {
  65.                         i=0;
  66.                         j++;
  67.                 }
  68.                 if(j==3)     
  69.                 {
  70.                  motor_ffw(5);
  71.      delay(5000);
  72.      motor_rev(5);
  73.      delay(1000);
  74.                 }
  75.         }
  76.   }

  77. }
  78. }
  79. else
  80. if( F_key==1)
  81. {
  82. F_key=0;
  83. }
  84. if(KEY2==0)
  85. {
  86. if( F_key==0)
  87. {
  88.   F_key=2;
  89.   {                        
  90.         uint i=0;
  91.         uchar j=0;
  92.         while(1)
  93.         {
  94.                 delay(10);   
  95.                 i++;        
  96.                 if(i==30000)   
  97.                 {
  98.                         i=0;
  99.                         j++;
  100.                 }
  101.                 if(j==1)     
  102.                 {
  103.                  motor_ffw(5);
  104.      delay(5000);
  105.      motor_rev(5);
  106.      delay(1000);
  107.                 }
  108.         }
  109.   }

  110. }
  111. }
  112. else
  113. if( F_key==2)
  114. {
  115. F_key=0;
  116. }
  117. if(KEY3==0)
  118. {
  119. if( F_key==0)
  120. {
  121.   F_key=3;
  122.   {                        
  123.         uint i=0;
  124.         uchar j=0;
  125.         while(1)
  126.         {
  127.                 delay(10);  
  128.                 i++;        
  129.                 if(i==30000)   
  130.                 {
  131.                         i=0;
  132.                         j++;
  133.                 }
  134.                 if(j==2)   
  135.                 {
  136.                  motor_ffw(5);
  137.      delay(5000);
  138.      motor_rev(5);
  139.      delay(1000);
  140.                 }
  141.         }
  142.   }

  143. }
  144. }
  145. else
  146. if( F_key==3)
  147. {
  148. F_key=0;
  149. }
  150. if(KEY4==0)
  151. {
  152. if( F_key==0)
  153. {
  154. F_key=4;
  155. while(1)
  156. {
  157. motor_ffw(5);
  158. delay(5000);
  159. motor_rev(5);
  160. delay(1000);
  161. }
  162. }
  163. else
  164. if( F_key==1)
  165. {
  166. F_key=0;
  167. }
  168. }
  169. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:316880 发表于 2020-3-7 23:25 | 只看该作者
51单片机的话可以选择用STC的单片机,可以仿真,容易查找问题。
回复

使用道具 举报

板凳
ID:648281 发表于 2020-3-8 09:00 | 只看该作者
你好!
1、从程序看,硬件的按键和步进电机,是可以仿真的;
2、不知道你都要实现什么功能,要求需要说明
3、程序是否有错误,要看你的要求和仿真结果
回复

使用道具 举报

地板
ID:691449 发表于 2020-3-8 11:58 | 只看该作者
你好。
1.电机驱动程序要看你用的是什么电机,电机的种类有很多,有步进电机,直流电机,种类不一样,驱动方式也不一样
2.单片机IO口驱动能力无法驱动电机,需要加放大,一般都是专门的电机驱动芯片,电机驱动芯片不一样,驱动方式也不一样。
3.proteus可以仿真电机。
4.仿真效果肯定不如实验板,实验板效果比仿真好,仿真还容易出错。
回复

使用道具 举报

5#
ID:688189 发表于 2020-3-8 19:14 | 只看该作者
Proteus仿真 要画好仿真电路  单片机在把对应脚 连接好就行了  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表