单片机入门教程:第三章 C51语言程序设计

C51语言既具有汇编语言对操作硬件的功能,又兼有高级编程语言的许多优点。在现代单片机程序设计中,C51语言得到了广泛的应用。本章主要介绍C51程序的基本结构以及C51程序设计的基础知识,包括标识符关键字数据类型表达式运算符等。

每个C51源程序中包含一个名为"main()"的主函数,C51程序的执行总是从main()函数开始的。

C51的变量类型

C51的基本数据类型有整型(int)浮点型(float)字符型(char)无值型(void)。在基本数据类型中,除void类型外,其前面均可以有各种修饰符。修饰符用来改变基本类型的意义,以便更准确地适应各种情况的需求。

数组将多个相同类型的数据放在内存中连续的空间内存储,以便于程序同时调用一批相关数据进行使用。数组与普通变量一样,要先定义才能使用。在定义数组时,除了要注意数组本身的类型说明外,还要注意数组中的各变量的表示,即数组元素的表示。

在C51语言中,使用数组前必须先进行定义,即数组的类型说明。数组定义的一般形式如下。

类型说明符数组名[常量表达式],......;

数组声明的示例如下:

int sum[10];//声明整型数组sum,共10个元素
float ax[10],by[20];//声明浮点型数组ax,共10个元素,浮点型数组by,共20个元素
char c1[22];//声明字符数组c1,共22个元素

数组的赋值和遍历:

#include<stdio.h>//头文件

void main()//主函数
{
    int i,a[10];//定义整型变量i和整型数组a
    for(i=0;i<10;i++)//循环赋值
        a[i]=5*i+1;

    for(i=0;i<10;i++)//循环输出结果
        printf("%d",a[i]);
}
变量作用域

变量作用域是程序中变量起作用的范围。由于C51中可以包含多个函数和程序文件,因此使用变量时,除要首先定义该变量外,还要注意变量的有效作用范围,即该变量的作用域。变量作用域即变量的作用范围,可以是作用于一个函数或一个程序文件,甚至整个工程里的所有文件都可用。

C51的运算符

运算符是表示特定的算术或逻辑操作的符号,也称为操作符。例如,“*”号表示了一个乘法运算符;“&&”号表示了一个逻辑与的运算符。在C51语言中,需要进行运算的各个量(常量或变量)通过运算符连接起来便构成了一个表达式。

其中“?”运算符 也较为常见,通常的格式如下:

EXP1?EXE2:EXP3;
C51的表达式

表达式是需要进行运算的各个量由运算符连接起来而构成的一个整体。表达式是由操作数和运算符组成的,其中操作数一般包括常量和变量,甚至也可以包括函数和表达式等。表达式也是C51语言中的基本组成部分。C51中主要有算术表达式赋值表达式逗号表达式关系表达式逻辑表达式5种表达式。

C51的流程控制结构
  • 顺序结构

顺序结构是指程序按照自上而下的顺序执行各个代码及程序模块,没有语句的跳转。顺序结构最常用,也比较简单,常用于实现不是很复杂的任务。

  • 选择结构

选择结构的程序用于有选择地运行程序,其通过判断表达式的值来决定执行哪一段程序。选择结构的程序一般由if条件语句、switch开关语句等来构成。这种结构常用于处理判断、决策等任务。例如常用的if-else-if多分支if条件结构就是一种选择结构,其流程结构示意图如图所示。

在这里插入图片描述

  • 循环结构

循环结构的程序是指循环重复执行同一代码段的程序。这种结构常被用于需要多次执行某项任务的情况,可以简化代码。一般由while语句do-while语句for语句等构成。while语句do-while语句for语句构成的循环结构示意图。

在这里插入图片描述

以上介绍的3种程序结构,实际上是前面介绍过的各个C51流程控制语句及其嵌套的使用。在实际的单片机程序设计中,需要根据设计任务的特点,合理选择使用这些程序结构,来简化程序设计并解决问题。下面举一个比较复杂的算法处理的例子,其中综合运用了顺序选择以及循环程序结构。要计算的数学表达式如下所示。

在这里插入图片描述

其中x和y均为整型数据,当自变量x取值大于0时,因变量y等于x的阶乘;当自变量x小于或等于0时,因变量y等于表达式x3-2x+2的值。完整的程序代码示例如下。

#include<stdio.h>//头文件
int Fun(int x)
{
	int i,y;
	if(x>0)//判断x的值
	{
		y=1;
		for(i=1;i<=x;i++)//阶乘运算
		{
			y=y*i;
		}
	}
	else
	{
		y=x*x*x-2*x+2;//计算数学表达式
	}
	return y;//返回语句
}

void main()//主函数
{
	int x,y;
	x=4;
	y=Fun(x);//函数调用
	printf("Fun(%d)=%d\n",x,y);//打印输出结果
	x=-3;
	y=Fun(x);//函数调用
	printf("Fun(%d)=%d\n",x,y);//打印输出结果
}
C51的函数

实际中求解复杂问题时,常将一个大问题划分成若干子问题,即采用模块化程序设计方法,将整个程序划分为若干个程序模块,每个模块解决一个特定的子问题,各模块间相互独立,最后再把所有的程序模块组合起来解决所有的问题。

C51语言中引入了函数的概念。模块化程序设计一般采用函数来实现,一个函数对应一个功能模块,在程序中要实现相应的功能,直接调用该功能对应的函数即可。使用函数不仅可以实现程序的模块化设计,而且可以减少实现相同的功能重复编码的工作量,因为各程序模块之间是相互独立的,这样还提高了程序的可读性维护性

函数定义的一般形式如下。

类型说明符函数名(形参列表)
形参类型说明
{
    语句
    return语句
}

函数定义的程序示例如下。

#include<stdio.h>//头文件
int max(x1,x2)//自定义函数,用于求两个整数中的最大值
{
	if(x1>x2)//if判断语句
		return x1;//如果x1大于x2,则函数返回x1
	else
		return x2;//如果x1小于x2,则函数返回x2
}

void main()//主函数
{
	int x1=17,x2=9;//定义并初始化变量
	printf("x1=%d,x2=%d",x1,x2);//输出x1、x2的值
	printf("max(x1,x2)=%d\n",max(x1,x2));//调用函数并输出结果
}

在本例中,首先定义max函数是一个整型函数,形参x1x2的类型均为整型量。函数返回值是整型数。在函数体中是max函数语句部分,使用if语句将两形参值作比较,将较大值作为函数的返回值,返回给主调函数。在主函数main中调用max函数,将主函数中的实参变量的值x1=17x2=9传递给形参变量x1x2,比较并输出结果。

  • 2
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go2coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值