基于proteus的51单片机仿真实例二十七、C语言的语句演示实例

1、表达式语句
C语言提供了十分丰富的程序控制语句。表达式语句是最基本的一种语句。在表达式的后面加一个分号“;”就构成了表达式语句。例如:A=10;
表达式语句也可以仅有一个分号“;”组成,这种语句称为空语句。空语句是表达式语句的一个特例。空语句在程序设计中是很有用的一种语句,但程序在语法上需要有一个语句,但在语义上并不要求有具体动作时,便可以采用空语句,空语句通常有两种用法:
1)在程序中为有关语句提供标号,例如:
flag:;
...
if(num==2) goto flag;
2)在用while语句构成的循环语句后面加一个分号,形成一个空循环语句,这种空语句在等待某个事件发生时很有用。例如:
{
。。。
while(!num);
...
}
这段程序中“while(!num);”用来等待num这个数值为真时跳出空循环。
 
2、复合语句
复合语句是由若干条语句组成的一种语句。它是用一个大括号“{}”将若干条语句组合在一起而形成的一种功能块。复合语句不需要以分号“;”结束,但它内部的各条语句仍需要以分号“;”结束。复合语句的一般形式为:
{
局部变量定义
语句1;
语句2;
...
语句n;
}
复合语句在执行时,其内部的各条语句依次顺序执行。整个复合语句在语法上等价于一个单语句,因此在C语言程序中可以将复合语句视为一个单语句。复合语句允许嵌套,即在复合语句内部还可以包含别的复合语句。实际上,C语言中的函数体就是一个复合语句。在复合语句内部所定义的变量,称为该复合语句中的局部变量,它尽在当前这个复合语句中有效,该复合语句执行结束后,该变量也就失效了。
 
3、本实例演示复合语句的执行效果。首先在主程序中定义了一个变量num,然后把该变量的值送p0口显示,然后程序进入一个复合语句,在复合语句中同样定义了一个变量num,仍然将该变量的值送到PO口显示。复合语句执行结束后,再次把变量的值送到P0口显示。观察P0口的显示有什么变化
 
4、在keil c51中新建工程ex16,编写如下程序代码,编译并生成ex16.hex文件。
//实例16:复合语句试验,重点观察变量的作用域
#include            //包含头文件
void delay(void)    //延时函数
{
  unsigned char i,j;
 for(i = 0; i < 252;i++)
  for(j = 0;j < 252;j++);
}
   
void main(void)
{
  unsigned char num;    // 变量定义
 num = 0xaa;     // 变量赋初值
 P0 = num;     //  变量的值送P0口显示
 delay();     // 延时一段时间
 delay();
 delay();
       //
 {        // 复合语句
     unsigned char num;   //复合语句中定义该复合语句中的局部变量
    num = 0x55;     //变量赋初值
  P0 = num;    // 送P0显示
  delay();
  delay();
  delay();
   }       //复合语句结束
    
 P0 = num;    //P0显示变量值
   
 while(1)     //
 {
     
 }
}
5、在proteus中新建仿真文件ex16.dsn。电路原理图如下所示:

6、将ex16.hex文件载入at89c51,启动仿真,观察运行效果。
可以看到,P0口的8个LED先是D10,D12,D14,D16被点亮,然后D9,D11,D13,D15被点亮,最后D10,D12,D14,D16被点亮。
这是什么原因?
在主函数开始,定义了变量num,并给它赋予了一个初值,这个变量值在整个主函数体内都是有效地,所以程序一开始,先将该值送到P0口显示,随后,程序进入了复合语句,在复合语句中又定义了一个变量num,并将该变量赋值后送到P0口显示,在这里复合语句中的变量与主函数中的变量名称相同,但此时复合语句中的局部变量的优先级要高于主函数中的变量,所以此时送到P0口的值是该复合语句中的局部变量的值。接下来复合语句执行结束后,程序又进入主函数体,此时复合语句中的局部变量失效,因此此时送到P0口的是主函数体中的变量的值。


下面两图分别是程序执行复合语句以外的运行结果、程序执行复合语句中的内容的执行结果

你可能感兴趣的:(51单片机)