本节书摘来自异步社区《51单片机应用开发范例大全(第3版)》一书中的第1章,第1.4节,作者 张杰,宋戈,黄鹤松,员玉良,更多章节内容可以访问云栖社区“异步社区”公众号查看。
利用P1口,编制程序输出一串脉冲,经放大后驱动小电动机,改变输出脉冲的电平及持续时间,达到使电动机正转、反转、加速、减速、停转之目的。
1.实例概述
可以通过74HC244输入开关量数据来控制小直流电动机的转动,实现正转4种转速,反转4种转速及停转。电路及连线如图1-31所示。
图1-31中P1.0连接74HC244的2A2。两个输出通过两个74HC32连接直流电动机电源。小直流电动机原理是:转动方向是由电压来控制的,电压为正则正转,电压为负则负转。转速大小则是由输出脉冲的占空比来决定的,正向占空比越大则转速越快,反向转则占空比越小转速越快,如图1-32所示。
2.程序框图及代码
在编写代码前,最好先把程序流程图画出来,这样可以使得编写的代码更加简洁有效。实例程序的流程图如图1-33所示。
程序代码如下:
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源程序的书写格式自由度较高,灵活性很强,有较大的任意性。其要点如下。
一般情况下,每个语句占用一行。不同结构层次的语句,从不同的起始位置开始,即在同一结构层次中的语句,缩进同样的字数。表示结构层次的大括号通常写在该结构语句第一个字母的下方,与结构化语句对齐,并占用一行。