单片机原理与应用(C语言版)(微课版)课件 项目3 流水灯系统设计_第1页
单片机原理与应用(C语言版)(微课版)课件 项目3 流水灯系统设计_第2页
单片机原理与应用(C语言版)(微课版)课件 项目3 流水灯系统设计_第3页
单片机原理与应用(C语言版)(微课版)课件 项目3 流水灯系统设计_第4页
单片机原理与应用(C语言版)(微课版)课件 项目3 流水灯系统设计_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

项目3流水灯系统设计目录任务3-1库函数流水灯设计3.1认识C语言任务3-2按键控制流水灯3.2C语言的基本语句任务3-3花样流水灯设计任务拓展LED灯光报警电路设计3.3C语言数据与运算任务3-4

可调光灯3.4C语言的函数项目导读本项目从流水灯设计开始,了解C51结构,掌握函数定义与调用。通过按键控制,学习单片机接口设计。花样流水灯设计中,探索C51灵活性,运用多种知识实现复杂灯光控制。可调光灯拓展输出信号控制,学习调节亮度技术。项目帮助掌握51单片机编程与硬件控制,为后续设计奠定基础。思维导图任务3-1库函数流水灯设计本节通过“流水灯”设计任务来了解C51程序结构,认识函数在C51程序设计中的地位。1、目的与要求了解C51程序与标准C区别,通过8个LED流水灯系统设计学习C语言基础。任务完成时间:4学时。2、原理及实现依次点亮P1.7至P1.0引脚连接的发光二极管,循环产生流水灯效果。流水灯控制系统设计电路如图所示。3、源程序设计流水灯控制系统的源程序如下。

流水灯控制程序流程图4、任务总结任务通过51单片机控制P1口的8个LED实现流水灯,了解C语言基本结构和特点,学习控制单片机并行I/O端口。C51程序由预处理命令、函数声明、主函数等构成。主函数由while(1)构成,语句按顺序执行。可学习中断函数。3.1认识C语言C语言是单片机开发和应用的趋势。目前C语言已经成为单片机基础上应用最为广泛的计算机语言之一。3.1.1第一个C语言程序我们一起来认识一下任务3-1中流水灯控制系统的C语言程序,源程序中,第1、2行:对程序进行简要说明,包括程序名称和功能。“//”是单行注释符号,通常用从该符号开始直到一行结束的内容来说明相应语句的意义,或者对重要的代码行、段落进行提示,方便程序的编写、调试及维护工作,提高程序的可读性。程序在编译时,不对这些注释内容做任何处理。第3、4行:这两行是C语言的程序预处理部分:文件包含语句,表示把语句中指定文件的全部内容复制到此处,与当前的源程序文件链接成一个源文件。第5~12行:定义函数delay()。delay()函数的功能是延时,用于控制发光二极管的闪烁速度。第13-21行:定义主函数main()。main()函数是C语言中必不可少的主函数,也是程序开始执行的函数。3.1.2C语言的基本结构通常来说,51单片机的C51语言程序由头文件声明、宏定义、全局变量、子函数、主函数和注释几个部分组成。一个典型的C51语言应用程序结构如图所示。头文件声明:声明在该C51语言程序中需要使用的头文件,在这些头文件中通常会有一些关于单片机的预定义,如端口、寄存器等,KeilμVision开发环境提供了大量的相应头文件,最常用的头文件包括AT89X52.h、stdio.h、absacc.h等。宏定义:以简单易记的字符串声明在该C51语言程序中需要经常使用的一些特定变量。全局变量:在整个C51语言程序中都有效的变量。子函数:用于在C51语言程序中完成特定功能的语句块。主函数:C51语言程序的主要语句块,其本质也是一个函数。1、主函数C语言程序是由一个个函数构成的。C语言的主函数形式如下:2、标识符和关键字标识符用来标识源程序中某个对象的名字,这些对象可以是语句、数据类型、函数、变量、数组等。表

列出了C51中的所有关键字。

ANSIC标准关键字C51编译器的扩展关键字3.1.3C语言的特点C51交叉编译器允许用C语言为51单片机编程,生成可再定位的目标代码。C语言是高效、结构化的通用编程语言,与汇编语言在效率和速度上相当,应用广泛。使用C语言编程,代码具有良好的可移植性和可读性,仅需了解单片机存储器结构,无需掌握处理器指令集。1、结构化语言C语言由函数构成。函数包括标准函数和自定义函数,每个函数就是一个功能相对独立的模块。C语言还提供了多种结构化的控制语句,如顺序、条件、循环结构语句,满足程序设计结构化的要求。2、丰富的数据类型C语言具有丰富的数据类型,便于实现各类复杂的数据结构,它还有与地址密切相关的指针及其运算符,可直接访问内存地址,进行位(bit)一级的操作,能实现汇编语言的大部分功能,因此C语言被称为“高级语言中的低级语言”。3、便于维护管理用C语言开发单片机应用系统程序,便于模块化程序设计。可采用开发小组来规划和完成项目,分工合作,灵活管理。基本上杜绝了因开发人员变化所造成的对项目进度、后期维护及升级的影响,从而保证了整个系统的品质、可靠性及可升级性。与汇编语言相比,C语言的优点如下:(1)不要求编程者详细了解单片机的指令系统,但需了解单片机的存储器结构。(2)寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理。(3)程序结构清晰,可读性强。(4)编译器提供了很多标准函数,具有较强的数据处理能力。任务3-2按键控制流水灯本节通过按键控制“流水灯”,没按按键时LED全亮,按下按键时LED显示流水灯效果。1、目的与要求通过按键控制发光二极管显示不同的内容,让读者了解单片机与按键的接口设计,以及按键控制程序的设计方法。采用8个发光二极管模拟霓虹灯的显示,一个按键S1控制8个发光二极管实现不同显示方式。当S1没有按下时,8个LED全亮,当S1按下时8个LED显示流水灯效果。2、原理及实现根据任务要求,采用51单片机的P1口控制8个发光二极管,P0口的P0.0引脚控制按键S1,硬件电路如图所示。3、源程序设计按键控制流水灯系统的源程序如下4、任务总结通过单片机控制多种花样霓虹灯系统的设计,加深读者对单片机并行I/O端口的输出和输入控制功能的认识,同时,读者还了解了按键的控制方法以及if语句的使用方法。3.2C语言的基本语句3.2C语言的基本语句本节介绍C语言基本控制语句的格及应用,使读者对C语言中常见的控制语句有一个初步的认识。归纳起来,任何复杂的程序都由以下三种基本语句组成:

表达式语句和复合语句

选择语句

循环语句3.2.1表达式语句和复合语句从图中可以知道,顺序结构就是由上而下逐行执行。下面主要介绍C语言中的语句。1、表达式语句在表达式之后加上分号就构成了表达式语句,这是C语言的一个特色。2、空语句如果程序某行只有一个分号“;”作为语句的结束,我们就称之为空语句。注意空语句会导致逻辑上的语句错误,需要谨慎使用。3、复合语句用花括号括起来的多个语句便组成了一个复合语句。其形式如下: {语句1;语句2;…;语句n;}3.2.2选择语句选择结构的流程如图所示,P代表一个条件,当P条件成立时,执行A操作,否则执行B操作,但两者只能选择其一。两个方向上的程序流程最终汇集到一起从一个出口中退出。由选择结构可以派生出另一种基本结构:多分支结构。在多分支结构中又分为串行多分支和并行多分支两种情况。1、串行多分支if语句如图所示,在串行多分支结构中,以单选择结构中的某一分支方向作为串行多分支方向(假如以条件为“真”为串行方向)继续进行选择结构的操作。C语言提供了三种形式的if语句。(1)if形式 if(条件表达式) {

语句 }(2)if-else形式 if(表达式)

语句1; else

语句2;(3)if-elseif形式if(表达式1)

语句1;elseif(表达式2)

语句2;elseif(表达式3)

语句3;elseif(表达式4) …

if-else选择流程图if-elseif语句流程图2、并行多分支switch-case语句如图所示,在并行多分支结构中,根据K值的不同,而选择A1、A2、…、An等不同的操作中的一种来执行。常见的用于构成并行多分支结构的语句有switch-case语句。switch-case语句的一般形式如下:switch-case语句执行的流程图如图所示。3.2.3循环语句在C语言中构成循环控制的语句有以下几种。

goto语句

while语句

do-while语句

for语句

break语句和continue语句1、goto语句goto语句是一个无条件的转向语句,只要执行到这个语句,程序指针就会跳转到goto后的标号所在的程序段。它的语法如下:下面是goto语句的用法。2、while语句while语句的意思不难理解,在英语中它的意思是“当……的时候”,在这里可以理解为“当条件为真的时候,就执行后面的语句”。while语句构成循环的一般形式为:它的执行流程图如图所示。3、do-while语句do-while语句可以说是while语句的补充,while是先判断条件是否成立再执行循环体,而do-while则是先执行循环体,再执行条件表达式,如果条件为真则循环继续,否则终止。这样就决定了循环体无论在任何条件下都会至少被执行一次。它的执行流程图如图所示。4、for语句在C语言中,for语句灵活且复杂。可用于循环次数确定或不确定但条件已给出的情况。表达式模块含三部分:初始化、测试是否结束循环、尺度增量。for语句是一个很实用的循环语句,它的一般形式是:若循环未达到跳出的条件,而其他条件成立要强制跳出循环,则可在循环内加入其他条件与break指令。语句如下:for语句执行过程如图所示。由图可知,执行过程如下:(1)先执行表达式1,进行初始化。(2)判断表达式2是否满足给定的循环条件,若满足,则执行循环体内语句,然后执行下面第3步。(3)若表达式2为真,在执行循环语句之后,执行表达式3。(4)回到第2步继续执行。(5)退出for循环,执行下面一条语句。从图中可以看出这两种语句的区别,程序(1)的流程图如图(a)所示,而程序(2)的流程图如图(b)所示。请注意图中当“表达式2”为真时流程的转向。任务3-3花样流水灯设计本节通过“流水灯”设计任务来了解C51程序结构,认识函数在C51程序设计中的地位。1、目的与要求通过基于单片机的八位LED灯循环流水控制程序设计,深入学习C语言中数据类型、运算符、表达式的综合应用以及变量和常量的合理使用,掌握位运算、逻辑运算在硬件控制中的实际运用,理解延时函数对程序执行节奏的调控作用。2、原理及实现采用AT89C51单片机控制八位LED灯,P0端口连接八个LED灯,P1端口的高四位连接四个独立式按键(K1、K2、K3、K4),用于控制流水灯的启动、停止及流动方向。按K1启动流水灯,K2停止,K3改变为向上流动(右移),K4改变为向下流动(左移)。3、源程序设计采用单片机控制LED灯流动显示的编程思路:通过P0端口输出流动数据代码,实现灯的流动效果。通过P1端口检测按键状态,控制流水灯的启动、停止及流动方向。花样流水灯控制系统的源程序如下。4、任务总结任务目标:学习C51程序结构,掌握C语言数据类型、运算符、表达式、位运算、逻辑运算的应用,理解延时函数的作用。利用单片机的P0端口输出流动数据代码,实现灯的流动效果:用单片机P0端口输出流动数据代码,P1端口检测按键状态,控制流水灯。定义全局变量控制流动方向、启停、数据代码。延时函数控制速度,LED显示函数更新P0口状态。键盘扫描函数检测P1口高四位,判断按键并设置标志。在主程序中:初始化P1口为输入,P0口为输出,关闭灯。无限循环进行键盘扫描,根据按键控制流水灯,调用LED显示函数实现效果。3.3C语言数据与运算3.3C语言数据与运算C51是一种专门为51单片机设计的C语言编译器,支持ANSI标准的C语言程序设计,同时根据51单片机的特点做了一些特殊扩展。数据类型、运算符和表达式是C51单片机应用程序设计的基础。本节将对其基本数据类型、常量和变量、运算符及表达式进行详细介绍。数据类型是指数据的存储格式。标准C语言中基本的数据类型为char、int、short、long、float和double,除此之外,在C51语言中还扩展了一些特殊的数据类型。C51支持的数据类型如表3-3所示。C51扩展的特殊数据类型。

bit位标量:利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和False.

sbit可寻址位:利用它能定义内部RAM中的可寻址位或特殊功能寄存器中的可寻址位。

sfr特殊功能寄存器:利用它能定义8051系列单片机内部的所有特殊功能寄存器。

sfr16特殊功能寄存器:sfr16和sfr一样用于操作特殊功能寄存器,所不同的是它用于操作占两个字节的寄存器,如定时器TO和T1。3.3.1数据类型

C51支持的数据类型3.3.2常量和变量1、常量常量可用在不必改变值的场合,如固定的数据表、字库等。常量区分为不同的数据类型,具体说明如下:

整型常量能表示为十进制,如123、0、-89等。

浮点型常量可分为十进制和指数表示形式。

字符型常量是单引号内的字符,如'a'、'd'等

字符串型常量由双引号内的字符组成,如"test"、"OK"等。

位标量,它的值是一个二进制。常量的定义方式有几种。用预定义语句定义常量。将值保存在程序存储器中。

常用的转义字符表2、变量要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储器类型,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下: [存储种类]数据类型[存储器类型]变量名表在定义格式中,数据类型和变量名是必须的,其他都是可选的。有四种存储种类:自动、外部、静态和寄存器,自动是默认类型。存储器类型说明指定了变量在硬件系统中的存储区域,并确保编译时能准确定位。接下来,先介绍C51中的变量存储器类型,再介绍C51新增的sfr、sfr16和sbit数据类型。(1)变量的存储器类型(2)sfr、sfr16变量的定义(3)sbit变量的定义存储器类型3.3.3运算符和表达式运算符就是完成某种特定运算的符号。运算符按其表达式中与运算符的关系可分为单目运算符、双目运算符和三目运算符。单目就是指需要有一个运算对象,双目就是指要求有两个运算对象,三目则要三个运算对象。表达式则是由运算符及运算对象所组成的具有特定含义的式子。C是一种表达式语言,表达式后面加“;”号就构成了一个表达式语句。1、赋值运算符对于“=”这个符号我们不会陌生,在C中它的功能是给变量赋值,我们称之为赋值运算符。它的作用就是将数据赋给变量。2、算术运算符单片机C语言中的算术运算符有如下几个,其中只有取正值和取负值运算符是单目运算符,其他都是双目运算符。

+:加或取正值运算符。

-:减或取负值运算符。

*:乘运算符。

/:除运算符。

%:求余运算符。算术表达式的形式如下:

表达式1算术运算符

表达式23、增减量运算符增减量运算符是C语言中特有的一种运算符,在VB、PASCAL中等都是没有的。其作用就是对运算对象做加1和减1运算。

++:增量运算符。

--:减量运算符。要注意的是运算对象在符号前或后,其含义都是不一样的,虽然同是加1或减1。4、关系运算符单片机C语言中有6种关系运算符。

>:大于。

<:小于。

>=:大于等于。

<=:小于等于。

==:等于。

!=:不等于。5、逻辑运算符关系运算符所能反映的是两个表达式之间的大小等于关系,逻辑运算符则用于求条件式的逻辑值,用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式。逻辑表达式的一般形式如下。

逻辑与:条件式1&&条件式2。

逻辑或:条件式1‖条件式2。

逻辑非:!条件式2。6、位运算符位运算符按位运算不改变变量值,需赋值运算改变。位运算符不能操作浮点数据。单片机C语言有6种位运算符。位运算一般的表达形式如下:变量1位运算符

变量2位运算符的逻辑真值表7、复合赋值运算符复合赋值运算符就是在赋值运算符“=”的前面加上其他运算符。表

所示是C语言中的复合赋值运算符。8、逗号运算符在C语言中逗号还是一种特殊的运算符,也就是逗号运算符,用它能将两个或多个表达式连接起来,形成逗号表达式。逗号表达式的一般形式为:

表达式1,表达式2,表达式3,…,表达式n9、条件运算符C语言中有一个三目运算符,那就是“?:”条件运算符,它要求有三个运算对象。它能把三个表达式连接构成一个条件表达式。条件表达式的一般形式如下:逻辑表达式?表达式1:表达式210、指针和地址运算符指针是单片机C语言中一个十分重要的概念,也是学习单片机C语言中的一个难点。对于指针将会在5.3.2节中做详细的讲解。在这里先来了解一下单片机C语言中提供的两个专门用于指针和地址的运算符:

*:取内容。

&:取地址。取内容和取地址的一般形式分别为:取内容:变量=*指针变量取地址:指针变量=&目标变量任务3-4可调光灯本节通过采用51单片机进行可调光灯控制系统的设计,使读者了解使用单片机并行I/O端口输出可控制的脉冲信号的方法。1、目的与要求任务要求用两个按键控制灯的亮度。系统上电时,灯在最暗状态,按住其中一个键,灯的亮度逐渐增强,增到最亮时,再回到最暗;按住另外一个键,灯的亮度逐渐减弱,减到最暗时,再回到最亮。2、原理及实现本设计采用可控制脉冲信号技术,通过控制51单片机的I/O端口引脚不断输出高低电平来实现脉冲信号输出,控制输送到灯的电压变化,从而实现控制灯亮度的效果。可调光灯控制系统的硬件电路如图所示。3、源程序设计可调光灯控制的源程序如下。4、任务总结本任务是采用51单片机输出一个脉冲调制信号来控制发光二极管的亮度,模拟灯的调光控制。单片机读取连接到P0口上的亮度调节按键L_up和L_down的状态,判断是请求调亮还是调暗,来调整脉冲电平信号的占空比,以达到调节台灯亮度的目的。通过本项目的设计制作,使读者进一步加强51单片机并行I/O端口应用的能力,并掌握脉冲调制技术原理及编程技术,加深在C语言的结构化程序设计中函数的基本概念与使用方法。3.4C语言的函数3.4C语言的函数函数是C51程序的基本单位,分标准库和用户定义两类。标准库由系统定义,用户定义函数由用户编写。C语言程序由主函数main()和子函数构成,程序从main()开始执行。从用户使用的角度来看,函数有两种类型:标准函数和用户自定义函数。1、标准函数标准函数也称为标准库函数,是由C51的编译器提供的,以头文件的形式给出。KeilC51编译器提供了100多个标准库函数供我们使用。常用的C51标准库函数包括一般I/O端口函数、访问SFR地址函数等,常用的C51标准库函数请参考附录。2、用户自定义函数用户自定义函数是用户根据需要自行编写的函数,它必须先定义之后才能被调用。函数定义的一般形式如下。3.4.1函数的分类和定义3.4.2函数调用1、函数的调用函数的调用指的是在一个函数体中引用另外一个已经定义了的函数,前者称为主调用函数,后者称为被调用函数。函数调用的一般形式为:

函数名(实际参数表列);函数调用的方式有以下三种。函数语句:在主调用函数中直接将被调用函数作为一个语句。函数表达式:这种调用方式是将被调用函数作为一个表达式,这种表达式称为函数表达式。函数参数:这种函数调用方式是指将被调用函数作为另一个函数的实际参数。2、被调用函数的说明与使用变量一样,在调用一个函数之前,包括标准库函数,必须对该函数的类型进行说明,即“先说明,后调用”。如果调用的是标准库函数,一般应在程序的开始处用预处理命令#include命令将有关函数说明的头文件包含进来。例如: #include<at89x51.h>3、函数的返回值在调用函数过程中,经常希望得到一个从被调用函数中带回来的值,这就是函数的返回值。函数返回值是通过retum语句得到的。4、参数的传递在函数调用过程中,必须用主调用函数的实际参数来替换被调用函数中的形式参数,即参数传递。在C51程序中,一般来说,参数传递有以下两种方式。数值传递:就是指在函数调用时,直接将实际参数值复制给形式参数在内存中的临时存储单元。地址传递:就是指在一个函数调用另一个函数时,并不是将主调函数中的实际参数一值直接传送给被调用函数中的形式参数,而只是将存放实际参数的地址传送给形式参数。5、重入函数重入

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论