单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1497|回复: 2
收起左侧

直流电动机转速控制proteus仿真与代码

[复制链接]
也尽天明 发表于 2017-5-22 16:18 | 显示全部楼层 |阅读模式
直流电动机转速控制用C写的程序

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png 0.png

单片机源程序如下:
  1. #include<reg51.h>
  2. sbit k1=P3^1;
  3. sbit k2=P3^0;
  4. sbit k3=P3^2;
  5. sbit k4=P3^3;
  6. sbit motor1=P1^1;
  7. unsigned int speed;
  8. unsigned int value;
  9. unsigned int T;
  10. unsigned char code ZF[]=" Speed= ";   //8个字符
  11. void INIT();
  12. void INIT0();
  13. void INIT1();
  14. void Timer();
  15. void Timer0();
  16. void delay(unsigned t);
  17. void init_lcd(void);
  18. void writecom(unsigned char com);
  19. void writedate(unsigned char date);
  20. void motor(int speed);
  21. main()
  22. {
  23.     int i;
  24.         T=0;        
  25.         speed=0;
  26.         INIT();
  27.         Timer();
  28.         init_lcd();
  29.        
  30.                 for(i=0;i<8;i++)
  31.                 {
  32.                         writedate(ZF[i]);
  33.                 }
  34.         while(1)
  35.         {       
  36.                  if(k1==0)
  37.                  {
  38.                          delay(10);
  39.                         if(k1==0)
  40.                         {        int a;
  41.                                 motor1=0;
  42.                                 while((a<50)&&k1==0)
  43.                                 {
  44.                                         delay(10);
  45.                                         a++;
  46.                                 }
  47.                                 a=0;
  48.                         }
  49.                         motor(speed);
  50.                         writecom(0x88);
  51.                         writedate('1');
  52.                  }
  53.                  else
  54.                  {
  55.                          if(k2==0)                       
  56.                         {
  57.                                 delay(10);
  58.                                 if(k2==0)
  59.                                 {        int b;
  60.                                         motor1=1;
  61.                                         while((b<50)&&k2==0)
  62.                                         {
  63.                                                 delay(10);
  64.                                                 b++;
  65.                                         }
  66.                                         b=0;
  67.                                 }
  68.                         }
  69.                         motor(speed);
  70.                         writecom(0x88);
  71.                         writedate('2');               
  72.                  }

  73.         }
  74. }

  75. void INIT()         //k2,k3外部中断初始化
  76. {
  77.         IT0=1;
  78.         EX0=1;
  79.         IT1=1;
  80.         EX1=1;
  81.         EA=0;
  82. }

  83. void INIT0()interrupt 0         //外部中断0服务函数
  84. {
  85.         delay(10);
  86.         if(k3==0)
  87.         {
  88.                 speed++;
  89.         }       
  90. }

  91. void INIT1()interrupt 2//外部中断1服务函数
  92. {
  93.         delay(10);
  94.         if(k4==0)
  95.         {
  96.                 if(speed>0)
  97.                 {
  98.                         speed--;       
  99.                 }
  100.                 else
  101.                 speed=0;
  102.         }
  103. }

  104. void Timer()          //定时器初始化
  105. {
  106.         TMOD=0x01;
  107.         TH0=0xfc;          //初值fc18---1ms
  108.         TL0=0x18;
  109.         EA=1;
  110.         ET0=1;
  111.         TR0=1;
  112. }

  113. ……………………

  114. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
直流电机实验.rar (69.69 KB, 下载次数: 44)

评分

参与人数 1黑币 +5 收起 理由
shaox1a + 5 c程序里加上一些注释就更好了

查看全部评分

回复

使用道具 举报

cjhahang 发表于 2017-5-24 22:52 | 显示全部楼层
这个仿真设计可用
回复

使用道具 举报

度半 发表于 2017-5-30 18:11 | 显示全部楼层
可以给我一份吗?下载积分不够
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机 联系QQ:125739409;技术交流QQ群582644647

Powered by 单片机教程网

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