从单片机基础到程序框架(全集 2019pdf版).pdf - 第218页

c=c+1; //被执行了 2 次 } View(a); //把第 1 个数 a 发送到电脑 端的串口助手 软件上观察。 View(b); //把第 2 个数 b 发送到电脑 端的串口助手 软件上观察。 View(c); //把第 3 个数 c 发送到电脑 端的串口助手 软件上观察。 while(1) { } } /*---C 语言学习区 域的结束。 ----- ----------- ---------- ----------- --…

100%1 / 836
{
a[i][k]=0;
}
}
【51.4 循环嵌套的常见用途---大延时。
单片机项目会经常会用到 delay 这个延时函数,大部分都是利用 for 循环来实现,小延时的函数往往
用嵌套,直接如下编写:
for(k=0;k<N;k++);
上述的 N 是控制循环次数,每次循环都要消耗单片机一点时间,如果 N 越大需要消耗的时间就越多,
到延时的作用。但是 N 所能取的最大值受它所定义的类型所限制,比如 unsigned char 类型最大范围是 255,
unsigned int 类型最大范围是 65535,unsigned long 类型最大范围是 4294967295。如果要实现更大的延时
怎么办?就可以用 for 的循环嵌套,利用循环嵌套可以使得循环总次数进行乘法翻倍的放大,很容易编写
延时的函数。比如:
for(i=0;i<M;i++) //大循
{
for(k=0;k<N;k++); //内嵌的小循环
}
此时 N 乘以 M N M unsigned long 类型
4294967295 的平方,次数大到惊人。
【51.5 例程练习和分析。
现在编写一个循环嵌套的练习程序。
程序代码如下:
/*---C 语言学习区域的开始。-----------------------------------------------*/
unsigned char a=0; //观察这个数最后的变化
unsigned char b=0; //观察这个数最后的变化
unsigned char c=0; //观察这个数最后的变化
unsigned char i; //控制大循环体的条件判断变量
unsigned char k; //控制内嵌小循环体的条件判断变
void main() //主函数
{
for(i=0;i<2;i++) //大循
{
a=a+1; //被执行了 2
for(k=0;k<3;k++) //内嵌小循环
{
b=b+1; //被执行了 6 次,也就是 i 乘以 k,2 3 等于 6.
}
c=c+1; //被执行了 2
}
View(a); //把第 1 个数 a 发送到电脑端的串口助手软件上观察。
View(b); //把第 2 个数 b 发送到电脑端的串口助手软件上观察。
View(c); //把第 3 个数 c 发送到电脑端的串口助手软件上观察。
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
1 个数
十进制:2
十六进制:2
二进制:10
2 个数
十进制:6
十六进制:6
二进制:110
3 个数
十进制:2
十六进制:2
二进制:10
分析:
变量 a 2。
变量 b 6。
变量 c 2。
【51.6 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改C 语言学习区域”代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口 51 习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。
第五十二节: 支撑程序框架的 switch 语句。
【52.1 switch 的重要性。
switch 是非常重要的语句,我所有的单片机项目都是 switch 搭建程序主框架。如果 while for
是一对孪生兄弟,那么“if-else if” switch 也是一对孪生兄弟,凡是用“if-else if”能实现的功
都可以用 switch 实现。switch 有条件分支的功能,当条件的分支超过 3 个以上时,switch 会比“if-else if”
更加直观清晰。
【52.2 switch 的语法。
switch 常见的格式如下:
switch(变量) //根据变量的数值大小从对应的 case 入口进
{
case 0: //入口 0
语句 0;
break; //switch 程序体的出口之一
case 1: //入口 1
语句 1;
break; //switch 程序体的出口之一
case 2: //入口 2
语句 2;
break; //switch 程序体的出口之一
} //最下面的花括号也是一个 switch 程序体的出口之一
分析:单片机从第一行的 switch(变量)进来依次往下查询跟变量匹配的 case 入口,然后从匹配 case
入口进来,往下执行语句,直到遇上 break 语句,或 return 语句,或者“最下面的花括号”这三种情况
之一,才跳出当前 switch 程序体。上述例子中,假如变量等 3,单片机从 switch(变量)进来往下查询跟
3 匹配的 case 入口,因为没有发 case 3,最后遇到“最下面的花括号”于是结束 switch 程序体,像这种
变量等于 3 情况,就意味着 switch 面的有效语句没有被执行到。多补充一句,在 case 2 项中
2”后面紧跟的 break 可以省略,因为 case 2 是最后一 case,即使没有遇到 break 也会遇到“最下面
的花括号”而结 switch 程序体。上述程序功能如果用“if-else if”语句来实现,等效于如下
if(0==变量)
{
语句 0;
}
else if(1==变量)
{
语句 1;
}
else if(2==变量)
{
语句 2;
}