版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目1
简易声光报警器设计目录任务1-1KeilC51软件的使用1.1认识单片机任务1-2LED发光二极管小灯1.2学习单片机的准备任务1-3
简易声光报警器设计任务拓展:两个LED发光二极管的闪烁控制项目导读单片机声光报警器设计入门项目聚焦简易声光报警器设计,用51单片机为核心。从KeilC51软件使用开始,学基本操作、工程建立、编写与调试,奠基单片机程序设计。再了解单片机内部及最小系统,明确电源、晶振、复位电路作用。设计LED闪烁系统,焊接硬件与下载程序,熟悉I/O口控制和延时编程。最后综合运用知识,完成声光报警器,实现定时声音与光报警,强化理解与实践能力,为后续开发积累经验。思维导图任务1-1
KeilC51软件的使用任务1-1
KeilC51软件的使用1、目的与要求在进行51单片机的开发工作时,KeilC51软件是一个非常重要的工具,开发人员学会操作使用它是相当必要的。接下来,你可以依据任务里指示的操作流程,逐步学习和掌握KeilC51软件的基础操作。2、操作步骤1)启动KeilC51软件
C51启动窗口
选择目标器件窗口
复制标准8051启动代码选择窗口2)建立工程文件
选择目标CPU
建立工程文件小知识已加载的STARTUP.A51文件,如图所示,建立工程后的主界面3)建立并添加源文件文本编缉窗口
源程序保存界面
添加源文件到组中
选择文件类型及添加源文件
加入文件4)配置工程属性配置工程属性
目标属性“Output”选项卡5)编译工程编译工程编译结果
输出信息
编译不成功输出信息3、任务小结使用KeilC51的基本步骤如图所示,图中虚线箭头指向的步骤可以改变顺序。经过以上步骤,在成功生成二进制或十六进制HEX目标文件后,还需要把文件加载到单片机中运行才能看到程序的执行结果。如果手边没有硬件下载工具,也可以直接采用软件进行仿真,KeilC51内建了一个仿真CPU可以模拟执行程序,参见任务2-3,也可以采用目前比较流行的电路仿真软件Proteus来进行仿真。1.1认识单片机1.1.1什么是单片机1、单片微型计算机单片微型计算机,亦称单片机,是将微型计算机的各种功能部件,如CPU、存储器、I/O接口电路、定时/计数器以及中断系统等2、单片机应用系统单片机应用系统是以单片机作为核心部件,搭配输入、输出、显示等外围接口电路以及控制程序,进而构成能够实现特定功能的实用系统。单片机内部基本结构
单片机应用系统的组成3、51系列单片机本书主要介绍51系列8位单片机,包括其硬件结构、工作原理及应用系统设计。MCS-51单片机是Intel公司生产的一系列内核兼容单片机的统称,包括8031、8051、8751等型号。8051单片机是该系列的典型代表。上世纪90年代,Intel公司将MCS-51核心技术授权给多家半导体器件公司,这些公司在生产单片机时采用MCS-51内核,并进行改进,这类单片机被称为“增强型51单片机”。51单片机是对所有兼容MCS-51指令系统单片机的统称,包括Intel的MCS-51系列和其他厂商生产的增强型8051单片机。尽管32位单片机已实用化,但8位单片机因性价比优势及增强型单片机在速度和功能上的提升,仍是单片机领域的主流机型。1.1.2单片机的内部结构8051作为MCS-51系列单片机中早期的典型产品,其内部结构如图所示。8051内部各部分的功能如表所示。任务1-2LED发光二极管小灯任务1-2LED发光二极管小灯1、目的与要求本项目旨在制作一个由单片机控制的LED发光二极管闪烁系统,借此深入了解单片机以及单片机最小系统究竟是什么,同时掌握单片机应用系统的制作流程。具体操作步骤为:先在万能板上完成单片机控制LED系统电路的焊接工作,之后将给定的二进制代码程序下载到单片机当中,最终实现发光二极管呈现出闪烁的效果。2、电路及器件单片机控制LED硬件电路如图所示,包括单片机、复位电路、时钟电路、电源电路及一个发光二极管显示控制电路。单片机控制LED系统电路的器件清单如表所示。对电路中的主要器件介绍如下:(1)单片机芯片实物如图所示。(2)图展示了发光二极管的实物图。(3)弹性按键实物如图所示单片机实物发光二极管实物
弹性按键3、硬件电路板制作在万能板上按电路图焊接元器件,完成电路板制作,图是焊接好的电路板实物照片。4、源程序设计图中看到的只是单片机应用系统的硬件电路,实际上在单片机芯片的内部存储器中必须烧录了预先编写好的控制程序,才能看到发光二极管的闪烁效果。给出发光二极管闪烁控制系统的源程序如下。
单片机控制一个LED闪烁系统电路板5、程序下载将二进制文件下载到单片机中的方法有很多种,例如可以选用具有在系统编程ISP功能的单片机芯片,例如AT89S51、宏晶单片机等。宏晶单片机不仅具有ISP下载功能,还具有串口下载功能,使用起来非常方便。6、任务小结通过一个LED发光二极管闪烁控制系统的制作过程,让读者对单片机、单片机最小系统和单片机应用系统的概念有初步了解和直观认识。与此同时,读者还了解了单片机应用系统的开发过程。单片机应用系统的开发过程为:设计电路图→制作电路板→程序设计→硬软件联调(仿真联调)→程序下载→产品测试。1.2学习单片机的准备1.2学习单片机的准备单片机开发流程含硬件设计、控制程序设计及联调。在线仿真成本高;ISP下载板经济但缺仿真;软件仿真成本低但缺实践。各有优劣,按需选。初学者宜选ISP结合软件仿真,降成本且加深理解。仿真软件可辅助掌握流程。1.2.1单片机开发流程与工具单片机应用系统的开发流程及所需工具如图
所示。1.2.1单片机开发流程与工具(1)在任务1-2中,除了硬软件联调外,以上每个开发步骤都有所体现。(2)在开发流程中,前两项硬件设计和第3项控制程序设计可以并行开发,同时进行。(3)硬软件联调是单片机应用系统开发过程的重要阶段,由于单片机硬件和控制程序的支持能力有限,一般自身无调试能力,因此必须配备一定的开发工具,借助于开发工具来排除应用系统样机中的硬件故障和程序错误,最后生成目标程序。(4)对于个人学习比较方便的方法是:采用价格低廉的带有ISP下载功能的单片机实验板,或者直接采用软件进行辅助仿真,常用的仿真软件有KeilC51的仿真器采Simulator以及Proteus仿真软件等,把二者结合起来还可以进行软件调试。d1.2.2单片机的仿真学习与ISP下载实验板1、在线仿真学习环境单片机实验室配典型在线仿真环境,含计算机、通信电缆、仿真器等。调试成功后,编程器下载程序至单片机,脱机调试,如图所示。2、ISP下载实验板流行单片机学习工具是ISP下载功能的实验板,用AT89S51或STC单片机作核心,提供LED、数码管、液晶等显示接口,按键、蜂鸣器、传感器、电机接口等,配实验指导书、源程序、学习视频等资源。实例见图。3、软件仿真学习环境通过软件仿真学习单片机,无需任何硬件资源,可以节约成本,还可以进行实时的调试和仿真。Proteus是一款仿真软件,允许在原理图虚拟原型上编程和代码级调试。它能实时模拟输入输出,并配合虚拟测量工具进行观察。通过安装联调插件vdmagdi.exe,Proteus可与KeilC51软件联调,实现在线仿真器式的调试。示例见图。任务1-3简易声光报警器设计任务1-3简易声光报警器设计1、目的与要求通过设计制作一个简易声光报警器,熟悉单片机的I/O口控制和延时编程。要求实现以下功能:
使用单片机控制声音报警和光报警。
P1.0接声音报警装置(蜂鸣器),P1.1接光报警装置(LED灯)。
报警器每隔5秒触发一次,每次报警持续2秒,声音报警和光报警同时进行。2、电路设计单片机的P1.0引脚连接蜂鸣器,用于声音报警。单片机的P1.1引脚连接一个LED灯,用于光报警。报警器的电路参考图进行设计。3、源程序设计使用软件延时实现5秒的定时和2秒的报警持续时间。报警器的控制程序如下:4、任务总结本程序是一个简易声光报警器设计,实现了每隔5秒触发一次报警,每次报警持续2秒的功能。程序使用了软件延时来实现定时功能,并通过控制P1.0(蜂鸣器)和P1.1(LED灯)的开关,实现声音报警和光报警。注意:延时函数的参数(如50000和20000)需要根据实际晶振频率进行调整。如果使用的是12MHz晶振,上述参数可以满足要求。在实际硬件电路中,需要确保蜂鸣器和LED灯的连接正确,并为LED灯添加合适的限流电阻。任务拓展:两个LED发光二极管的闪烁控制任务拓展:两个LED发光二极管的闪烁控制1、目的与要求通过设计制作一个简单的LED闪烁控制程序,熟悉单片机的I/O口控制和延时编程。要求实现以下功能:
使用单片机控制两个LED发光二极管的闪烁。
P1.0连接第一个LED(LED1),P1.1连接第二个LED(LED2)。
LED1和LED2交替闪烁,每个LED亮1秒,灭1秒。
程序运行时,两个LED依次闪烁,形成交替闪烁的效果。2、电路设计
单片机的P1.0引脚连接第一个LED(LED1)。
单片机的P1.1引脚连接第二个LED(LED2)。
每个LED需要通过一个限流电阻连接到地(GND)。3、源程序参考使用软件延时实现1秒的定时,控制两个LED的闪烁。程序如下:知识梳理与总结
本项目设计简易声光报警器,涵盖单片机开发核心知识与技能。软件层面,学习KeilC51开发环境操作,掌握编译生成HEX文件流程。硬件领域,掌握单片机最小系统构成,理解I/O口控制原理,实现声光报警功能。实践方面,强化知识,提升动手与问题解决能力,积累复杂项目开发经验。总之,本项目提升单片机应用开发素养与技能。谢谢项目2模拟转向灯设计目录任务2-1蜂鸣器发声2.1单片机的引脚2.2单片机最小系统电路2.351单片机的存储器结构任务2-2模拟转向灯2.4单片机并行I/O端口任务2-3
发光二极管闪烁任务拓展
设计8路LED流水灯电路项目导读模拟转向灯系统设计探讨单片机控制功能及实现方法。涵盖硬件设计、软件编写、系统调试。学习单片机I/O端口控制、电子电路知识。项目任务设计递进,注重理论与实践。培养基本操作技能与解决问题能力。提供源代码及注释,为后续开发打基础。思维导图任务2-1蜂鸣器发声任务2-1蜂鸣器发声1、目的与要求通过单片机控制蜂鸣器发声系统的制作,了解单片机并行I/O端口的输出控制作用以及蜂鸣器发声控制方法。任务要求采用单片机控制蜂鸣器发出鸣叫声。2、电路及器件单片机控制蜂鸣器硬件电路如图所示,包括单片机、复位电路、时钟电路、电源电路及用P1.0引脚控制的蜂鸣器电路。蜂鸣器是电子讯响器,用于计算机、打印机等电子产品中。分压电式和电磁式,发声需电流驱动。蜂鸣器从结构上分为有源和无源两种51单片机控制蜂鸣器电路
蜂鸣器3、源程序设计4、任务小结制作单片机控制蜂鸣器发声系统,了解单片机并行I/O端口输出控制及蜂鸣器控制方法,训练输出驱动应用能力。2.1单片机的引脚2.1单片机的引脚51系列单片机在嵌入式应用中,有的系统需要扩展外围芯片(存储器或I/O接口),这就需要三总线(数据线、地址线和控制线)引脚,这类总线可扩展的单片机的引脚通常在40个以上。下面对51系列单片机进行介绍。AT89S51单片机有40~44条功能引脚,芯片的引脚数目也不同。它有如下三种不同的封装形式。
PDIP
PLCC
TQFP各种封装形式及其引脚如图所示。2.1.1
芯片封装2.1.2芯片引脚及功能AT89S52与其他PDIP封装的51单片机芯片一样,具有40个引脚。下面介绍各引脚的功能:1.供电引脚供电引脚接入AT89S51的工作电源。
VCC:电源正极,一般为+5V。
GND:电源地。2.I/O引脚顾名思义,I/O引脚就是输入/输出引脚。P0:P0口是一个8位漏极开路的双向I/O口。P1:P1口是一个具有内部上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。P2:P2口是一个具有内部上拉电阻的8位双向IO口,P2输出缓冲器能驱动4个TTL逻辑电平。P3:P3口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。3.控制引脚控制引脚包括RST、ALE、
、
,此类引脚提供控制信号,有些引脚具有复用功能。RST:复位输入。
晶振工作时,RST脚持续两个机器周期,高电平将使单片机复位。
:
地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。
:外部程序存储器选通信号。
:访问外部程序存储器控制信号。4.外接晶振引脚外接晶振引脚与片内的反相放大器构成一个振荡器,它提供了单片机的时钟控制信号,也可采用外部晶体振荡器。
XTAL1:接外部晶体的一个引脚,在单片机内部,它是一个反相放大器的输入端。若采用外部振荡器,该引脚接收振荡器的信号,即把此信号直接接到内部时钟发生器的输入端。
XTAL2:接外部晶体的另一端,在单片机内部接到反相放大器的输出端,当采用外接晶体振荡器时,此引脚可以不接。2.2单片机最小系统电路2.2单片机最小系统电路单片机最小系统含单片机及电源、时钟、复位部件,保证单片机正常运行。可将其作为应用系统核心,扩展存储器、A/D等。51单片机最小系统的功能主要如下:
能够运行用户程序。
用户可以复位单片机。
具有相对强大的外部扩展功能。最小系统的结构如图所示。单片机最小系统电路原理图如图所示2.2.1单片机时钟电路时钟电路控制单片机工作节奏。时序电路发脉冲,控制CPU执行指令时间顺序。时钟模块产生51单片机工作时钟信号。时钟源可用内部振荡器或外部时钟源。51单片机的时钟源电路2.2.2时序定时单位时序是用定时单位来说明的。51单片机的时序定时单位共有4个,从小到大依次是拍节、状态、机器周期和指令周期。下面分别加以说明。1.拍节与状态把振荡脉冲的周期定义为拍节(用P表示)。2.机器周期51单片机采用定时控制方式,因此它有固定的机器周期。3.指令周期指令周期是最大的时序定时单位,执行一条指令所需要的时间称为指令周期。它一般由若干个机器周期组成。2.2.3指令的执行时序单片机执行任何一条指令时都可以分为取指令阶段和执行指令阶段,时序如图所示。2.351单片机的存储器结构2.351单片机的存储器结构本节以8051为代表来说明51单片机的存储器结构。8051存储器主要有4个物理存储空间,即片内数据存储器(IDATA区)、片外数据存储器(XDATA区)、片内程序存储器和片外程序存储器(程序存储器合称为CODE区)。2.3.1片内数据存储器8051的内部RAM共有256个单元,通常把这256个单元按其功能划分为两部分:低128单元(单元地址0x00~0x7F)和高128单元(单元地址0x80~OxFF)。1、内部数据存储器低128单元(DATA区)片内RAM的低128个单元用于存放程序执行过程中的各种变量和临时数据,称为DATA区。表给出了低128单元的配置情况。1)工作寄存器区8051有4组共32个工作寄存器,每组8个(R0~R7),存放操作数及中间结果。寄存器组占内部RAM的0x00~0x1F。CPU任一时刻只能使用一组,称为当前工作寄存器组,由PSW中RS1和RSO位决定。2)位寻址区(BDATA区)内部RAM的0x20~0x2F单元,可字节操作也可位操作,共16个单元,128位,位地址0x00-0x7F。3)用户数据缓冲区内部RAM低128单元中,除工作寄存器区(32个单元)和位寻址区(16个单元)外,剩80个单元(0x30~0x7F),供用户使用,无限制。2、内部数据存储器高128单元内部RAM的高128单元地址为0x80~0xFF,是供给专用寄存器SFR(SpecialFunctionRegister,也称为特殊功能寄存器)使用的。表给出了专用寄存器地址。2.3.2片外数据存储器8051单片机的片外数据存储器可扩充至64KB,称为XDATA区,主要用于存储外部数据。当处理大量数据时,XDATA区至关重要。XDATA区内的分页寻址操作区域称为PDATA区,它通过分页寻址方式有效管理存储空间,提高8051单片机的存储访问效率。访问片外数据存储器需使用MOVX等指令,这些指令支持从外部RAM读写数据,实现有效操作。使用片外数据存储器需注意限制和条件,如默认不可访问需特殊设置,以及考虑地址范围和访问速度确保数据正确传输。片外数据存储器是8051单片机的重要组成部分,合理配置和使用可提升数据处理能力和效率。2.3.3程序存储器51单片机的程序存储器用来存放编好的程序和程序执行过程中不会改变的原始数据。程序存储器结构如图所示。任务2-2模拟转向灯1、目的与要求信号灯是传递汽车行驶状况的工具。一般包括转向灯、刹车灯等。任务要求用单片机制作模拟汽车转向灯控制系统,训练I/O端口位操作。2、电路设计单片机模拟汽车左右转向灯控制系统电路如图所示。3、源程序设计汽车转向灯显示状态如表所示。P3.0和P3.1引脚的电平状态与驾驶员发出命令的对应关系如表所示。模拟汽车转向灯控制系统的源程序如下。4、任务小结本任务模拟人们常见的汽车转向灯显示控制功能,用51单片机的P3口接收驾驶员发出的左转、右转命令(拨动开关S0、S1到位置2上),控制连接到P1口上的两个发光二极管闪烁,指示汽车的左、右转向。2.4单片机并行I/O端口2.4单片机并行I/O端口8051单片机有P0、P1、P2、P3四个I/O端口,均可按位或字节操作。P0口输出需外接上拉电阻,P0和P2口可扩展为地址总线,P3口具多种第二功能。输入时需区分读引脚和端口,输出时可直接输出高低电平。合理利用各端口特性,实现丰富功能和控制需求。。2.4.1并行I/O端口电路结构51单片机典型芯片8051共有4个8位并行I/O端口,分别用P0、P1、P2、P3表示。每个I/O端口既可以按位操作使用单个引脚,也可以按字节操作使用8个引脚。单片机的4个I/O端口可以作为一般的I/O端口使用,在结构和特性上基本相同,又各具特点。4个并行I/O端口的口线逻辑电路如图2-10所示P0口位电路结构
P1口位电路结构P2口位电路结构P3口位电路结构2.4.2作为输入端口使用4个并行I/O端口P0~P3作为输入端口使用时,应区分读引脚和读端口。所谓读引脚,就是读芯片引脚的状态,把端口引脚上的数据从缓冲器通过内部总线读进来。读引脚时,必须先向电路中的锁存器写入“1”。读端口是指读锁存器的状态。读端口是为了适应对I/O端口进行“读—修改-写”操作语句的需要。例如,下面的C51语句:P0=P0&0xf0; //将P0口的低4位引脚清零输出执行该语句时,涉及三个步骤:“读-修改-写”。首先,读取P0口锁存器的数据;接着,与0xf0执行“逻辑与”操作;最后,清除数据的低4位并将结果写回P0口。读取锁存器而非直接读引脚是为了防止潜在错误。任务2-2中,利用单片机的P3.0和P3.1引脚控制拨动开关,此时,P3.0和P3.1作为输入端口使用。当开关S。拨到1位置时,P3.0引脚上为高电平,通过读引脚,就可以读出该引脚上的高电平“1”,从而得知开关的具体位置。2.4.3作为输出端口使用P0口作为输出端口使用时,输出电路是漏极开路电路,必须外接上拉电阻(一般为4.7kΩ或10kΩ)才能有高电平输出。P1、P2和P3口作为输出端口使用时,无须外接上拉电阻。任务1-2中利用单片机的P1.0控制发光二极管的亮灭,任务2-1中利用P1.0控制蜂鸣器的发声,此时,P1.0都是作为输出端口使用。通过给P1.0引脚输出0或1,从而达到在P1.0引脚上输出低电平或高电平的目的。输出时,可以用位操作,也可以用字节操作。例如,下面操作就是采用位操作。sbitP1_0=P1^0; //定义P1.0引脚位名称为P1_0P1_0=0; //在P1.0引脚输出低电平P1_0=1; //在P1.0引脚输出高电平采用字节操作时,直接给整个I/O端口的8个引脚赋值,例如:P1=0x01; //P1口的P1.0引脚为高电平,其余7个引脚均为低电平注意:无论作为输入端口还是输出端口,I/O端口采用字节操作时,第七位为高位,第零位为低位。2.4.4I/O端口的第二功能在进行单片机系统扩展时,P0口作为单片机系统的低8位地址/数据线使用,一般称它为地址/数据分时复用引脚。P2口作为单片机系统的高8位地址,与P0口的低8位地址线共同组成16位地址总线。P3口的8个引脚都具有第二功能,具体参见2.1节中的表2-2。作为第二功能使用的端口线,不能同时当做通用I/O端口使用,但其他未被使用的端口线仍可作为通用I/O端口使用。任务2-3发光二极管闪烁1、目的与要求用于控制连接到P1.0端口的发光二极管闪烁。程序使用位操作来单独控制P1.0引脚的状态,实现发光二极管的闪烁效果。2、原理及实现此程序的原理和实现是基于51单片机的I/O端口控制以及简单的延时函数。I/O端口控制:51单片机具有多个I/O端口,如P0、P1、P2、P3等,每个端口都有8个引脚,可以单独控制每个引脚的状态(高电平或低电平)。延时函数:由于单片机的执行速度很快,直接控制I/O端口会导致LED几乎瞬间闪烁,人眼无法分辨。因此,需要加入延时函数来控制LED的亮灭时间。定义和初始化:首先,我们包含了reg51.h头文件,它包含了51单片机特殊功能寄存器的定义。然后,我们定义了一个宏LED来表示P1.0引脚,这样在后续代码中可以直接使用LED而不是P1^0。主循环:main函数中的while(1)是一个无限循环,保证程序会一直运行。在循环内部,我们首先设置LED=0,即将P1.0引脚设置为低电平。3、源程序设计4.任务小结代码开始包含reg51.h头文件,定义了宏LED对应P1.0引脚。main函数中,通过无限循环执行LED的点亮和熄灭,每次操作后延时500毫秒,实现LED闪烁。delay函数通过嵌套for循环实现延时,但延时不精确,依赖于时钟频率和编译器优化。实际应用中,建议使用定时器中断等更精确方法。确保硬件连接正确,LED阳极接P1.0引脚,并加限流电阻。若LED为共阴极接法,需反转点亮和熄灭操作。任务拓展
设计8路LED流水灯电路1.设计目的与要求通过设计一个8路LED流水灯电路,学习单片机对LED的控制方法,掌握单片机I/O口的使用以及简单的程序设计思路。要求设计一个电路,能够控制8个LED灯按照一定的顺序依次点亮和熄灭,形成流水灯效果。2.电路设计采用单片机P0端口的P0.0-P0.7分别连接8个LED灯,通过电阻限流保护LED灯。电路设计简单,只需将单片机的I/O口与LED灯相连,通过控制I/O口的电平来控制LED的亮灭。8个LED的核心电路图,如图所示。3.源程序参考采用循环移位的方法实现流水灯效果。首先将P0口初始化为全灭状态,然后在循环中将1或0依次左移或右移,控制LED灯的点亮和熄灭。知识梳理与总结一、硬件知识1.单片机最小系统:包括电源、时钟、复位电路,是单片机运行基础。时钟电路为单片机提供稳定的时钟信号,决定其工作频率;复位电路用于初始化单片机,确保其从固定状态开始运行。2.蜂鸣器原理:有源蜂鸣器通电即响,无源蜂鸣器需方波驱动。通过单片机I/O口输出合适频率方波,可控制蜂鸣器发声,改变频率能调整音调。3.LED控制电路:单片机I/O口电平控制LED亮灭,高电平点亮(共阳极),低电平熄灭(共阴极)。合理设计电路与程序,能让LED实现闪烁、流水灯等效果。二、软件知识1.C语言编程:掌握基本语法、函数定义与调用。如延时函数通过空循环消耗时间,实现程序延时;主函数是程序入口,用无限循环持续运行控制逻辑。2.I/O端口操作:学会配置、使用单片机I/O口。位操作可单独控制引脚电平,字节操作能批量设置端口多个引脚状态,满足不同控制需求。3.程序流程设计:依据任务需求设计合理流程。如模拟转向灯需先读取开关状态,再控制LED显示;流水灯用循环移位实现点亮顺序控制。三、综合应用1.硬件与软件协同:硬件搭建是软件运行载体,软件编程实现硬件功能控制。2.问题解决能力:在项目中会遇硬件连接错误、程序逻辑漏洞等问题。谢谢项目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用途更复杂,展现图案。显示花样需先制小图形,数据需转换至程序,需取模软件。取模软件提取点阵图形数据,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年德阳市旌阳区法检系统书记员招聘笔试参考试题及答案详解
- 2026年宿迁市宿豫区法检系统书记员招聘笔试备考题库及答案详解
- 2026年常德市武陵区法检系统书记员招聘笔试备考试题及答案详解
- 2026年苏州市平江区法检系统书记员招聘笔试备考试题及答案详解
- 2026单招冶金面试题及答案解析
- 2026单职招生面试题及答案
- 半导体运输设备维保工作手册
- 临床诊疗流程与病历书写规范手册
- 宁夏非公有制企业融资供需情况及投资评估规划分析研究报告
- 茶叶贸易防伪溯源管理工作手册
- 危险化学品目录(2025版)(精简版)
- DB52∕T 1715.1-2023 电动汽车充电基础设施规范第1部分:规划
- 解读慢性阻塞性肺病(GOLD)指南(2026)更新要点课件
- 光伏电站运行维护规程
- THIS001-2022红外热电堆传感器
- 外墙水包砂质保合同范本
- 肢体创伤后水肿管理指南解读
- 招标代理业务管理规范与操作指南
- 旅游直播培训课件
- T/CAPA 3-2021毛发移植规范
- 急诊治疗过程中的医患沟通技巧
评论
0/150
提交评论