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和整型数组afor(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,则函数返回x1elsereturn 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,比较并输出结果。

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

  1. c语言程序设计教程博客,C语言教程第三章: C语言程序设计初步

    if(表达式1) 语句1: else if(表达式2) 语句2: else if(表达式3) 语句3: - else if(表达式m) 语句m: else 语句n:其语义是:依次判断表达式的值,当出现 ...

  2. HT合泰单片机入门教程(第一章 HT单片机环境搭建)

    目录 系列文章目录 前言 一.合泰单片机的优势 二.IDE安装 1.HT-IDE3000下载 2.HT-IDE3000安装 三.烧录软件安装 1.HOPE3000下载 2.HOPE3000安装 总结 ...

  3. HT合泰单片机入门教程(第二章 点亮第一个LED灯)

    文章目录 系列文章目录 前言 一.新建工程 1.启动HT-IDE3000 2.建立工程 二.点亮LED灯 1.了解I/O 2.LED代码 总结 系列文章目录 第一章 HT单片机环境搭建 第二章 点亮第 ...

  4. R语言入门教程知识 第一章 R语言

         R语言 R是用于统计分析.绘图的语言和操作环境.R是属于GNU系统的一个自由.免费.源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具. R语言特点 R作为一种统计分析软件,是集统计 ...

  5. Microchip PIC系列8位单片机入门教程(四)中断

    Microchip PIC系列8位单片机入门教程(三) 第一节 知识点 (1)中断 PIC18F2420/2520/4420/4520 器件提供多个中断源及一个中断优先级功能,可以给大多数中断源分配高 ...

  6. c语言多个附加说明符,C语言教程第三章.ppt

    <C语言教程第三章.ppt>由会员分享,可在线阅读,更多相关<C语言教程第三章.ppt(36页珍藏版)>请在人人文库网上搜索. 1.第三章,顺序结构程序设计 数据输入输出 及程 ...

  7. 51单片机入门教程学习笔记

    基于江科大自化协B站教学视频<51单片机入门教程-2020版 程序全程纯手打 从零开始入门> 一.单片机介绍 单片机,英文Micro Controller Unit,简称MCU 内部集成了 ...

  8. ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第二章_Desktop简介 - ArcGIS知乎-新一代ArcGIS问答社区 1 Desktop简介 1.1 ArcGIS for Desktop ...

  9. c语言第四章循环程序设计,C语言程序设计教程第4章-循环结构程序设计

    <C语言程序设计教程第4章-循环结构程序设计>由会员分享,可在线阅读,更多相关<C语言程序设计教程第4章-循环结构程序设计(42页珍藏版)>请在人人文库网上搜索. 1.C语言程 ...

  10. 51单片机入门教程(1)——点亮一个LED灯

    51单片机入门教程(1)--点亮一个LED灯 一.什么是单片机 单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU.随机存储器 ...

最新文章

  1. 在DWZ框架中整合kindeditor复文本框控件
  2. matplotlib坐标轴调整
  3. 用 TensorFlow 目标检测 API 发现皮卡丘!
  4. 单例模式的几种实现方式
  5. 国际计算机思维比赛,少儿编程领域中,你所不知道的国际计算思维大赛
  6. vector-空间增长
  7. Dotnet 2.0配置系统
  8. VirtualBox 安装 Linux时 报错This kernel requires an X86-64 CPU,but only detected an i686 CPU错误的解决办法
  9. DevOps vs. Agile:它们有什么共同点?
  10. java自动生成类_自动生成优化的Java类专业知识
  11. CVPR 2020 | 北航提出:通过由粗到精特征自适应进行跨域目标检测,表现SOTA!
  12. 视觉SLAM笔记(49) 后端状态估计
  13. 传说之下音乐计算机版,传说之下同人音乐
  14. deeping linux安装安卓,Deepin 安装Android-studio
  15. 三菱PLC水处理程序加触摸屏程序 三菱PLC水处理程序加触摸屏程序
  16. ArcGIS for Desktop 10.2安装破解与使用图文详解
  17. 一百个你不应该继续用Dev C++的理由
  18. 人生如游戏,容错性很关键
  19. 跑步为什么不能过量(对身体的危害)
  20. deepin创建快捷方式图标

热门文章

  1. A* 寻路算法[转载]
  2. 保护心灵窗口——防蓝光软件f.lux
  3. 微软代码审查工具_Microsoft如何进行代码审查?
  4. Ruby 从入门到掌握视频教程(31 个视频)
  5. 零基础入门STM32编程——工具篇(四)
  6. Matlab 图例 位置的不同命令
  7. 虚拟机桥接模式连不上网问题(非桥接网卡原因)
  8. VS2019 EF6连接Mysql闪退以及实体框架版本问题
  9. Origin自动寻峰
  10. php 模拟登陆新浪微博,[Javascript] 爬虫 模拟新浪微博登陆