版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目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、重入函数重入函数又叫再入函数,是一种可以在函数体内间接调用其自身的函数。这是C51语函言相比标准C语言的一种扩展。重入函数声明的关键字为reentrant,重入函数声明的格式为:
函数类型
函数名(形式参数表)reentrant6、中断服务函数C51编译器可用C语言创中断服务程序,减轻汇编编写负担。中断服务函数用interrupt声明,格式为:类型名(参)interruptn[usingn]。关键字interrupt后面的n是中断号,0~31取值。中断向量产生于8n+3处,具体取决于芯片型号。中断源和向量如表所示。使用中断服务函数时应注意以下几点:
中断函数不能直接调用中断函数。
不能通过形式参数来进行参数传递。
在中断函数中调用其他函数,两者所使用的寄存器组应相同。
中断函数没有返回值。
关键字interrupt和using的后面都不允许跟带运算符的表达式。任务拓展LED灯光报警电路设计LED灯光报警器是一种用在需要进行安全防护或需要提醒危险状态的场所,通过声音和各种光来向人们发出示警信号的一种报警信号装置。1、目的与要求本任务采用一个弹性按键S1模拟报警开关,S1按下时启动报警,S1放开时解除报警;一个绿色发光二极管V1和一个红色发光二极管V2模拟光报警,绿色V1亮,表示正常状态,红色V2闪烁表示报警;采用蜂鸣器模拟声音报警,当报警启动时,蜂鸣器闹响。2、原理及实现LED灯光报警器电路系统采用51单片机P1端口的P1.0引脚控制蜂鸣器进行声音报警,P1.1和P1.2引脚控制发光二极管模拟的报警灯,P0口的P0.0引脚连接按键S1,硬件电路如图
所示。3、源程序参考LED灯光报警器的源程序如下。知识梳理与总结知识梳理与总结本项目系统地介绍了基于51单片机的流水灯控制系统设计,涵盖了硬件原理、软件编程及实际应用等多方面知识。硬件层面讲解单片机I/O端口用法,含P1口控制LED流水灯、P0口连接按键控制流水灯。还涉及独立式按键接口特点与应用,及蜂鸣器等外设连接控制。探讨C51语言核心概念,展示单片机程序设计。通过实例介绍主函数、延时函数、位运算等。介绍条件、循环语句应用及函数定义调用。设计过程注重理论与实践,通过任务引导学习。任务围绕核心知识点,强调规范性、可读性和可维护性。谢谢项目4人机交互密码锁的设计目录任务4-1静态数码管显示4.1数组的概念4.2认识LED数码管任务4-2动态数码管显示任务4-4矩阵键盘密码锁设计4.3LED数码管动态显示任务4-3LED大屏幕电子广告牌控制4.4点阵的初步认识4.5
单片机与矩阵键盘接口任务拓展:电子琴设计项目导读本项目引导学习者理解和掌握51单片机在显示和键盘接口技术的编程与硬件交互。内容涵盖静态数码管显示到LED点阵动画显示,抢答器和键盘接口设计。通过实践,提高单片机编程理解力和应用能力,增强解决实际电子问题的能力。任务包括:使用51单片机控制静态数码管显示数字“0”,学习特殊功能寄存器操作;通过LED大屏幕电子广告牌控制任务,探索单片机控制8×8LED点阵显示,理解动态显示原理,实践扫描显示技术。最终目标是使学习者独立设计电子显示方案,掌握键盘与LED显示结合应用。思维导图任务4-1静态数码管显示1、目的与要求利用51单片机显示“0”。操作寄存器,学习交互方法。编程实践,加深理解。实现稳定显示。程序简洁,易于维护。注意端口保护。2、原理及实现利用P2.2、P2.3、P2.4引脚作为数码管位选信号。定义smgduan数组存储0到F段码值。main函数中,设置位选信号为最低位显示,P0端口值为smgduan[0](显示“0”)。程序进入无限循环。硬件连接需确保公共端正确。根据数码管类型调整段码值。建议仿真软件或开发板实践编程和调试。3、源程序设计4、任务总结本任务通过实践学习51单片机控制数码管显示数字“0”的方法,加深了对单片机编程和硬件交互的理解。学习了数码管显示原理,通过控制位选信号选择显示位,并定义段码数组实现显示数字“0”。通过无限循环保持显示状态。在任务中,保护了单片机端口,使用合适变量和数据类型,提高了代码可读性和可移植性。了解了根据数码管类型调整段码值,并通过仿真软件或开发板调试。通过本任务,掌握了单片机控制数码管显示方法,提升了实践和解决问题能力,为后续学习和应用打下基础。4.1数组的概念数组是一组有序数据的集合,数组中每一个元素的类型相同,数组必须先定义后使用。常用数组有一维数组、二维数组和字符数组。4.1.1一维数组数组定义及应用缩写结果:数组是相同类型数据集合,用于数码管、LED点阵显示、传感器补偿等,需先定义后使用,元素同类型、同名、不同下标。1、一维数组的定义一维数组的定义为:<存储类型>类型说明符
数组名[常量表达式];其中,“存储类型”包括static、extern和auto,可默认,默认时与变量处理格式相同。2、一维数组的引用C51中,使用数值型数组时,只能逐个应用数组元素而不能一次引用整个数组。数组元素的引用是通过数组名和下标来实现的,一维数组中数组元素的引用形式是:数组名[下标表达式]3、一维数组的初始化一维数组的初始化可通过以下几种形式。(1)对数组全部元素初始化。(2)可以只给一部分元素赋值。(3)如果想使一个数组中全部元素值为“0”(4)在对全部数组元素赋初值时,可以不指定数组长度。一维数据元素存放图4.1.2二维数组1、二维数组的定义定义二维数组的一般形式为类型说明符
数组名[常量表达式1][常量表达式2];2、二维数组的引用二维数组元素的引用与一维数组元素的引用相似,其形式为:数组名[下标表达式1][下标表达式2]3、二维数组的初始化(1)在定义二维数组时,分行对各元素赋初值,第一个{}内元素赋给第一行的元素,第二个{}内元素赋给第二行的元素以此类推。(2)可以将所有的值写在一个大括号内,按数组在内存中排列的顺序对各元素赋值。(3)可以只对部分元素赋值,其余元素自动为0。(4)如果对全部元素都赋值,则定义数组时第一维长度可以省略。二维数组元素存放图4.1.3字符数组用来存放字符数据的数组称为字符数组。字符数组中的每个元素就是一个字符。既具有普通数组的一般性质,又具有某些特殊性质。1、字符数组的定义与初始化(1)字符数组的定义字符数组的定义与数值型数组的定义相类似,它的一般形式为:(2)字符数组的初始化方法一:通过为每个数组元素指定初值字符来实现。方法二:用字符串常量对字符数组初始化。3、字符串和字符串结束标志字符串是字符序列,存于字符数组,以'\0'为结束标志,系统自动加在字符串常量末尾。例如:4.2认识LED数码管4.2.1LED数码管结构及字形代码通常使用的LED数码管是7段LED,它是由7个LED组成的。这7个LEDa~g呈“日”字形排列,其结构及连接如图所示。LED数码管中LED有两种接法:①所有LED的阳极连接在一起,这种连接方法称为共阳极接法;②所有LED的阴极连接在一起,这种连接方法称为共阴极接法。LED数码管的LED亮暗组合实质上就是不同电平的组合,也就是为LED数码管提供不同的代码,这些代码称为字形代码,即段码。7段LED加上1个小数点dp共计8段,字形代码与这8段的关系如下:字形代码与十六进制数的对应关系见表,从表中可以看出,共阴极接法与共阳极接法的字形代码互为补数。4.2.2LED数码管的显示方式单片机系统中,需用多个LED数码管,由n根位选线和8×n根段选线连接。显示方式不同,连接方法不同。段选线控字符,位选线控显示。连接见图。LED数码管有静态显示和动态显示两种方式。静态显示就是当LED数码管要显示某一个字符时,相应的LED恒定地导通或截止。动态显示就是逐位地轮流点亮各位数码管,对于每个LED数码管来说,每隔一段时间点亮一次,即CPU需要时刻对数码管进行刷新,显示数据有闪烁感,占用CPU时间较多。4.2.3LED数码管的识别与检测方法LED数码管的识别与检测可通过干电池检测或万用表检测两种方法进行。1、万用表检测法以指针式万用表为例,拨至“R×10k”电阻挡进行检测。测量共阴极数码管时,红表笔接“-”端,黑表笔接各段码电极;共阳极数码管则相反。指针偏转表示LED导通,否则可能损坏。此法也可快速检测不明结构的数码管。2、干电池检测法用两节1.5V干电池串联成3V电压源,并串联限流电阻,防止电流过大。负极接公共阴极,正极依次接触各段码电极。此法可快速检测断笔或连笔,并比较发光强弱。共阳极数码管检测时,只需对调电池极性。短接数码管各段码电极,接通3V电压,使全段码发光。质量好的数码管发光均匀,无残缺或变色。任务4-2动态数码管显示任务4-2动态数码管显示1、目的利用单片机控制6个共阳极数码管,动态显示“001225”。2、电路设计采用动态显示方式,电路连接如图,段选控制端并联,用P1口控制,经74LS245驱动;位选端由P2口控制,经74LS04驱动。3、程序设计动态显示方式是按位顺序点亮数码管,依次送出位选码和字型编码。例如,P2=0xfe点亮第一个数码管,P1=0x90显示字符9,依次显示第2到第6个数码管。表列出数据。由表可以看出,位选码有一定的变化规律,依次左移一位,字型码没有规律,为此定义一个一维数组来存储这6个字符的字型码。6位数码管动态显示生日“001225”的程序如下。4、任务小结本任务采用单片机并行I/O端口P1口、P2口控制6个共阳极数码管显示,进一步训练应用单片机并行I/O端口的能力,熟练掌握数码管动态显示接口技术以及使用数组和循环程序结构进行程序设计与调试的能力。4.3LED数码管动态显示在多位LED显示时,为了简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个8位I/O口控制,形成段选线的多路复用。而各位的共阳极或共阴极分别由相应的I/O线控制,实现各位的分时选通。图所示为一个4位7段LED动态显示器电路原理图。其中段选线占用一个8位I/O口,而位选线占用一个4位I/O口。由于各位的段选线并联,段码的输出对各位来说都是相同的。任务4-3LED大屏幕电子广告牌控制1、目的和要求利用单片机控制一块8×8LED大屏幕点阵式电子广告牌,将一些特定的文字或图形以特定的方式显示出来。任务要求在8×8LED点阵广告牌上稳定显示“0”。2、原理及实现用单片机控制一块8×8LED大屏幕电子广告牌的硬件电路如图所示。3、源程序设计8×8LED点阵显示字符程序设计:选中行,送字型码到列端口,延时1ms,逐行扫描,8ms完成一遍,循环扫描实现稳定显示。在8×8点阵上稳定显示“0”的程序如下。4、任务总结该程序是一个针对8×8LED大屏幕电子广告牌的简单显示程序,用于稳定显示数字“0”。(1)头文件程序开头通过#include"reg51.h"包含了适用于51单片机的专用寄存器定义,这对于后续使用单片机的寄存器进行IO操作至关重要。(2)变量声明:
led[]数组存储了数字“0”在8×8LED点阵上的显示码。
w变量用于控制当前显示的LED行。
i用作循环计数。(3)主函数:
在main()函数中,程序使用了一个无限循环while(1)来确保数字“0”能够持续显示在LED点阵上。
在循环内部,首先初始化w为0x01,表示从第一行开始显示。
使用一个for循环遍历led[]数组,每次循环都会将当前行的LED数据送到P0口,同时将对应的行选择信号送到P1口。
~led[i]操作是为了反转LED的亮灭状态,因为在LED点阵中,通常使用低电平来点亮LED。
delay(100)用于控制每一行显示的持续时间,确保人们能够看清整个数字“0”。
w<<=1操作将w左移一位,以便在下一轮循环中选中下一行。(4)延时函数:delay(unsignedinti)函数用于实现软件延时。它通过执行一个空循环来达到延时的效果。延时的长度由参数i控制。该程序是一个基础的LED点阵显示程序,用于在8×8LED点阵上稳定显示数字“0”。4.4点阵的初步认识4.4点阵的初步认识点阵LED显示屏特点:灵活显示面积、高亮度、长寿命、数字化、实时性,应用广。LED点阵由64个LED小灯组成(8×8)。图为最小单元,图为内部结构图。4.4.1点阵的图形显示电子项目中,LED小灯可构建流水灯,数码管显示数字。点阵LED用途更复杂,展现图案。显示花样需先制小图形,数据需转换至程序,需取模软件。取模软件提取点阵图形数据,转二进制等格式,程序直接使用。软件网络广泛可得,操作简便。图示操作界面。鼠标点一下“新建图形”,根据板子上的点阵,把宽度和高度分别改成8,然后点确定,如图所示。点击左侧的“模拟动画”菜单,再点击“放大格点”选项,一直放大到最大,那就可以在的8×8的点阵图形中用鼠标填充黑点,就可以画图形了,如图所示。经过的一番精心设计,画出来一个心形图形,并且填充满,最终出现想要的效果图,如图所示。取模软件黑白与LED相反,需选“修改图像”里的“黑白反显图像”,再点“基本操作”里的“保存图像”保存图片,如图所示。保存文件只是为了再次使用或修改使方便方便,当然你也可以不保存。操作完了这一步后,点击“参数设置”菜单里的“其他选项”,如图所示。P0口控制行用“横向取模”,控制列选“纵向取模”。选“字节倒序”因左低位右高位。点“确定”,选“取模方式”,点“C51格式”,点阵区生成8字节数据即“模”,如图。4.4.2点阵的动画显示点阵的动画显示,说到底就是对多张图片分别进行取模,使用程序算法巧妙的切换图片,多张图片组合起来就成了一段动画了,所看到的动画片、游戏等等,它们的基本原理也都是这样的。1、点阵的纵向移动上一节学了如何在点阵上画一个❤形,有时候希望这些显示是动起来的,而不是静止的。对于点阵本身已经没有多少的知识点可以介绍了,主要就是编程算法来解决问题了。比如现在要让点阵显示一个I♥U的动画,首先要把这个图形用取模软件画出来看一下,如图所示。2、点阵的横向移动关于点阵LED的左右移动操作,我们有两种常见的解决方法。方法一、较为直观和简单,即将电路板侧放,使点阵LED的纵向成为移动的方向,从而通过纵向取模来实现左右移动的效果。然而,我们不应仅满足于技术的实现,更应拓宽视野,提升解决问题的思路。技术只是工具,我们在开发过程中应灵活运用这一工具,同时培养多角度的思维方式。方法二、利用二维数组来实现,算法基本上和上下移动相似。二维数组,前边提过一次,他的使用其实也没什么复杂的。它的声明方式是:
横向动画取模图片任务4-4矩阵键盘密码锁设计1、目的与要求通过对具有16个按键和1个数码管显示的密码锁设计,让读者掌握矩阵键盘的接口电路设计和控制程序设计方法。任务要求完成一位简易密码锁设计:输入一位密码(为0~9,A~F之间的字符),密码输入正确显示“P”并将锁打开;否则显示“E”,继续保持锁定状态。2、电路设计根据任务要求,用一位共阳极LED数码管作为显示器件,显示密码锁的状态信息,数码管采用静态连接方式,16个按键采用4×4矩阵键盘连接方式,P3.0连接一个发光二极管,其亮灭表示开锁或关锁状态,电路如图
所示。3、源程序设计密码锁的基本功能如下:16个按键,分别代表数字0、1、2……9和英文字符A~F;密码在程序中事先设定为“8”;系统上电时,数码管显示“-”,表示等待密码输入;密码输入正确时显示字符“P”约3s,并通过P3.0端口将锁打开;否则显示字符“E”约3s,继续保持锁定状态。4、任务总结通过密码锁的设计和制作,让读者理解矩阵键盘的应用,并初步了解矩阵键盘的程序设计方法,程序中的键盘扫描方法采用的是逐列扫描法,也可以采用行列反转法得到相同的结果。4.5单片机与矩阵键盘接口4.5.1键盘与消除键盘抖动1.键盘键盘是由一组规则排列的按键组成,一个按键实际上是一个开关元件,也就是说键盘是一组规则排列的开关。键盘是人机交互的重要组成部分,按连接形式一般分为独立式键盘与矩阵键盘。2.消除键盘抖动机械触点式键盘在按键操作时会产生触点抖动,抖动时间大约5~10ms。为避免误判,需消除抖动。少量按键时常用硬件消抖,如使用R-S触发器构成的消抖电路,可将抖动影响降至最低。
键盘抖动过程
硬件消抖动电路4.5.2独立键盘硬件结构如图
所示,独立键盘每一个按键的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新零售行业发展与创新策略研究报告
- 高效能源管理系统的设计与实施
- 物流运输员配送绩效表
- 文明礼仪教育班会:争做文明好少年小学主题班会课件
- 娱乐行业经纪人艺人管理与推广绩效衡量表
- 友谊之花绽放:友谊的力量小学主题班会课件
- 新闻记者内容产出与审核效率绩效评定表
- 化学工业绿色合成技术应用案例分析
- 个人财务危机的紧急预案
- 《跨境电子商务基础(AI+微课版)》 课件 项目六-店铺信息优化与跨境电商数据分析
- 2026年度济南水务集团有限公司招聘(118人)考试参考题库及答案详解
- 2026四川南充市属国有企业联合招聘37人笔试参考题库及答案详解
- 2026年医院纪委年度工作总结和工作计划(3篇)
- GB/T 32733-2026香荚兰
- 贵州医院行业分析报告
- 壶腹部肿物局部切除术后护理查房
- 医疗器械生产企业自查报告模板
- 工艺指标工艺卡片管理制度
- 增量配电网运营制度
- 2026重庆西部国际传播中心有限公司招聘2人备考题库(含答案详解)
- 科技奖励培训课件
评论
0/150
提交评论