《51单片机应用开发范例大全(第3版)》——1.4 【实例19】P1口控制直流电动机实例

本节书摘来自异步社区《51单片机应用开发范例大全(第3版)》一书中的第1章,第1.4节,作者 张杰,宋戈,黄鹤松,员玉良,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 【实例19】P1口控制直流电动机实例

利用P1口,编制程序输出一串脉冲,经放大后驱动小电动机,改变输出脉冲的电平及持续时间,达到使电动机正转、反转、加速、减速、停转之目的。

1.实例概述

可以通过74HC244输入开关量数据来控制小直流电动机的转动,实现正转4种转速,反转4种转速及停转。电路及连线如图1-31所示。

图1-31中P1.0连接74HC244的2A2。两个输出通过两个74HC32连接直流电动机电源。小直流电动机原理是:转动方向是由电压来控制的,电压为正则正转,电压为负则负转。转速大小则是由输出脉冲的占空比来决定的,正向占空比越大则转速越快,反向转则占空比越小转速越快,如图1-32所示。


《51单片机应用开发范例大全(第3版)》——1.4 【实例19】P1口控制直流电动机实例

2.程序框图及代码

在编写代码前,最好先把程序流程图画出来,这样可以使得编写的代码更加简洁有效。实例程序的流程图如图1-33所示。


《51单片机应用开发范例大全(第3版)》——1.4 【实例19】P1口控制直流电动机实例

程序代码如下:

sfr p1=0x90;
sbit p10=p1^0;
sbit p11=p1^1;

void main ()
{
int i, m;
int j=100;
int k=20;

// 正快转
for (i=0; i<100; i++)
{
P10=1;
for (j=0; j<50; j++)
      {
           m=0;
      }
}
P10=0;
for (j=0; j<10; j++)
     {
          m=0
     }
//正慢转
for (i=0; i<100; i++)
{
P10=1;
for (j=0; j<10; j++)
   {
      m=0
   }
}
p10=0;
for (j=0; j<50; j++)
      {
           m=0
      }
// 负快转
for (i=0; i<100; i++)
{
p11=1;
for (j=0; j<50; j++)
     {
       m=0;
     }
}
p11=0;
for (j=0; j<10; j++)
     {
        m=0;
     }

// 负慢转
for (i=0; i<100; i++)
{
p11=1;
for (j=0;j<10;j++)
     {
         m=0;
     } 
}
p11=0
for (j=0; j<50; j++)
     {
         m=0;
     }
}

Cx51源程序是一个ASCII文件,可以用任何标准的ASCII文本编辑器来编写,例如记事本、写字板等。

C源程序的书写格式*度较高,灵活性很强,有较大的任意性。其要点如下。

  • 一般情况下,每个语句占用一行。
  • 不同结构层次的语句,从不同的起始位置开始,即在同一结构层次中的语句,缩进同样的字数。
  • 表示结构层次的大括号通常写在该结构语句第一个字母的下方,与结构化语句对齐,并占用一行。
上一篇:Redis 缓存 雪崩 穿透


下一篇:云生态下的镜像管理利器Packer