找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3162|回复: 9
收起左侧

51单片机直流电机调速源程序

[复制链接]
ID:511520 发表于 2019-4-13 21:42 | 显示全部楼层 |阅读模式
我不多说,绝对可用!
上贴。

单片机源程序如下:
  1. #include  "reg52.h"
  2. sbit IN1=P1^1;
  3. sbit IN2=P1^2;
  4. sbit IN3=P1^3;
  5. sbit IN4=P1^4;
  6. unsigned char pwm_val_right=0;
  7. unsigned char push_val_right=0;
  8. unsigned int time=0;
  9. unsigned char pwm_val_left=0;
  10. unsigned char push_val_left=0;
  11. bit right_moto_stop=1;
  12. sbit right_moto_pwm=P2^0;
  13. bit left_moto_stop=1;
  14. sbit left_moto_pwm=P2^1;

  15. void delay(unsigned int i)
  16. {
  17. unsigned int k;
  18.         for(k=0;k<7000;k++)
  19.         for(i=0;k<i;i++);
  20. }
  21. void pwm_out_right_moto(void)
  22. {
  23.         if(right_moto_stop)
  24.   {
  25.                 if(pwm_val_right<=push_val_right)
  26.                         right_moto_pwm=1;
  27.                 else
  28.                         right_moto_pwm=0;
  29.                 if(pwm_val_right>=100)
  30.                         pwm_val_right=0;
  31.         }
  32.         else right_moto_pwm=0;
  33. }

  34. void pwm_out_left_moto(void)
  35. {
  36.         if(left_moto_stop)
  37.   {
  38.                 if(pwm_val_left<=push_val_left)
  39.                         left_moto_pwm=1;
  40.                 else
  41.                         left_moto_pwm=0;
  42.                 if(pwm_val_left>=100)
  43.                         pwm_val_left=0;
  44.         }
  45.         else right_moto_pwm=0;
  46. }
  47. void time0_init()
  48. {
  49. TMOD=0X01;
  50. TH0=(65536-1000)/256;
  51. TL0=(65536-1000)%256;
  52. TR0=1;
  53. ET0=1;
  54. EA=1;
  55. }
  56. void forward(unsigned char i)
  57. {               
  58. push_val_right=i;
  59. push_val_left=i;
  60.         IN1=0;
  61.         IN2=1;
  62.         IN3=1;
  63.         IN4=0;
  64. }
  65. void forward1(unsigned char l)
  66. {               
  67. push_val_right=l;
  68. push_val_left=l;
  69.         IN1=1;
  70.         IN2=0;
  71.         IN3=0;
  72.         IN4=1;
  73. }

  74. void time0()interrupt 1
  75. {
  76. TH0=(65536-1000)/256;
  77. TL0=(65536-1000)%256;
  78. ET0=1;
  79. TR0=1;
  80.         time++;
  81.         pwm_val_right++;
  82.         pwm_out_right_moto();
  83.         pwm_val_left++;
  84.         pwm_out_left_moto();
  85. }
  86. void main()
  87. {
  88.         unsigned char i,k;
  89. time0_init();
  90.         while(1)
  91.         {
  92. for(i=10;i<100;i++)
  93.                 {
  94.                 forward(i);
  95.                 delay(10000);
  96.                 }
  97.         for(k=100;k<=100;k--)
  98.                 {
  99.                 forward(k);
  100.                 delay(10000);
  101.                 }
  102. for(i=10;i<100;i++)
  103.                 {
  104.                 forward1(i);
  105.                 delay(10000);
  106.                 }               
  107.         for(k=100;k<=100;k--)
  108.                 {
  109.                 forward1(k);
  110.                 delay(10000);
  111.                 }               
  112. }
  113. }
复制代码

所有资料51hei提供下载:
keil2.zip (35.97 KB, 下载次数: 35)
回复

使用道具 举报

ID:482955 发表于 2019-4-18 08:29 | 显示全部楼层
没注释的吗  新手看得有点吃力
回复

使用道具 举报

ID:404894 发表于 2019-4-18 09:48 来自手机 | 显示全部楼层
有仿真吗
回复

使用道具 举报

ID:511520 发表于 2019-4-21 20:36 | 显示全部楼层

没有,你按照上面接就行了,用LN298点击驱动。
回复

使用道具 举报

ID:511520 发表于 2019-4-21 20:39 | 显示全部楼层
Axinjural 发表于 2019-4-18 08:29
没注释的吗  新手看得有点吃力

没有,哈哈哈,加油相信你可以的,他其实跟产生方波一样的。
回复

使用道具 举报

ID:511520 发表于 2019-4-21 20:40 | 显示全部楼层

电机驱动,打错字了。
回复

使用道具 举报

ID:343168 发表于 2019-12-1 17:11 | 显示全部楼层
无情;感谢,这代码顺序和我一样,吧函数写在后面还得来回翻着看。眼疼。
回复

使用道具 举报

ID:659385 发表于 2019-12-10 08:41 | 显示全部楼层
有电路图吗
回复

使用道具 举报

ID:239620 发表于 2019-12-10 14:52 | 显示全部楼层
不错的代码,用来学习,谢谢
回复

使用道具 举报

ID:668494 发表于 2020-1-2 12:12 | 显示全部楼层
谢谢大佬,很有帮助
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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