




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汽车单片机技术学习任务1
单片机的认知项目1
汽车单片机基础知识认知【任务描述】
汽车单片机根据驾驶人的操作和当前的整车和零部件工作状况,在保证安全和动力性的前提下,选择尽可能优化的工作模式和能量分配比例。那单片机是什么样子?又是如何工作的呢?下面请同学们通过学习单片机的知识,来掌握单片机的概念、种类和应用吧!【学习目标】1.能够区别单片机于其他模块。2.能够识别单片机的型号。项目1
汽车单片机基础知识认知1.单片机介绍
单片机诞生于20世纪70年代末,它是指一个集成在一块芯片上的完整计算机系统。单片机具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通信接口、定时器,实时时钟等外围设备。
单片机又称单片微控制器,如图1-1,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括地讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。
图1-1单片机项目1
汽车单片机基础知识认知2.典型的单片机
(1)51系列单片机。51系列单片机最早由Intel公司推出,主要有8031系列,8051系列。后来Atmel公司以8051的内核为基础推出了AT89系列单片机。它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场,如图1-2。
图1-2C51系列单片机
(2)ARM&AVRARM&AVR是一种功能较强的芯片,处理能力更强。但无法在没有周边器件的情况下单独完成既定功能AVR单片机也是Atmel公司的产品,最早的就是AT90系列单片机,现在很多AT90单片机都转型为Atmega系列和AtTIny系列,AVR单片机最大的特点是精简指令型单片机,执行速度,在相同的振荡频率下是8位MCU中最快的一种单片机,如图1-3。图1-3ARM系列单片机项目1
汽车单片机基础知识认知
(3)ArduinoArduino是单片机二次开发的产物。以做项目来说,普通单片机只是散件,硬件的设计和软件设计都得你自己来。而且Arduino是半成品,你只要把相应的模块组合在一起,再写一写甚至直接复制别人程序就能行了。拿做电脑来比喻的话,你拿单片机做项目就像用电子元件先做出来显示器、主板、内存条、显卡、硬盘等,再把它们组装成一台电脑。用Arduino做项目就像直接把别人做好的主板硬盘显卡组装成电脑。Arduino的好处就是开发简单,如图1-4。图1-4Arduino系列单片机项目1
汽车单片机基础知识认知3.单片机的应用
单片机的使用领域已十分广泛几乎很难找到哪个领域没有单片机的踪迹,在智能仪表、实时工控、通信设备、导航系统、家用电器等。此外,单片机在工商,金融,科研、教育,国防航空航天等领域有着十分广泛的用途。
(1)在智能仪器仪表中的应用单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。
(2)在工业控制中的应用用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化芯片管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
(3)在家用电器中的应用现在的家用电器基本上都采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子称量设备,五花八门,无所不在。项目1
汽车单片机基础知识认知
(4)在计算机网络和通信领域中的应用现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。
(5)在医用设备领域中的应用单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
(6)在各种大型电器中的模块化应用某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中(有别于磁带机的原理),就需要复杂的类似于计算机的原理。如:音乐信号以数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。
(7)在汽车设备领域中的应用单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于CAN总线的汽车发动机智能电子控制器,GPS导航系统,ABS防抱死系统,制动系统等等。项目1
汽车单片机基础知识认知【任务工单页】任务实施:单片机的基础认知1.单片机又称________________,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。2.51系列单片机最早有Intel公司推出,主要有8031系列,________系列。3.AVR单片机最大的特点是_____________单片机,执行速度,在相同的振荡频率下是8位MCU中最快的一种单片机。4.单片机具有体积小、___________、控制功能强、扩展灵活、__________和使用方便等优点。项目1
汽车单片机基础知识认知
学习任务2单片机的硬件基础认知【任务描述】
以ArduinoUNO单片机为例,从布局、技术规格、处理器、存储空间及端口等介绍单片机的硬件组成,下面请同学们通过学习单片机的概念、种类,了解单片机的实际应用。【学习目标】
1.能够识别单片机的硬件。2.能够识读单片机各引脚定义。1.Arduino介绍Arduino是一种开源的微控制器平台,它包括了一个硬件部分(即Arduino开发板)和一个软件部分(即ArduinoIDE),也就是单片机的开源硬件和软件生态系统。Arduino已经将晶振、电源、接口电路等硬件集成到单个开发板上,用户只需要连接到电脑就可以开始编程和测试。Arduino使用一种基于C/C++的编程语言,它提供了许多简化的函数和库,使得编程更为简洁易懂。Arduino适合于教学、快速原型制作、个人项目和艺术设计等场合,特别是对于初学者和非专业者,Arduino是一个理想的选择。项目1
汽车单片机基础知识认知项目1
汽车单片机基础知识认知2.Arduino的硬件结构
(1)Arduino的外观图Arduino的外观图如图1-5所示。
(2)Arduino的结构组成Arduino主要由处理器、电源接口、输入端口等组成,如图1-6所示。其技术规格见表1-1。图1-5Arduino的外观图图1-6Arduino的结构组成项目1
汽车单片机基础知识认知表1-1Arduino的技术规格项目1
汽车单片机基础知识认知3.Arduino部件介绍
(1)Arduino的处理器种类和作用。处理器ATMEGA16U2的作用是负责将上位机通过USB传输过来的程序写入ATmega328P中,相当于USB转TTL串口的芯片;但其性能可能不太稳定,有可能出现掉固件(固件:芯片能执行的代码);有很多种专业级别的USB转TTL串口的芯片,比如国外的FT232,CP2102,PL2303,国内最好的CH340、CH341。处理器ATmega328P的作用是板子的核心主控(MCU),负责程序的存储以及运行,ArduinoIDE编程的代码最终会烧写入ATMEGA328P中的ROM中。
(2)ATmega328P的详解。Arduino其实是一块AVR的开发板,其体系结构为精简指令集计算机(RISC)。AVR芯片内部都是一片IC(集成电路),外面再用塑料壳包起来,用极细的线从IC的边缘连接到封装的脚上,ATmega328P采用的封装方式为DIP封装(双列直插)。项目1
汽车单片机基础知识认知
(3)单片机比较常用的封装方式。单片机比较常用的封装方式是DIP封装(DualIn-linePackage),也叫双列直插式封装技术,指采用双列直插形式封装的集成电路芯片,DIP封装如图1-7所示。DIP封装的特点:①绝大多数中小规模集成电路均采用这种封装形式,其引脚数一般不超过100。②DIP封装的CPU芯片有两排引脚,需要插入到具有DIP结构的芯片插座上。当然,也可以直接插在有相同焊孔数和几何排列的电路板上进行焊接;DIP封装的芯片在从芯片插座上插拔时应特别小心,以免损坏管脚。DIP封装结构形式:DIP封装结构形式有多层陶瓷双列直插式DIP,单层陶瓷双列直插式DIP,引线框架式DIP(含玻璃陶瓷封接式,塑料包封结构式,陶瓷低熔玻璃封装式)等;DIP封装的8086处理器DIP封装具有以下特点:适合在项目1
汽车单片机基础知识认知图1-7DIP封装图1-8DIP封装内部结构PCB(印刷电路板)上穿孔焊接,操作方便。芯片面积与封装面积之间的比值较大,故体积也较大;最早的4004.8008.8086.8088等CPU都采用了DIP封装,通过其上的两排引脚可插到主板上的插槽或焊接在主板上。DIP封装内部结构如图1-8所示。项目1
汽车单片机基础知识认知
(4)管脚定义。Atmega芯片内部有两个独立的电源系统:数字电源(标示为:VCC或者VCC)和模拟电源(标示为:AVCC或者AVCC),VCC和AVCC应该同时接到相同的电压上;即使用不到任何模拟电路功能,AVCC的电源管脚必须接上。两个电源管脚是分开的,当需要低噪声或者高精度的模拟读数时,就可以给模拟部分加上额外的电源滤波,提高精度。ATmega328的28脚封装有1个VCC脚、1个AVCC脚和2个GND脚;32脚封装有2个VCC脚、1个AVCC脚和3个GND脚;100脚封装有4个VCC脚、1个AVCC脚和5个GND脚。ATmega328管脚编号如图1-9所示。AVR单片机系列是基于低功效的CMOS技术,其MOS管中没有集电体、发射极或基极,而是有漏极、源极和栅极,CMOS器件的正确电源和地的术语描述为VDD和V。
(5)模拟参考(AREF)电压。AREF电压引脚有几种不同的用法,它连在芯片内部模数转换电路(ADC)外围设备的参考输入端。ATmega328只支持单端ADC转换,而ATmega2560可以做两个输入端之间的差分电压测量。
无论是使用AVCC还是内部参考电压,都可以在AREF引脚和地之间接一个外部去耦电容,以提高参考电压的稳定性。模拟参考(AREF)电压参考如图1-10所示。另一个选择是使用一个外部参考电压源电路。项目1
汽车单片机基础知识认知图1-9ATmega328管脚编号图1-10模拟参考(AREF)电压参考项目1
汽车单片机基础知识认知
(6)RESET。RESET引脚提供了重置或者说重启单片机的方法,名字上方的横线表示这是一个低电平有效的输入,意思是说当这个脚拉低时RESET功能起作用。RESET引脚设计可以承受高电压,也可以用于通知芯片进入编程模式;RESET引脚拉低到地并且保持为低时,就可以让芯片进入ISP(InSystemProgramming,在线编程),也称呼为LVSP(LowVolageSerialProgramming,低压串行编程);RESET引脚拉高到大约12V(11.5V到12.5V),则芯片就会进入HVPP(HighVolageParallelProgramming,高压并行编程),由于此模式情况下,RESET脚没有接其他所有脚都有的箝拉电路,因此更加容易收到静电的损坏。项目1
汽车单片机基础知识认知
(7)XTAL1和XTAL2。XTAL1和XTAL2引脚位置如图1-11所示。XTAL1和XTAL2脚是内部反相振荡器的输入和输出脚。如果使用外部时钟源,XTAL1就是内部时钟电路的输入脚。这两个脚一般是用于接一个石英晶体(ArduinoDuemilanove)或者陶瓷谐振器(ArduinoUno),以形成单片机的时钟电路的时基信号,为系统提供一个高精度的时间基准。注意:通用输入输出(I/O)端口,特殊的端口已经在上面介绍完成,剩下的端口都可以配置成输入或者输出端口。图1-11XTAL1和XTAL2引脚位置项目1
汽车单片机基础知识认知4.AVR内核(1)ATmega328的简化框图如图1-12所示。图1-12ATmega328的简化框图(2)AVRCPU的主要部件AVR内核包括AVRCPU的主要部件,如图1-13所示。AVR内核的组成如图1-14所示。图1-13AVRCPU的主要部件图1-14AVR内核的组成
芯片重启后,PC被重置为0,程序存储器中的0地址上的指令首先被取到CPU中(这个地方由MCU控制寄存器设置的),此处称为重启向量(一般来说,向量是指向一个特定地方(地址)的指针而非指令)。AVR体系中一个有是当中断发生,程序的执行跳转到设定的中断处理例程时,全局中断允许位(I)被清除。
(3)时钟源ATmega328和ATmega2560都有一个片内振荡器,其时钟频率由外部晶体或谐振器决定,其有以下两种运行方式:一是低功耗模式,此模式不能输出时钟信号到芯片外面;二是全幅模式,增加了功率消耗。两种芯片都可以从外部信号源获取时钟。片内有一个系统时钟预分频器,系统时钟以2的幂次分频,分频比可以从1:1到1:256。主系统时钟是由两个校准过的电阻/电容(RC)振荡器之一产生的,还可以使用一个外部低频时钟晶体(一般是32KHz)来驱动需要真实时钟的应用程序中的定时器/计时器。趣的设计是当中断发生,程序的执行跳转到设定的中断处理例程时,全局中断允许位(I)被清除。项目1
汽车单片机基础知识认知项目1
汽车单片机基础知识认知(4)地址空间AVR体系结构本身是基于哈弗体系结构的,哈弗结构中,程序和数据的存储空间是分离的。程序存储器的作用是用于存储处理器要执行的实际机器语言指令;在AVR上,这个存储器是片内的可编程16位宽flash阵列;其特点是可以存储一定数量的数据,但写入的时间比较长,可以擦写的次数有限;有时候被看作是ROM(只读存储器);Atmel器件手册宣称程序存储器内的数据可以保存很多年。数据存储器。数据存储器作用是用于保存程序运行过程中保存一些变量和变化的数据;在AVR上提供的是SRAM(StaticRandom-AccessMemory静态随机存取内存);
其大小ATmega328芯片有2KB的SRAM,而ATmega2560则会有8KB的SRAM;其特点是只要芯片还有电,SRAM内存就保持里面的数据,当掉电后,内存里的状态就是不确定了,也就是说当重新上电后,就不确定SRAM是某个特定的值,所以Arduino的C语言编程会采取措施来确保未初始化的数据不会用在被认为有特定值的场合;寄存器。寄存器作用是CPU中的大多数算术和逻辑指令都可以在一个时钟周期内直接读写寄存器组里的单个寄存器,这样大型的寄存器就可以让复杂的算法可以快速执行,而不用重复在SARM上复制数据。其大小在AVR上,里面有32个寄存器,编号为R0到R31;其中有6个寄存器有特殊用途,它们可以组合成3个16位指向数据存储器的索引指针,这些索引寄存器称呼为X、Y和Z,主要用于快速计算。输入/输出寄存器。输入/输出寄存器作用是所有的片内外围设备都是通过I/O地址空间访问的,每个外围设备都要用到1个或者多个寄存器,这些寄存器的位设置决定了外围设备的行为。其特点是SRAM、寄存器组和外围I/O寄存器都是在数据地址空间里的,而不是在程序地址空间里;EEPROM。EEPROM作用是适合用于存储用户可改的配置数据或其他需要容易修改又要长期非易失保存的数据;其大小,ATmega328芯片有1KB的EEPROM,而ATmega2560则会有4KB的EEPROM。其特点是EERPOM(电可擦写只读存储器)可以承受多次的擦写,这样就比较适合存储用户可改的配置数据或其他需要修改又要长期非易失保存的数据;写入的时序由片内的EEPROM逻辑控制,每个字节需要大约3.3ms来写入。项目1
汽车单片机基础知识认知配置熔丝。配置熔丝作用是配置熔丝控制芯片一些运行特性,这样可以更灵活地使用芯片;其大小是ATmega328芯片和ATmega2560芯片都有3个熔丝字节:1个高字节、1个低字节和1个扩展字节。其特点特点是配置熔丝一般是由外部芯片编程器读写的,通过LPM指令,芯片可以读取和锁定熔丝中的位,也可以通过SPM指令写引导装载程序锁定位。项目1
汽车单片机基础知识认知项目1
汽车单片机基础知识认知(5)指令集ATmega328芯片有131条不同的指令,而ATmega2560则会有135条。RISC(ReducedInstructionSetComputer精简指令集计算机),代表的是每条指令本身的复杂度降低了,而不是指令集中的指令数量减少;简化的可执行指令易于在硅片上实现,进而使得芯片更小、更快也更加便宜。机械语言指令:在AVR指令中有些是16位的,有些是32位的,主要分为四种。AVR机械语言指令集的组成如图1-15所示。图1-15AVR机械语言指令集的组成5.片内外围设备
单片机内部有构成一部分完整计算机的电路,包括内存块、时钟电路和接口外围设备;所以一部分低端的微处理器不能称呼为单片机。
(1)通用输入/输出(I/O)ATmega328芯片有3个I/O端口:端口B、C、D;ATmega2560芯片有11个I/O端口:端口A到端口H(没有端口I)、端口J、K、L;配置为输出方式后,根据输出端口寄存器上的位被写为1或者0,对应引脚上的高电平或者低电平;配置为输入方式后,每个引脚可以读到逻辑高或者逻辑低的电平;高于0.7×VCC的电压为高电平,读为1;低于0.3×VCC的电压则认为是逻辑低电平,读为0;在这两个电平之间的电压读数为不可测的;如果需要,输入引脚可以开启内置的上拉电阻,这样可以保证信号的确定的;每个I/O端口都是由3个I/O寄存器中位的设置来控制。
(2)外部中断AVR内核可以识别和响应两种不同的外部中断;ATmega328有INT0和INT1脚,ATmega2560有INT0-7脚;外部中断是嵌入式应用程序极为有用的资源,正确地使用外部中断可以解放主应用程序,使其不再需要不断轮询设备或状态以决定是否采取行动。项目1
汽车单片机基础知识认知项目1
汽车单片机基础知识认知(3)定时器/计数器定时器/计数器0。它可以用作定时器或计数器,核心为1个8位的计数器。定时器/计数器1。它可以用作定时器或计数器,而且还有1个输入捕获单元,这个硬件可以非常精确地做输入信号的时间测量;核心为1个16位的计数器。定时器/计数器2。它特殊在于能以自己的鼓点起舞,它的异步运行模式能以系统时钟或外部信号之外的信号源驱动;核心为1个8位的计数器。ATmega2560则增加3个16位的定时器(编号3.4.5)(4)USART
USART为通用同步、异步接收、发射器;ATmega328芯片有1个USART,而ATmega2560则会有4个USART。
(5)两线串行接口(TWI)
即IC,IC为IC间总线,是菲利普开发的一种通信协议,用于减少芯片间的连线;IC标准最多允许总线上最多127个设备。
(6)模拟输入ATmega328芯片有6个输入,而ATmega2560则会有16个输入;ATmega328模拟输入接口为A0A5,而ATmega2560模拟输入接口为A0A15;模拟输入可以测量的电压为0~5V;ADC一旦正确配置和触发,可以模拟电压转化为0~1023之间的一个数值;0表示电压是地电压或接近地电压;而读到1023则表示电压是AREF或接近AREF;这个是10比特的分辨率。项目1
汽车单片机基础知识认知6.存储空间Arduino的存储空间即是其主控芯片所集成的存储空间。也可以通过使用外设芯片的方式来扩展Arduino的存储空间。ArduinoUNO的存储空间分三种:Flash,容量为32KB。其中0.5KB作为BOOT区用于储存引导程序,实现通过串口下载程序的功能;另外的31.5KB作为用户储存的空间。相对于现在动辄几百GB的硬盘,可能觉得32KB太小了,但是在单片机上,32KB已经可以存储很大的程序了。SRAM,容量为2KB。SRAM相当于计算机的内存,当CPU进行运算时,需要在其中开辟一定的存储空间。当Arduino断电或复位后,其中的数据都会丢失。EEPROM,容量为1KB。EEPROM的全称为电可擦写的可编程只读存储器,是一种用户可更改的只读存储器,其特点是在Arduino断电或复位后,其中的数据不会丢失。项目1
汽车单片机基础知识认知7.串口ArduinoUNO有14个数字输入/输出端口,6个模拟输入端口,如图1-16所示。其中一些带有特殊功能,这些端口如下:图1-16ArduinoUNO14个数字输入/输出端口UART通信,为0(RX)和1(TX)引脚,被用于接收和发送串口数据。这两个引脚通过连接到ATmega16U2来与计算机进行串口通信。外部中断,为2和3引脚,可以输入外部中断信号。PWM输出,为.10和11引脚,可用于输出PWM波。SPI通信,为10(SS)、11(MOSI)、12(MISO)和13(SCK)引脚,可用于SPI通信。TWI通信,为A4(SDA)、A5(SCL)引脚和TWI接口,可用于TWI通信,兼容IIC通信。AREF,模拟输入参考电压的输入端口。Reset,复位端口。接低电平会使Arduino复位。当复位键被按下时,会使该端口接到低电平,从而使Arduino复位。项目1
汽车单片机基础知识认知8.状态灯ArduinoUNO带有4个LED指示灯,如图1-17所示,它们的作用分别是:图1-17ArduinoUNO带有4个LED指示灯ON,电源指示灯。当Arduino通电时,ON灯会点亮。TX,串口发送指示灯。当使用USB连接到计算机且Arduino向计算机传输数据时,TX灯会点亮。RX,串口接收指示灯。当使用USB连接到计算机且Arduino接收计算机传来的数据时,RX灯会点亮。L,可编程控制指示灯。该LED通过特殊电路连接到Arduino的13号引脚,当13号引脚为高电平或高阻态时,该LED会点亮;当为低电平时,不会点亮。因此可以通过程序或者外部输入信号来控制该LED的亮灭。项目1
汽车单片机基础知识认知9.电源ArduinoUNO有三种供电方式,如图1-18所示:
通过USB接口供电,电压为5V。通过DC电源输入接口供电,电压要求7~12V。
通过电源接口处5V或者VIN端口供电,5V端口处供电必须为5V,VIN端口处供电为7~12V。图1-18ArduinoUNO三种供电方式项目1
汽车单片机基础知识认知【任务工单页】
任务实施:单片机的硬件认知1.Arduino其实是一块AVR的开发板,其体系结构为_______指令集计算机(RISC)。2.DIP封装(DualIn-linePackage),指采用_______形式封装的集成电路芯片。3._______作用是CPU中的大多数算术和逻辑指令都可以在一个时钟周期内直接读写寄存器组里的单个寄存器。4.单片机内部有构成一部分完整计算机的电路,包括内存块、_______和接口外围设备;所以一部分低端的微处理器不能称呼为单片机。5.ArduinoUNO有____种供电方式。项目1
汽车单片机基础知识认知学习任务3单片机的软件基础认知【任务描述】单片机是以C语言为基础进行编程。C语言具有简洁紧凑、灵活方便;运算符丰富;数据结构简单;执行效率高;适用范围广,可移植性好等特点。本教材将重点介绍C语言的程序结构、条件判断、循环函数、算数运算符、比较运算符、布尔运算符、指针运算符、位运算符、复合运算符、常数变量、数据类型、变量作用域及修饰符、数字I/O、模拟I/O、高级I/O、时间函数、数学运算、中断函数、通信。【学习目标】1.能够使用C语言编程。2.能够在单片机上实现软件控制。项目1
汽车单片机基础知识认知1.基于Arduino的主函数介绍
在Arduino中,setup函数和loop函数是两个最重要的主函数,下面将对这两个函数进行介绍。
(1)setup函数
在Arduino中程序运行时将首先调用setup函数。用于初始化变量、设置针脚的输出\输入类型、配置串口、引入类库文件等。每次Arduino上电或重启后,setup函数只运行一次。参考程序:intbuttonPin=3;voidsetup(){Serial.begin(9600);pinMode(buttonPin,INPUT);}voidloop(){//...}(2)loop函数
在setup函数中初始化和定义了变量,然后执行loop函数。顾名思义,该函数在程序运行过程中不断的循环,根据一些反馈,相应改变执行情况。通过该函数动态控制Arduino主控板。参考程序:intbuttonPin=3;//setup中初始化串口和按键针脚.voidsetup(){beginSerial(9600);pinMode(buttonPin,INPUT);}//loop中每次都检查按钮,如果按钮被按下,就发送信息到串口voidloop(){if(digitalRead(buttonPin)==HIGH)serialWrite('H');elseserialWrite('L');delay(1000);}项目1
汽车单片机基础知识认知项目1
汽车单片机基础知识认知2.常数变量
(1)HIGH|LOW(引脚电压定义)
引脚电压定义HIGH和LOW,当读取(read)或写入(write)数字引脚时只有两个可能的值:HIGH和LOW。HIGH。HIGH(参考引脚)的含义取决于引脚(pin)的设置,引脚定义为INPUT或OUTPUT时含义有所不同。当一个引脚通过pinMode被设置为INPUT,并通过digitalRead读取(read)时。如果当前引脚的电压大于等于3V,微控制器将会返回为HIGH。引脚也可以通过pinMode被设置为INPUT,并通过digitalWrite设置为HIGH。输入引脚的值将被一个内在的20K上拉电阻控制在HIGH上,除非一个外部电路将其拉低到LOW。当一个引脚通过pinMode被设置为OUTPUT,并digitalWrite设置为HIGH时,引脚的电压应在5V。在这种状态下,它可以输出电流。例如,点亮一个通过一串电阻接地或设置为LOW的OUTPUT属性引脚的LED。LOW。LOW的含义同样取决于引脚设置,引脚定义为INPUT或OUTPUT时含义有所不同。当一个引脚通过pinMode配置为INPUT,通过digitalRead设置为读取(read)时,如果当前引脚的电压小于等于2V,微控制器将返回为LOW。当一个引脚通过pinMode配置为OUTPUT,并通过digitalWrite设置为LOW时,引脚为0V。在这种状态下,它可以倒灌电流。例如,点亮一个通过串联电阻连接到+5V,或到另一个引脚配置为OUTPUT、HIGH的LED。项目1
汽车单片机基础知识认知(2)INPUT|OUTPUT(数字引脚(Digitalpins)定义)
数字引脚(Digitalpins)定义,INPUT和OUTPUT,数字引脚当作INPUT或OUTPUT都可以。用pinMode()方法使一个数字引脚从INPUT到OUTPUT变化。引脚(Pins)配置为输入(Inputs)。Arduino(Atmega)引脚通过pinMode()配置为输入(INPUT)即是将其配置在一个高阻抗的状态。配置为INPUT的引脚可以理解为引脚取样时对电路有极小的需求,即等效于在引脚前串联一个100兆欧姆(Megohms)的电阻。这使得它们非常利于读取传感器,而不是为LED供电。引脚(Pins)配置为输出(Outputs)。引脚通过pinMode()配置为输出(OUTPUT)即是将其配置在一个低阻抗的状态。
这意味着它们可以为电路提供充足的电流。Atmega引脚可以向其他设备/电路提供(提供正电流positivecurrent)或倒灌(提供负电流negativecurrent)达40毫安(mA)的电流。这使得它们利于给LED供电,而不是读取传感器。输出(OUTPUT)引脚被短路的接地或5V电路上会受到损坏甚至烧毁。Atmega引脚在为继电器或电机供电时,由于电流不足,将需要一些外接电路来实现供电。项目1
汽车单片机基础知识认知(3)true|false(逻辑层定义)
逻辑层定义,true与false(布尔Boolean常量),在Arduino内有两个常量用来表示真和假:true和false。false。在这两个常量中false更容易被定义。false被定义为0(零)。true。true通常被定义为1,这是正确的,但true具有更广泛的定义。在布尔含义里任何非零整数为true。所以在布尔含义内-1,2和-200都定义为ture。需要注意的是true和false常量,不同于HIGH,LOW,INPUT和OUTPUT,需要全部小写。integerconstants(整数常量)。整数常量是直接在程序中使用的数字,如123。默认情况下,这些数字被视为int,但你可以通过U和L修饰符进行更多的限制(见下文)。通常情况下,整数常量默认为十进制,但可以加上特殊前缀表示为其他进制。不同进制对比如表1-2所示。进制示例数码二进制1111011二进位计数制仅用两个数码,0和1,逢二进一八进制173用0,1,2,3,4,5,6,7八个数字,逢八进1十进制1230、1、2、3、4、5、6、7、8、9,逢十进一十六进制7b0、1、2、3、4、5、6、7、8、9和字母A、B、C、D、E、F,逢十六进一项目1
汽车单片机基础知识认知小数是十进制数。这是数学常识。如果一个数没有特定的前缀,则默认为十进制。二进制以2为基底,只有数字0和1是有效的。示例101//和十进制5等价(1*2^2+0*2^1+1*2^0)二进制格式只能是8位的,即只能表示0-255之间的数。如果输入二进制数更方便的话,你可以用以下的方式:myInt=(B11001100*256)+B10101010;//B11001100作为高位。八进制是以8为基底,只有0-7是有效的字符。前缀“0”(数字0)表示该值为八进制。0101//等同于十进制数65((1*8^2)+(0*8^1)+1)项目1
汽车单片机基础知识认知3.变量作用域及修饰符
在Arduino使用的C编程语言的变量,有一个名为作用域(scope)
的属性。这一点与类似BASIC的语言形成了对比,在BASIC语言中所有变量都是全局(global)
变量。
在一个程序内的全局变量是可以被所有函数所调用的。局部变量只在声明它们的函数内可见。在Arduino的环境中,任何在函数(例如,setup(),loop()等)外声明的变量,都是全局变量。
当程序变得更大更复杂时,局部变量是一个有效确定每个函数只能访问其自己变量的途径。这可以防止,当一个函数无意中修改另一个函数使用的变量的程序错误。
有时在一个for循环内声明并初始化一个变量也是很方便的选择。这将创建一个只能从for循环的括号内访问的变量。参考程序:intgPWMval;//任何函数都可以调用此变量voidsetup(){//...}voidloop(){inti;//"i"只在"loop"函数内可用floatf;//"f"只在"loop"函数内可用//...for(intj=0;j<100;j++){//变量j只能在循环括号内访问}}项目1
汽车单片机基础知识认知
(1)static(静态变量)static关键字用于创建只对某一函数可见的变量。然而,和局部变量不同的是,局部变量在每次调用函数时都会被创建和销毁,静态变量在函数调用后仍然保持着原来的数据。静态变量只会在函数第一次调用的时候被创建和初始化。参考程序:/*RandomWalk*PaulBadger2007*RandomWalk
函数在两个终点间随机的上下移动*在一个循环中最大的移动由参数“stepsize”决定*一个静态变量向上和向下移动一个随机量*这种技术也被称为“粉红噪声”或“醉步”*/#definerandomWalkLowRange-20#definerandomWalkHighRange20intstepsize;intthisTime;inttotal;voidsetup(){Serial.begin(9600);}voidloop(){//测试randomWalk
函数stepsize=5;thisTime=randomWalk(stepsize);serial.println(thisTime);delay(10);}intrandomWalk(intmoveSize){staticintplace;//在randomwalk
中存储变量//声明为静态因此它在函数调用之间能保持数据,但其他函数无法改变它的值place=place+(random(-moveSize,
moveSize+1));if(place<randomWalkLowRange){//检查上下限place=place+(randomWalkLowRange-place);//将数字变为正方向}elseif(place>randomWalkHighRange){place=place-(place-randomWalkHighRange);//将数字变为负方向}returnplace;}(2)volatilevolatile
这个关键字是变量修饰符,常用在变量类型的前面,以告诉编译器和接下来的程序怎么对待这个变量。声明一个
volatile变量是编译器的一个指令。编译器是一个将你的C/C++代码转换成机器码的软件,机器码是arduino
上的
Atmega芯片能识别的真正指令。具体来说,它指示编译器从
RAM而非存储寄存器中读取变量,存储寄存器是程序存储和操作变量的一个临时地方。在某些情况下,存储在寄存器中的变量值可能是不准确的。如果一个变量所在的代码段可能会意外地导致变量值改变,那此变量应声明为
volatile,比如并行多线程等。在arduino
中,唯一可能发生这种现象的地方就是和中断有关的代码段,成为中断服务程序。参考程序://当中断引脚改变状态时,开闭LEDintpin=13;volatileintstate=LOW;voidsetup(){pinMode(pin,OUTPUT);attachInterrupt(0,blink,CHANGE);}voidloop(){digitalWrite(pin,state);}voidblink(){state=!state;}项目1
汽车单片机基础知识认知项目1
汽车单片机基础知识认知(3)constconst关键字代表常量。它是一个变量限定符,用于修改变量的性质,使其变为只读状态。这意味着该变量,就像任何相同类型的其他变量一样使用,但不能改变其值。如果尝试为一个const变量赋值,编译时将会报错。const关键字定义的常量,遵守variablescoping管辖的其他变量的规则。这一点加上使用#define的缺陷,使const关键字成为定义常量的一个的首选方法。参考程序:constfloatpi=3.14;floatx;//x=pi*2;//在数学表达式中使用常量不会报错pi=7;//错误的用法-你不能修改常量值,或给常量赋值。#define或const可以使用const或#define创建数字或字符串常量。但arrays,只能使用const。一般const相对的#define是首选的定义常量语法。项目1
汽车单片机基础知识认知4.数字I/O(1)pinMode()pinMode()用于将指定的引脚配置成输出或输入。详情请见digitalpins。pinMode()语法为pinMode(pin,mode),参数pin:要设置模式的引脚;参数mode:INPUT或OUTPUT,无返回。参考程序:ledPin=13//LED连接到数字脚
13voidsetup(){pinMode(ledPin,OUTPUT);//设置数字脚为输出}voidloop(){digitalWrite(ledPin,HIGH);//点亮LEDdelay(1000);//等待1sdigitalWrite(ledPin,LOW);//灭掉LEDdelay(1000);//等待第二个}注意:模拟输入脚也能当做数字脚使用,参见A0,A1等。项目1
汽车单片机基础知识认知(2)digitalWrite()
用于给一个数字引脚写入
HIGH或者LOW。如果一个引脚已经使用pinMode()配置为
OUTPUT模式,其电压将被设置为相应的值,HIGH为5V(3.3V控制板上为3.3V),LOW为0V。如果引脚配置为
INPUT模式,使用digitalWrite()写入
HIGH值,将使内部20kΩ上拉电阻(详见数字引脚教程)。写入LOW将会禁用上拉。上拉电阻可以点亮一个LED让其微微亮,如果LED工作,但是亮度很低,可能是因为这个原因引起的。补救的办法是使用pinMode()函数设置为输出引脚。注意:数字
13号引脚难以作为数字输入使用,因为大部分的控制板上使用了一颗
LED与一个电阻连接到他。如果启动了内部的20K上拉电阻,他的电压将在1.7V左右,而不是正常的5V,因为板载LED串联的电阻把他使他降了下来,这意味着他返回的值总是LOW。如果必须使用数字
13号引脚的输入模式,需要使用外部上拉下拉电阻。digitalWrite()语法为digitalWrite(pin,
value),参数pin:引脚编号(如1,5,10,A0,A3);参数value:HIGH或者LOW,无返回。项目1
汽车单片机基础知识认知参考程序:intledPin=13;//LED连接到数字13号端口voidsetup(){pinMode(ledPin,OUTPUT);//设置数字端口为输入模式}voidloop(){digitalWrite(ledPin,HIGH);//使LED亮delay(1000);//延迟1sdigitalWrite(ledPin,LOW);//使LED灭delay(1000);//延迟1s}13号端口设置为高电平,延迟1s,然后设置为低电平。注意:模拟引脚也可以当作数字引脚使用,使用方法是输入端口
A0,A1,A2等。项目1
汽车单片机基础知识认知(3)digitalRead()digitalRead()用于读取指定引脚的值。digitalRead()语法为digitalRead(Pin),
参数Pin:读取的引脚号(int),返回HIGH或LOW。参考程序:ledPin=13//LED连接到13脚intinPin=7;//按钮连接到数字引脚7intval=0;//定义变量存以储读值voidsetup(){pinMode(ledPin,OUTPUT);//将13脚设置为输出pinMode(inPin,INPUT);//将7脚设置为输入}voidloop(){val=digitalRead(inPin);//读取输入脚digitalWrite(ledPin,val);//将LED值设置为按钮的值}将13脚设置为输入脚7脚的值。注意:如果引脚悬空,digitalRead()会返回HIGH或LOW(随机变化)。模拟输入脚能当做数字脚使用,参见A0,A1等。项目1
汽车单片机基础知识认知5.模拟
I/O(1)analogReference()
analogReference()配置用于模拟输入的基准电压(即输入范围的最大值)。analogReference()语法及参数含义见表1-2。analogReference()语法参数参数含义analogReference(type)typetype使用哪种参考类型:DEFAULT、
INTERNAL、INTERNAL1V1、
INTERNAL2V56、EXTERNALDEFAULT:默认5V(Arduino
板为5V)或3.3V(Arduino
板为
3.3V)为基准电压INTERNAL:在ATmega168和ATmega328上以1.1V为基准电压,以及在ATmega8上以2.56V为基准电压(ArduinoMega无此选项)INTERNAL1V1:以1.1V为基准电压(此选项仅针对ArduinoMega)INTERNAL2V56:以2.56V为基准电压(此选项仅针对ArduinoMega)EXTERNAL:以AREF引脚(0至5V)的电压作为基准电压
analogReference()返回无无表1-2analogReference()语法及参数含义注意事项:改变基准电压后,之前从analogRead()读取的数据可能不准确。项目1
汽车单片机基础知识认知
警告:不要在AREF引脚上使用任何小于0V或超过5V的外部电压。如果使用AREF引脚上的电压作为基准电压,在调用analogRead()前必须设置参考类型为EXTERNAL。否则,将会削短有效的基准电压(内部产生)和AREF引脚,这可能会损坏Arduino板上的单片机。
另外,可以在外部基准电压和AREF引脚之间连接一个5K电阻,这样能在外部和内部基准电压之间切换。请注意,总阻值将会发生改变,因为AREF引脚内部有一个32K电阻。这两个电阻都有分压作用。所以,例如,如果输入2.5V的电压,最终在AREF引脚上的电压将为2.5×32/(32+5)V=2.2V。项目1
汽车单片机基础知识认知(2)analogRead()
analogRead()用于从指定的模拟引脚读取数据值。Arduino
板包含一个
6通道(Mini和Nano有8个通道,Mega有16个通道),10位模拟数字转换器。这意味着它将
0至5V之间的输入电压映射到
0至1023之间的整数值。这将产生读数之间的关系:5V/1024单位,或0.0049V(4.9mV)每单位。输入范围和精度可以使用analogReference()改变。它需要大约
100μs(0.0001)来读取模拟输入,所以最大的阅读速度是每s
10000次。analogRead()语法为analogRead(Pin),参数Pin:从输入引脚(大部分板子从
0到5,Mini和Nano从0到7,Mega从0到15)读取数值,返回:从
0到1023的整数值。注意事项:如果模拟输入引脚没有连入电路,由analogRead()返回的值将根据多项因素(例如其他模拟输入引脚,你的手靠近板子等)产生波动。参考程序:intanalogPin=3;//电位器(中间的引脚)连接到模拟输入引脚3//另外两个引脚分别接地和+5Vintval=0;//定义变量来存储读取的数值voidsetup(){serial.begin(9600);//设置波特率(9600)}voidloop(){val=analogRead(analogPin);//从输入引脚读取数值serial.println(val);//显示读取的数值}项目1
汽车单片机基础知识认知(3)analogWrite()
analogWrite()用于PWM从一个引脚输出模拟值(PWM)。可用于让
LED以不同的亮度点亮或驱动电机以不同的速度旋转。analogWrite()输出结束后,该引脚将产生一个稳定的特殊占空比方波,直到下次调用analogWrite()(或在同一引脚调用digitalRead()或digitalWrite())。PWM信号的频率大约是490赫兹。在大多数arduino
板(ATmega168或ATmega328),只有引脚3,5,6,9,10和11可以实现该功能。在aduino
Mega上,引脚2到13可以实现该功能。老的Arduino
板(ATmega8)的只有引脚9.10.11可以使用analogWrite()。在使用analogWrite()前,你不需要调用pinMode()来设置引脚为输出引脚。analogWrite
函数与模拟引脚、analogRead
函数没有直接关系。analogWrite()语法为analogWrite(pin,value),参数pin:用于输入数值的引脚;参数value:占空比,0(完全关闭)到255(完全打开)之间,无返回。说明:引脚
5和6的PWM输出将高于预期的占空比(输出的数值偏高)。这是因为millis()和delay()功能,和PWM输出共享相同的内部定时器。这将导致大多时候处于低占空比状态(如:0-10),并可能导致在数值为0时,没有完全关闭引脚5和6。通过读取电位器的阻值控制
LED的亮度。项目1
汽车单片机基础知识认知参考程序:intledPin=9;//LED连接到数字引脚9intanalogPin=3;//电位器连接到模拟引脚3intval=0;//定义变量存以储读值voidsetup(){pinMode(ledPin,OUTPUT);//设置引脚为输出引脚}voidloop(){val=analogRead(analogPin);//从输入引脚读取数值analogWrite(ledPin,val/4);//以val/4的数值点亮LED(因为analogRead
读取的数值从
0到1023,而analogWrite
输出的数值从
0到255)}项目1
汽车单片机基础知识认知(4)高级I/Otone()。tone()用于在一个引脚上产生一个特定频率的方波(50%占空比)。持续时间可以设定,否则波形会一直产生直到调用noTone()函数。该引脚可以连接压电蜂鸣器或其他喇叭播放声音。
在同一时刻只能产生一个声音。如果一个引脚已经在播放音乐,那调用
tone()将不会有任何效果。如果音乐在同一个引脚上播放,它会自动调整频率。
使用
tone()函数会与3脚和11脚的PWM产生干扰(Mega板除外)。
注意:如果你要在多个引脚上产生不同的音调,你要在对下一个引脚使用
tone()函数前对此引脚调用noTone()函数。tone()语法及参数含义见表1-3。tone()语法参数参数含义tone(pin,frequency)type要产生声音的引脚frequency产生声音的频率,单位
Hz,类型unsignedinttone(pin,frequency,duration)type要产生声音的引脚frequency产生声音的频率,单位
Hz,类型unsignedintduration声音持续的时间,单位ms(可选),类型unsignedlong表1-3tone()语法及参数含义项目1
汽车单片机基础知识认知noTone()。noTone()用于停止由
tone()产生的方波。如果没有使用tone()将不会有效果。注意:如果你想在多个引脚上产生不同的声音,你要在对下个引脚使用
tone()前对刚才的引脚调用noTone()。noTone()语法为noTone(pin),参数pin:所要停止产生声音的引脚。shiftOut()。shiftOut()将一个数据的一个字节一位一位的移出。从最高有效位(最左边)或最低有效位(最右边)开始。依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。
注意:如果所连接的设备时钟类型为上升沿,要确定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin,
LOW)。这是一个软件实现;Arduino
提供了一个硬件实现的
SPI库,它速度更快但只在特定脚有效。项目1
汽车单片机基础知识认知shiftOut()语法及参数含义见表1-4。shiftOut()语法参数参数含义shiftOut(dataPin,
clockPin,
bitOrder,value)dataPin输出每一位数据的引脚(int)clockPin时钟脚,当
dataPin
有值时此引脚电平变化(int)bitOrder输出位的顺序,最高位优先或最低位优先value要移位输出的数据(byte)shiftOut()返回无无表1-4shiftOut()语法及参数含义注意:dataPin和clockPin要用pinMode()配置为输出。shiftOut目前只能输出1个字节(8位),所以如果输出值大于255需要分两步。项目1
汽车单片机基础知识认知//最高有效位优先串行输出int数据=500;//移位输出高字节shiftOut(dataPin,
clock,MSBFIRST,(data>>8));//移位输出低字节shiftOut(data,clock,MSBFIRST,data);//最低有效位优先串行输出data=500;//移位输出低字节shiftOut(dataPin,
clock,LSBFIRST,data);//移位输出高字节shiftOut(dataPin,
clock,LSBFIRST,(data>>8));项目1
汽车单片机基础知识认知参考程序://**************************************************************////Name:shiftOut
代码,
HelloWorld////Author:CarlynMaw,TomIgoe////Date:25Oct,2006////版本:1.0////注释:使用74HC595移位寄存器从0到255计数//////****************************************************************//引脚连接到74HC595的ST_CPintlatchPin=8;//引脚连接到74HC595的SH_CP intclockPin=12;////引脚连接到74HC595的DSintdataPin=11;voidsetup(){//设置引脚为输出pinMode(latchPin,OUTPUT);pinMode(clockPin,OUTPUT);pinMode(dataPin,OUTPUT);}voidloop(){//向上计数程序(J=0;J<256;J++){//传输数据的时候将latchPin
拉低digitalWrite(latchpin,LOW);shiftOut
的(dataPin,clockPin,LSBFIRST,J);//之后将latchPin
拉高//它不需要再接受信息了digitalWrite(latchpin,HIGH);delay(1000);}}相应电路,查看
tutorialoncontrollinga74HC595shiftregister。项目1
汽车单片机基础知识认知shiftIn()。shiftIn()用于将一个数据的一个字节一位一位的移入。从最高有效位(最左边)或最低有效位(最右边)开始。对于每个位,先拉高时钟电平,再从数据
传输线中读取一位,再将时钟线拉低。
注意:这是一个软件实现;Arduino
提供了一个硬件实现的
SPI库,它速度更快但只在特定脚有效。shiftIn()语法及参数含义见表1-5。shiftIn()语法参数参数含义shiftIn(dataPin,clockPin,bitOrder)dataPin输出每一位数据的引脚(int)clockPin时钟脚,当
dataPin
有值时此引脚电平变化(int)bitOrder输出位的顺序,最高位优先或最低位优先value要移位输出的数据(byte)表1-5
shiftIn()语法及参数含义项目1
汽车单片机基础知识认知pulseIn()。pulseIn()用于读取一个引脚的脉冲(HIGH或LOW)。例如,如果value是HIGH,pulseIn()会等待引脚变为
HIGH,开始计时,再等待引脚变为LOW并停止计时。返回脉冲的长度,单位μs。如果在指定的时间内无脉冲函数返回。此函数的计时功能由经验决定,长时间的脉冲计时可能会出错。计时范围从
10μs至3min(1s=1000ms=1000000μs)。pulseIn()语法及参数含义见表1-6。pulseIn()语法参数参数含义pulseIn(pin,value)pin要进行脉冲计时的引脚号(int)value要读取的脉冲类型,HIGH或LOW(int)pulseIn(p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 美容经络按摩培训
- 2025年度环境风险评估与环境保护合同
- 肺部感染护理诊断及措施
- 耳前瘘管护理查房
- 2024淮安市辅仁职业技术学校工作人员招聘考试及答案
- 招商代理合同范本
- 装饰装修工程合同范本大全
- 洗车店承包与服务合同样本
- 腹水常规操作规程
- 农业机械租赁合同协议
- 施工质量奖惩考核实施细则
- 杭州2025年浙江杭州余杭区余杭街道招聘编外劳务派遣人员25人笔试历年参考题库附带答案详解
- 2025年入团考试练习试题(100题)附答案
- (二模)温州市2025届高三第二次适应性考试地理试卷(含答案)
- (一模)南京市、盐城市2025届高三年级第一次模拟考试语文试卷
- 河南省安阳市滑县2024-2025学年九年级下学期3月月考英语试题(原卷版+解析版)
- 装载机基础知识
- 烟台东方威思顿电气有限公司2025届校园招聘笔试参考题库附带答案详解
- 2025年邮政社招笔试试题及答案
- 2025年子宫肌瘤临床路径与治疗指南
- 婴幼儿生活照护 课件 6行动手册单元六饮水活动照护
评论
0/150
提交评论