4.1循环程序简介
前面的课程中学习了分支程序的设计,下面学习程序设计中另一种常用的程序结构――
循环结构。
在一个实用的程序中,循环结构是必不可少的。循环是反复执行某一部分程序行的操作。
有两类循环结构:
(1)当型循环,即当给定的条件成立时,执行循环体部分,执行完毕回来再次判断条
件,如果条件成立继续循环,否则退出循环。
(2)直到型循环,即先执行循环体,然后判断给定的条件,只要条件成立就继续循环,
直到判断出给定的条件不成立时退出循环。
下面我们就通过一些例子来看 C 语言提供的循环语句,及如何利用这些循环语句写循
环程序。
例 4-1 使P1 口所接LED 以流水灯状态显示
#include "reg51.h"
#include"intrins.h" //该文件包含有_crol_(…)函数的说明
void mDelay(unsigned int DelayTime)
{ unsigned int j=0;
for(;DelayTime>0;DelayTime--)
{ for(j=0;j<125;j++)
{;}
}
}
void main()
{ unsigned char OutData=0xfe;
while(1)
{ P1=OutData;
OutData=_crol_(OutData,1); //循环左移
mDelay(1000); /*延时1000 毫秒*/
}
}
程序分析:输入源程序,并命名为exam31.c,建立并设置工程,这个例子使用实验仿
真板演示的过程请自行完成。如果在演示时,发现灯“流动”的速度太快,几乎不能看清,
那么可以将mDelay(1000)中的1000 改大一些,如2000、3000 或更大。软件仿真无法实现
硬件实验一样的速度,这是软件仿真的固有弱点,下面介绍如何用具有仿真功能的实验板来
实现这个例子。
将随机带的一根串口电缆一端连接到 PC 机的某一个串口,另一端连到本实验板上,设
置工程,选中Debug 页,点击右侧的“Use Keil Monitor-51 Drive”,然后选中“Load Application
at Start”和“Go Till main”,如图4-1 所示。选择完成后,点击“Setting”按钮,选择你所
用的PC 上的串口(COM1 或COM2),波特率(通常可以使用38400),其他设置一般不需
要更改,如图4-2 所示。点击“OK”回到Debug 页面后即可完成设置。
编译、连接正确后,点击菜单 DebugStart /Stop Debug Session,可以看到在窗口右下
角的命令窗口提示正确连接到了Monitor-51,如图4-3 所示。此时,即可使用Keil 提供的单
步、过程单步、执行到当前行、设置断点等调试方法进行程序的调试。如果全速运行程序,
可看到流水灯的实验效果。
程序分析:这段程序中在两处用到了循环语句,首先是主程序中使用了:
while(1)
{……}
这样的循环语句写法,在{}中的所有程序将会不断地循环执行,直到断电为止;其次是
延时程序,使用了for 循环语句的形式。下面我们就对循环语句作一个介绍。
循环结构。
在一个实用的程序中,循环结构是必不可少的。循环是反复执行某一部分程序行的操作。
有两类循环结构:
(1)当型循环,即当给定的条件成立时,执行循环体部分,执行完毕回来再次判断条
件,如果条件成立继续循环,否则退出循环。
(2)直到型循环,即先执行循环体,然后判断给定的条件,只要条件成立就继续循环,
直到判断出给定的条件不成立时退出循环。
下面我们就通过一些例子来看 C 语言提供的循环语句,及如何利用这些循环语句写循
环程序。
例 4-1 使P1 口所接LED 以流水灯状态显示
#include "reg51.h"
#include"intrins.h" //该文件包含有_crol_(…)函数的说明
void mDelay(unsigned int DelayTime)
{ unsigned int j=0;
for(;DelayTime>0;DelayTime--)
{ for(j=0;j<125;j++)
{;}
}
}
void main()
{ unsigned char OutData=0xfe;
while(1)
{ P1=OutData;
OutData=_crol_(OutData,1); //循环左移
mDelay(1000); /*延时1000 毫秒*/
}
}
程序分析:输入源程序,并命名为exam31.c,建立并设置工程,这个例子使用实验仿
真板演示的过程请自行完成。如果在演示时,发现灯“流动”的速度太快,几乎不能看清,
那么可以将mDelay(1000)中的1000 改大一些,如2000、3000 或更大。软件仿真无法实现
硬件实验一样的速度,这是软件仿真的固有弱点,下面介绍如何用具有仿真功能的实验板来
实现这个例子。
将随机带的一根串口电缆一端连接到 PC 机的某一个串口,另一端连到本实验板上,设
置工程,选中Debug 页,点击右侧的“Use Keil Monitor-51 Drive”,然后选中“Load Application
at Start”和“Go Till main”,如图4-1 所示。选择完成后,点击“Setting”按钮,选择你所
用的PC 上的串口(COM1 或COM2),波特率(通常可以使用38400),其他设置一般不需
要更改,如图4-2 所示。点击“OK”回到Debug 页面后即可完成设置。
编译、连接正确后,点击菜单 DebugStart /Stop Debug Session,可以看到在窗口右下
角的命令窗口提示正确连接到了Monitor-51,如图4-3 所示。此时,即可使用Keil 提供的单
步、过程单步、执行到当前行、设置断点等调试方法进行程序的调试。如果全速运行程序,
可看到流水灯的实验效果。
程序分析:这段程序中在两处用到了循环语句,首先是主程序中使用了:
while(1)
{……}
这样的循环语句写法,在{}中的所有程序将会不断地循环执行,直到断电为止;其次是
延时程序,使用了for 循环语句的形式。下面我们就对循环语句作一个介绍。