《单片机应用技术(C语言版)第3版》全套教学课件_第1页
《单片机应用技术(C语言版)第3版》全套教学课件_第2页
《单片机应用技术(C语言版)第3版》全套教学课件_第3页
《单片机应用技术(C语言版)第3版》全套教学课件_第4页
《单片机应用技术(C语言版)第3版》全套教学课件_第5页
已阅读5页,还剩373页未读 继续免费阅读

下载本文档

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

文档简介

单片机应用技术

项目1单片机最小系统设计项目2流水灯系统设计项目3交通灯系统设计项目4电子万年历系统设计项目5数据采集与输出系统设计项目6串行通信系统设计项目7STM32单片机开发简介项目8综合应用全套可编辑PPT课件

项目一单片机最小系统设计1.1单片机应用系统的组成1.2MCS-51系列单片机组成结构1.3MCS-51系列单片机的存储器结构1.4最小系统电路1.5单片机系统开发软件KeilC51

◆单板机将CPU芯片、存储器芯片、I/O接口芯片和简单的I/O设备(小键盘、LED显示器)等装配在一块印刷电路板上,再配上监控程序(固化在ROM中),就构成了一台单板微型计算机(简称单板机)。单板机1.什么是单片机?1.1单片机应用系统的组成单板机的I/O设备简单,软件资源少,使用不方便。早期主要用于微型计算机原理的教学及简单的测控系统,现在已很少使用。1.1单片机应用系统的组成

◆单片机

单片微型计算机(SingleChipMicrocomputer)简称单片机,是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU(CentralProcessingUnit)、存储器(memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时/计数器和中断系统等,都制作在一块集成芯片上,构成一个完整的微型计算机。单片机内部基本结构如图所示。由于它的结构与指令功能都是按照工业控制要求设计的,故又称为微控制器(Micro-ControllerUnit,简称MCU)。单板机单片机1.1单片机应用系统的组成2.单片机的用途

单片机的应用十分广泛,在工业控制、智能仪器仪表、家用电器、通信系统、信息和通信产品、办公自动化设备、商业营销设备、医疗设备、汽车电子系统等领域,都有重要的用途。1.1单片机应用系统的组成智能仪器:内部含有单片机的仪器统称为智能仪器,也称为微机化仪器。这类仪器大多采用单片机进行信息处理、控制及通信,与非智能化仪器相比,功能得到了强化,增加了诸如数据存储、故障诊断、联网集控等功能。以单片机作为核心组成智能仪表已经是自动化仪表发展的一种趋势。家用电器:单片机功能完善、体积小、价格低、易于嵌入,非常适用于对家用电器的控制。嵌入单片机的家用电器实现了智能化,是传统型家用电器的更新换代,现已广泛应用于洗衣机、空调、电视机、视盘机、微波炉、电冰箱、电饭煲以及各种视听设备等。工业控制:工业自动化控制是最早采用单片机控制的领域之一,在测控系统、过程控制、机电一体化设备中主要利用单片机实现逻辑控制、数据采集、运算处理、数据通信等用途。单独使用单片机可以实现一些小规模的控制功能,作为底层检测、控制单元与上位计算机结合可以组成大规模工业自动化控制系统。特别在机电一体化技术中,单片机的结构特点使其更容易发挥其集机械、微电子和计算机技术于一体的优势。1.1单片机应用系统的组成信息和通信产品:信息和通信产品的自动化和智能化程度很高,其中许多功能的完成都离不开单片机的参与。这里最具代表性和应用最广的产品就是移动通信设备,例如手机内的控制芯片就属于专用型单片机。另外在计算机外部设备中,如键盘、打印机中也离不开单片机。新型单片机普遍具备通信接口,可以方便地与计算机进行数据通信,为计算机和网络设备之间提供连接服务创造了条件。办公自动化设备:现代办公自动化设备中大多数嵌入了单片机控制核心。如打印机、复印机、传真机、绘图机、考勤机及电话等。通过单片机控制不但可以完成设备的基本功能,还可以实现与计算机之间的数据通信。1.1单片机应用系统的组成商业营销设备:在商业营销系统中单片机已广泛应用于电子秤、收款机、条形码阅读器、IC卡刷卡机、出租车计价器以及仓储安全监测系统、商场保安系统、空气调节系统、冷冻保险系统等。医疗设备:单片机在医疗设施及医用设备中的用途亦相当广泛,例如在医用呼吸机、各种分析仪、医疗监护仪、超声诊断设备及病床呼叫系统中都得到了实际应用。汽车电子系统:现代汽车的集中显示系统、动力监测控制系统、自动驾驶系统、通信系统和运行监视器等装置中都离不开单片机。特别是采用现场总线的汽车控制系统中,以单片机担当核心的节点通过协调、高效的数据传送不仅完成了复杂的控制功能,而且简化了系统结构。1.1单片机应用系统的组成3.单片机的类型按等级大致又可分为三类,即工业级、商业级、军用级。◆目前8位单片机仍是单片机的主流机型;◆生产厂商:◆单片机的发展经历了由4位机到8位机,再到16位机的发展过程(CPU能同时处理二进制数的位数是多少位,就称其是多少位的计算机

)美国微芯片公司:PIC16C××系列、PIC17C××系列、PIC1400系列,美国英特尔公司的MCS-48和MCS-51系列,美国摩托罗拉公司的MC68HC05系列和MC68HC11系列,美国齐洛格公司的Z8系列,日本电气公司的μPD78××系列,美国莫斯特克公司和仙童公司合作生产的F8(3870)系列等。

1.1单片机应用系统的组成4.单片机应用系统单片机应用系统单片机+接口电路及外设等+软件硬件单片机应用系统由硬件和软件组成硬件是应用系统的基础软件是在硬件的基础上对其资源进行合理调配和使用,从而完成应用系统所要求的任务,二者相互依赖,缺一不可1.1单片机应用系统的组成5)所有人都站在了同一起跑线上;5.学单片机需要什么基础?2)与以前所学的知识关联很少;1)只需要掌握很基本的数电模电知识;3)对各种器件的概念基本上是从0开始;4)如果要用C语言编程,需具备简单的C语言基础;1.1单片机应用系统的组成1.单片机的基本结构1.2MCS-51系列单片机组成结构总线(BUS)是计算机各部件之间传送信息的公共通道。微机中有内部总线和外部总线两类。内部总线是CPU内部之间的连线。外部总线是指CPU与其它部件之间的连线。外部总线有三种:数据总线DB(DataBus)地址总线AB(AddressBus)控制总线CB(ControlBus)1.2MCS-51系列单片机组成结构单片机硬件结构时钟电路CPUROMRAMT0T1中断系统串行接口并行接口P0P1P2P3TXDRXDINT0INT1定时计数器中央处理器CPU:8位,运算和控制功能内部RAM:共256个RAM单元,用户使用前128个单元,用于存放可读写数据,后128个单元被专用寄存器占用。内部ROM:4KB掩膜ROM,用于存放程序、原始数据和表格。定时/计数器:两个16位的定时/计数器,实现定时或计数功能。并行I/O口:4个8位的I/O口P0、P1、P2、P3。串行口:一个全双工串行口。中断控制系统:5个中断源(外中断2个,定时/计数中断2个,串行中断1个)时钟电路:可产生时钟脉冲序列,允许晶振频率6MHZ和12MHZ复位电路1.2MCS-51系列单片机组成结构1632.单片机的引脚总线型1.2MCS-51系列单片机组成结构非总线型1.2MCS-51系列单片机组成结构1.2MCS-51系列单片机组成结构1.2MCS-51系列单片机组成结构MCS-51单片机信号引脚简介

P3口线的第二功能VCCVSSXTAL2

XTAL1RSTP0.0

P0.1

P0.2P0.3P0.4P0.5P0.6P0.7P1.0

P1.1

P1.2P1.3P1.4P1.5P1.6P1.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0ALEP3.0

P3.1

P3.2P3.3P3.4P3.5P3.6P3.72、振荡电路:XTAL1、XTAL23、复位引脚:RST4、并行口:P0、P1、P2、P37、ALE:地址锁存控制信号1、电源线:VCC(+5V)、VSS(地)EAPSEN5、EA:访问程序存储控制信号6、PSEN:外部ROM读选通信号1

2

3

4

5

6

7

8

9

10111213141516171819

2040

39

38

37

36

35

34

33

32

313029282726252424222180318051875189C511.2MCS-51系列单片机组成结构Vss:地Vcc:电源,提供掉电、空闲、正常工作电压RST:

复位,当晶振在运行中只要复位管脚出现2个机器周期高电平即可复位.内部有扩散电阻连接到Vss,仅需要外接一个电容到Vcc即可实现上电复位ALE:

地址锁存使能,在访问外部存储器时,输出脉冲锁存地址的低字节在正常情况下ALE输出信号恒定为1/6振荡频率,并可用作外部时钟或定时.注意每次访问外部数据时,一个ALE脉冲将被忽略.ALE可以通过置位SFRauxililary.0禁止.置位后ALE只能在执行MOVX指令时被激活PSEN:程序存储使能,读外部程序存储.当从外部读取程序时,PSEN每个机器周期被激活两次,在访问外部数据存储器PSEN无效,访问内部程序存储器时PSEN无效。1.2MCS-51系列单片机组成结构EA/Vpp:外部寻址使能/编程电压,在访问整个外部程序存储器时,EA必须外部置低。如果EA为高时将执行内部程序。当RST释放后,EA脚的值被锁存。任何时序的改变都将无效。该引脚在对FLASH编程时用于输入编程电压(Vpp)XTAL1:晶体1振荡,反向放大器输入端和内部时钟发生电路输入端XTAL2:晶体2振荡,反向放大器输出端1.2MCS-51系列单片机组成结构3.I/O口接口单片机的I/O口

I就是INPUT。单片机是一种微型控制器,要想实现其控制作用,首先单片机就应该能够“感知外部世界的变化”,所以对于单片机而言必须有“输入口”。

O就是OUPUT。单片机根据外部信号的状态,通过其内部程序的分析处理,最终决定在哪里输出,输出什么样的信号,所以单片机要想“控制外部世界”就必须有“输出口”。1.2MCS-51系列单片机组成结构对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的控制,都是通过I/O口进行的。51单片机总共有P0、P1、P2、P3四个8位双向输入输出端口,每个端口都有锁存器、输出驱动器和输入缓冲器。4个I/O端口都能作输入输出口用,其中P0和P2通常用于对外部存储器的访问。每个I/O口既可以按位操作使用单个引脚,也可以按字节操作使用8个引脚。1.2MCS-51系列单片机组成结构

1单片机的并行端口结构与操作51系列单片机有4个I/O端口,每个端口都是8位准双向口,共占32根引脚。每个端口都包括一个锁存器(即专用寄存器P0~P3)、一个输出驱动器和输入缓冲器。通常把4个端口笼统地表示为P0~P3。在无片外扩展存储器的系统中,这4个端口的每一位都可以作为准双向通用I/O端口使用。在具有片外扩展存储器的系统中,P2口作为高8位地址线,P0口分时作为低8位地址线和双向数据总线。1.2MCS-51系列单片机组成结构

51单片机4个I/O端口线路设计的非常巧妙,学习I/O端口逻辑电路,不但有利于正确合理地使用端口,而且会给设计单片机外围逻辑电路有所启发。2P0口的结构1.2MCS-51系列单片机组成结构下图为P0口的某位P0.n(n=0~7)结构图,它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路及控制电路组成。从图中可以看出,P0口既可以作为I/O用,也可以作为地址/数据线用。DQCLKQMUXP0.n读锁存器内部总线写锁存器读引脚地址/数据控制VCCT1T2P0口引脚1.2MCS-51系列单片机组成结构

P1口逻辑电路1、P0口作为普通I/O口①输出时CPU发出控制电平“0”封锁“与”门,将输出上拉场效应管T1截止,同时使多路开关MUX把锁存器与输出DQCLKQMUXP0.n读锁存器内部总线写锁存器读引脚地址/数据控制VCCT1T2P0口引脚1.2MCS-51系列单片机组成结构驱动场效应管T2栅极接通。故内部总线与P0口同相。由于输出驱动级是漏极开路电路,若驱动NMOS或其它拉流负载时,需要外接上拉电阻。P0的输出级可驱动8个LSTTL负载。DQCLKQMUXP0.n读锁存器内部总线写锁存器读引脚地址/数据控制VCCT1T2P0口引脚1.2MCS-51系列单片机组成结构②输入时----分读引脚或读锁存器读引脚:由传送指令(MOV)实现;

下面一个缓冲器用于读端口引脚数据,当执行一条由端口输入的指令时,读脉冲把该三态缓冲器打开,这样端口引脚上的数据经过缓冲器读入到内部总线。DQCLKQMUXP0.n读锁存器内部总线写锁存器读引脚地址/数据控制VCCT1T2P0口引脚1.2MCS-51系列单片机组成结构DQCLKQMUXP0.n读锁存器内部总线写锁存器读引脚地址/数据控制VCCT1T2P0口引脚②输入时----分读引脚或读锁存器读锁存器:有些指令如:ANLP0,A称为“读-改-写”指令,需要读锁存器。上面一个缓冲器用于读端口锁存器数据。1.2MCS-51系列单片机组成结构**原因:如果此时该端口的负载恰是一个晶体管基极,且原端口输出值为1,那么导通了的PN结会把端口引脚高电平拉低;若此时直接读端口引脚信号,将会把原输出的“1”电平误读为“0”电平。现采用读输出锁存器代替读引脚,图中,上面的三态缓冲器就为读锁存器Q端信号而设,读输出锁存器可避免上述可能发生的错误。**DQCLKQMUXP0.n读锁存器内部总线写锁存器读引脚地址/数据控制VCCT1T2P0口引脚1.2MCS-51系列单片机组成结构P0口必须接上拉电阻;在读信号之前数据之前,先要向相应的锁存器做写1操作的I/O口称为准双向口;三态输入缓冲器的作用:(ANLP0,A)1.2MCS-51系列单片机组成结构DQCLKQMUXP0.n读锁存器内部总线写锁存器读引脚地址/数据控制VCCT1T2P0口引脚准双向口:

从图中可以看出,在读入端口数据时,由于输出驱动FET并接在引脚上,如果T2导通,就会将输入的高电平拉成低电平,产生误读。所以在端口进行输入操作前,应先向端口锁存器写“1”,使T2截止,引脚处于悬浮状态,变为高阻抗输入。这就是所谓的准双向口。1.2MCS-51系列单片机组成结构2、P0作为地址/数据总线

在系统扩展时,P0端口作为地址/数据总线使用时,分为:

P0引脚输出地址/数据信息。DQCLKQMUXP0.n读锁存器内部总线写锁存器读引脚地址/数据控制VCCT1T2P0口引脚1.2MCS-51系列单片机组成结构CPU发出控制电平“1”,打开“与”门,又使多路开关MUX把CPU的地址/数据总线与T2栅极反相接通,输出地址或数据。由图上可以看出,上下两个FET处于反相,构成了推拉式的输出电路,其负载能力大大增强。DQCLKQMUXP0.n读锁存器内部总线写锁存器读引脚地址/数据控制VCCT1T2P0口引脚1.2MCS-51系列单片机组成结构P0引脚输出地址/输入数据输入信号是从引脚通过输入缓冲器进入内部总线。此时,CPU自动使MUX向下,并向P0口写“1”,“读引脚”控制信号有效,下面的缓冲器打开,外部数据读入内部总线。2、P0作为地址/数据总线----真正的双向口DQCLKQMUXP0.n读锁存器内部总线写锁存器读引脚地址/数据控制VCCT1T2P0口引脚1.2MCS-51系列单片机组成结构3P2的内部结构1.P2口作为普通I/O口DQCLKQMUXP2.n读锁存器内部总线写锁存器读引脚地址控制VCCRTP2口引脚CPU发出控制电平“0”

,使多路开关MUX倒向锁存器输出Q端,构成一个准双向口。其功能与P1相同。1.2MCS-51系列单片机组成结构2.P2口作为地址总线在系统扩展片外程序存储器扩展数据存储器且容量超过256B(用MOVX@DPTR指令)时,CPU发出控制电平“1”,使多路开关MUX倒内部地址线。此时,P2输出高8位地址。DQCLKQMUXP2.n读锁存器内部总线写锁存器读引脚地址控制VCCRTP2口引脚1.2MCS-51系列单片机组成结构4

P1口的内部结构

①P1口的一位的结构它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路组成----准双向口。DQCLKQP1.n读锁存器内部总线写锁存器读引脚VCCRTP1口引脚1.2MCS-51系列单片机组成结构DQCLKQP3.n读锁存器内部总线写锁存器读引脚VCCRTP3口引脚第二输入功能第二输出功能作为通用I/O口与P1口类似----准双向口(W=1)W1.2MCS-51系列单片机组成结构DQCLKQP3.n读锁存器内部总线写锁存器读引脚VCCRTP3口引脚第二输入功能第二输出功能P3第二功能(Q=1)此时引脚部分输入(Q=1、W=1)

,部分输出(Q=1、W输出)

。W1.2MCS-51系列单片机组成结构5

P3口的内部结构P3第二功能各引脚功能定义:P3.0:RXD串行口输入P3.1:TXD串行口输出P3.2:INT0外部中断0输入P3.3:INT1外部中断1输入P3.4:T0定时器0外部输入P3.5:T1定时器1外部输入P3.6:WR外部写控制P3.7:RD外部读控制1.2MCS-51系列单片机组成结构综述一.P0、P1、P2、P4四个口作为一般输入输出口时:1.当P0作为I/O口使用时,特别是作为输出时,输出级属于开漏电路,硬件电路必须外接上拉电阻才会有高电平输出;2.P0、P1、P2、P4四个口如果作为输入,软件必须先向相应的锁存器写“1”,才不会影响输入电平。1.2MCS-51系列单片机组成结构二.P0、P1、P2和P3口为准双向口,在内部差别不大,但使用功能有所不同。1.当CPU内部控制信号为“1”时,P0口作为地址/数据总线用,这时,P0口就无法再作为I/O口使用了。

2.P1口是用户专用8位准双向I/O口,具有通用输入/输出功能,每一位都能独立地设定为输入或输出。3.P2口是8位准双向I/O口。外接I/O设备时,可作为扩展系统的地址总线,输出高8位地址,与P0口一起组成16位地址总线。4.P3口一般用作第二功能端1.2MCS-51系列单片机组成结构1.什么是地址?

单片机有很多的寄存器和存储单元,这些寄存器和存储单元承担着不同的工作任务,当CPU需要对这些寄存器和存储单元进行读或写操作时,必须知道”它们在哪”。

为了让CPU能够准确有序的找到这些寄存器和存储单元,就必须对它们进行编号,而这些编号就称为“地址”。1.3MCS-51系列单片机的存储器结构1

2

3

4

5

6

7

8

9

10

11

12

13

1428

27

26

25

24

23

22

2120

19

18

17

16

15EPROM27641

2

3

4

5

6

7

8

9

10

11

12

13

1428

27

26

25

24

23

22

2120

19

18

17

16

15EPROM27641

2

3

4

5

6

7

8

9

10111213141516171819

2040

39

38

37

36

35

34

33

32

31302928272625242422211

2

3

4

5

6

7

8

9

10

11

12

13

1428

27

26

25

24

23

22

2120

19

18

17

16

15RAM62641

2

3

4

5

6

7

8

9

10

11

12

13

1428

27

26

25

24

23

22

2120

19

18

17

16

15RAM6264

器80318751805189C51片内RAM片内ROM256B(字节)4K1.3MCS-51系列单片机的存储器结构2.程序存储器程序存储器内部外部0000H0FFFH(4K)0000HFFFFH(64K)0000H0FFFH(4K)EA=1EA=00000H0001H0002H(PC)0000H是程序执行的起始单元,

在这三个单元存放一条

无条件转移指令中断5中断4中断3中断2中断10003H000BH0013H001BH0023H002BH外部中断0定时器0中断外部中断1定时器1中断串行口中断8位...0FFFH0FFEH程序存储器资源分布中断入口地址1.3MCS-51系列单片机的存储器结构在单片机C语言程序设计中,用户无需考虑程序的存放地址,编译程序会在编译过程中按照上述规定,自动安排程序的存放地址。例如:C语言是从main()函数开始执行的,编译程序会在程序存储器的0000H处自动存放一条转移指令,跳转到main()函数存放的地址;中断函数也会按照中断类型号,自动由编译程序安排存放在程序存储器相应的地址中。因此,读者只需了解程序存储器的结构就可以了。1.3MCS-51系列单片机的存储器结构0000HFFFFH(64K)内部外部3.数据存储器数据存储器00HFFH7FH80H(高128B)(低128B)RAM专用

寄存器00H07H08H0FH10H17H18H1FH0区R0R7R0R7R0R7R0R71区2区3区工作寄存器区可位寻址区20H2FH7F78070030H7FH用户数据缓冲区/内部RAM存储器

11第3区18H~1FH

01第1区08H~0FHRS1RS0寄存器区片内RAM地址

00第0区00H~07H10第2区10H~17H工作寄存器区选择位RS0、RS11.3MCS-51系列单片机的存储器结构注意:一个单元地址对应有8个位地址

MSB——MostSignificantBit(最高有效位)

LSB——LeastSignificantBit(最低有效位)单元地址2FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H7F776F675F574F473F372F271F170F07

MSB位地址LSB7E766E665E564E463E362E261E160E067D756D655D554D453D352D251D150D057C746C645C544C443C342C241C140C047B736B635B534B433B332B231B130B037A726A625A524A423A322A221A120A027971696159514941393129211911090178706860585048403830282018100800RAM位寻址区位地址表1.3MCS-51系列单片机的存储器结构☆离散分布有21个特殊功能寄存器SFR。☆

11个可以进行位寻址。☆特别提示:对SFR只能使用直接寻址方式,书写时可使用寄存器符号,也可用寄存器单元地址。高128个单元1.3MCS-51系列单片机的存储器结构在单片机的C语言程序设计中,可以通过关键字sfr来定义所有特殊功能寄存器,从而在程序中直接访问它们,例如:sfrP1=0x90;//特殊功能寄存器P1的地址是90H,对应P1口的8个I/O引脚在程序中就可以直接使用P1这个特殊功能寄存器了,下面语句是合法的:P1=0x00;//将P1口的8位I/O口全部清0C语言中,还可以通过关键字sbit来定义特殊功能寄存器中的可寻址位,在程序ex1_1.c中,采用了下面语句定义P1口的第0位:sbitP1_0=P1^0;通常情况下,这些特殊功能寄存器已经在头文件reg51.h中定义了,只要在程序中包含了该头文件,就可以直接使用已定义的特殊功能寄存器。如果没有头文件reg51.h,或者该文件中只定义了部分特殊功能寄存器和位,用户也可以在程序中自行定义。1.3MCS-51系列单片机的存储器结构1.4单片机最小系统电路1.时序电路在XTAL1和XTAL2引脚上外接定时元件,就能构成自激振荡电路。定时元件通常采用石英晶体和电容组成的并联谐振电路。电容器C1和C2主要起频率微调作用,电容值可选取为10~30pF左右。内部时钟方式如果单片机的时钟必须使用某一个外接的时钟信号,就无需外接晶振。由于此时的外接晶振引脚上没有晶振信号输入,内部的时钟电路将停振,此方式称为外部时钟方式。外部时钟方式1.4单片机最小系统电路

机器周期和指令周期(1)振荡周期:也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期,TX实验板上为11.0592MHZ。(2)状态周期:每个状态周期为时钟周期的2倍,是振荡周期经二分频后得到的。(3)机器周期:一个机器周期包含6个状态周期S1~S6,也就是12个时钟周期。在一个机器周期内,CPU可以完成一个独立的操作。(4)指令周期:它是指CPU完成一条操作所需的全部时间。每条指令执行时间都是有一个或几个机器周期组成。MCS-51系统中,有单周期指令、双周期指令和四周期指令。1.4单片机最小系统电路8051单片机的采用内部时钟方式,晶体振荡器的频率f为6MHZ,则:振荡周期=1/晶振频率=1/6µs;时钟周期=2*振荡周期=1/3µs

机器周期=6*时钟周期=2µs,指令周期=1~4倍机器周=2~8µs即机器周期=(1/晶振频率)*121.4单片机最小系统电路2.复位电路上电复位电路

简单的说就是在单片机的RST引脚上加高电平,时间不少于5ms。而高电平能够一直加在RST引脚上吗?当然不能,因为那样单片机将永远处于复位状态,为此,需要在单片机外部连接复位电路。

由于复位时高电平有效,当刚接上电源的瞬间,电容C1两端相当于短路,即相当于给RESET引脚一个高电平,等充电结束时(这个时间很短暂),电容相当于断开,这时已经完成了复位动作。1.4单片机最小系统电路带手动复位的按键复位在程序正常运行过程中,RESET引脚低电平,当按键按下去的时候,电源经过R1和R2分压电路,RESET引脚得到高电平,等按键抬起时,RESET引脚又回到低电平。手动复位动作完成。1.4单片机最小系统电路最小系统电路3.最小系统电路单片机最小系统是指单片机工作不可或缺的最基本连接电路。主要包括四部分,单片机芯片、电源电路、时钟电路和复位电路。1.4单片机最小系统电路1.编程语言51单片机的编程语言常用的有两种,一种是汇编语言,一种是C语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。对于开发周期来说,中大型的软件编写用C语言的开发周期通常要小于汇编语言很多。综合以上C语言的优点,本书选择C语言为单片机编程语言。单片机编程中所使用的C语言与ANSIC基本相同,只是在某些方面进行了扩展,故称作C51。1.5单片机系统开发软件KeilC512.开发环境

使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。目前市面上的编译器种类很多,主要有AmericanAutomation、IAR、Avocet、Bso/Tasking、DunfieldShareware、Keil、Intermetrics、MicroComputerControls等。其中KEIL、IAR、Bso/Tasking具有一定优势,应用较为广泛。

德国的KEIL公司的KEILuVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS-51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。1.5单片机系统开发软件KeilC51KeilC51启动窗口3.软件使用1.5单片机系统开发软件KeilC51建立工程文件1.5单片机系统开发软件KeilC51选择目标CPU1.5单片机系统开发软件KeilC51文本编缉窗口1.5单片机系统开发软件KeilC51增加文件到组中1.5单片机系统开发软件KeilC51选择文件类型1.5单片机系统开发软件KeilC51目标属性1.5单片机系统开发软件KeilC51产生执行文件1.5单片机系统开发软件KeilC51选择仿真方式1.5单片机系统开发软件KeilC51KeilC51内建了一个仿真CPU来模拟执行程序,该仿真CPU功能强大,可以在没有硬件和仿真器的情况下进行程序的调试。不过,软件模拟与真实的硬件执行程序还是有区别的,其中最明显的就是时序,具体表现在程序执行的速度和用户使用的计算机有关,计算机性能越好,运行速度越快。1.5单片机系统开发软件KeilC51总结一、基础知识MCS-51内部组成及信号引脚MCS-51存储器结构单片机最小系统电路三、开发软件keilC51二、单片机组成什么是单片机本章主要内容单片机应用技术

项目二流水灯系统设计2.1单片机的C语言2.2C51的数据与运算2.3C51流程控制语句2.4C语言的函数2.5数组的概念2.1单片机的C语言1.C语言的特点结构化语言丰富的数据类型便于维护管理与汇编语言相比,C语言的优点如下:不要求编程者详细了解单片机的指令系统,但需了解单片机的存储器结构;寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理;结构清晰,程序可读性强;编译器提供了很多标准库函数,具有较强的数据处理能力。2.C语言的结构

C语言程序以函数形式组织程序结构,C程序中的函数与其他语言中所描述的“子程序”或“过程”的概念是一样的。C程序基本结构2.1单片机的C语言一个C语言源程序是由一个或若干个函数组成,每一个函数完成相对独立的功能。每个C程序都必须有(且仅有)一个主函数main(),程序的执行总是从主函数开始,调用其他函数后返回主函数main(),不管函数的排列顺序如何,最后在主函数中结束整个程序。C语言程序中可以有预处理命令,预处理命令通常放在源程序的最前面。C语言程序使用“;”作为语句的结束符,一条语句可以多行书写,也可以一行书写多条语句。2.1单片机的C语言分隔符为分号2.2C语言数据与运算1.C51的数据与数据类型2.常量与变量3.C51的数据存储类型与8051存储器结构4.8051特殊功能寄存器(SFR)及其C51定义5.位变量(BIT)及其C51定义6.C51运算符表达式及其规则一.数据与数据类型数据——具有一定格式的数字或数值叫做数据数据类型——数据的不同格式叫做数据类型

单片机编程中所使用的是C51语言,与ANSIC基本相同,只是在某些方面进行了扩展。简单的说,C51语言是在ANSIC标准的基础上扩展了数据类型和关键字。C51编译器中int和short相同,float和double相同。

在ANSIC标准C语言中基本的数据类型为char、int、short、long、float和double,2.2C语言数据与运算KEILuVision2C51编译器所支持的数据类型数据类型长

度值

域unsigned

char单字节0~255signed

char单字节-128~+127unsigned

int双字节0~65535signed

int双字节-32768~+32767unsigned

long四字节0~4294967295signed

long四字节-2147483648~+2147483647float四字节±1.175494E-38~±3.402823E+38*1~3字节对象的地址bit位0或1sfr单字节0~255sfr16双字节0~65535sbit位0或1。默认值为signed类型2.2C语言数据与运算C-51的数据类型扩充定义sfr:特殊功能寄存器声明sfr16:sfr的16位数据声明sbit:特殊功能位声明bit:位变量声明2.2C语言数据与运算1.sfr特殊功能寄存器sfr是一种扩充数据类型,占用一个内存单元(1个字节),值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。sfr特殊功能寄存器名=特殊功能寄存器地址常数;sfrP0=0x80;sfrIE=0xA8H;#include<AT89X51.h>2.2C语言数据与运算2.sfr1616位特殊功能寄存器sfr16占用两个内存单元,值域为0~65535。sfr16和sfr一样用于操作特殊功能寄存器,所不同的是它用于操作占两个字节的寄存器。sfr16特殊功能寄存器名=特殊功能寄存器地址常数;

用sfr16定义16位特殊功能寄存器时,等号后面是它的低位地址,高位地址一定要位于物理低位地址之上。sfr16T2=0xCC;2.2C语言数据与运算sbit也是C51中的一种扩充数据类型,利用它可以访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。3.sbit可寻址位(1)sbit位变量名=位地址

sbitP1_1=0x91;

这样是把位的绝对地址赋给位变量。同sfr一样sbit的位地址必须位于80H-FFH之间。

(2)sbit位变量名=特殊功能寄存器名^位位置

sfrP1=0x90;

sbitP1_1=P1^1;//先定义一个特殊功能寄存器名再指定位变量名所在的位置。当可寻址位位于特殊功能寄存器中时可采用这种方法,例如sbitOV=PSW^2;

(3)sbit位变量名=字节地址^位位置

sbitP1_1=0x90^1;2.2C语言数据与运算二.常量与变量常量是在程序运行过程中不能改变值的量,如固定的数据表,字库等。1.常量(1)整型常量可以表示为十进制如123,0,-89等。十六进制则以0x开头如0x34,-0x3B等。(2)浮点型常量可分为十进制和指数表示形式。十进制由数字和小数点组成,如0.888,3345.345,0.0等。(3)字符型常量是单引号内的字符,如‘A',‘B'等(4)字符串型常量由双引号内的字符组成,如“TEST","OK"等。(5)位标量,它的值是一个二进制。常量的数据类型只有整型、浮点型、字符型、字符串型和位型。2.2C语言数据与运算常量定义的几种方式#defineFalse0x0

#defineTrue0x1//这里定义False为0,True为1

在程序中用到False编译时自动用0替换,同理True替换为1(1)用预定义语句可以定义常量unsigned

int

code

a=100;

//这一句用code把a定义在程序存储器中并赋值(2)用code定义2.2C语言数据与运算const

unsigned

int

c=100;

//用const定义c为无符号int常量并赋值。(3)用const定义

以上2,3两句它们的值都保存在程序存储器中,而程序存储器在运行中是不允许被修改的。2.2C语言数据与运算2.变量

变量就是一种在程序执行过程中其值能不断变化的量。变量的定义能使用所有c51编译器支持的数据类型。定义一个变量的格式

[存储种类]

数据类型

[存储器类型]

变量名表

data

unsignedchar

small

a;2.2C语言数据与运算存储器类型说明Data(00H-7FH)直接访问内部数据存储器(128字节),访问速度最快Bdata(20H-2FH)可位寻址内部数据存储器(16字节),允许位与字节混合访问xdata外部数据存储器(64KB),用MOVX@DPTR指令访问code程序存储器(64KB),用MOVC@A+DPTR指令访问

数据类型和变量名表是必要的,其它都是可选项。

unsignedchar

a;2.2C语言数据与运算三.C51的数据存储类型与8051存储器结构1.C51的数据存储类型类型关键字长度/bit说明data8直接访问内部数据存储器(128字节),访问速度最快bdata1可位寻址内部数据存储器(16字节),允许位与字节混合访问idata8间接寻址片内数据存储器,可访问片内全部RAM地址空间(256字节)pdata8分页寻址片外数据存储区(256字节),由MOVX@R0访问xdata16外部数据存储器(64KB),用MOVX@DPTR指令访问code16程序存储器(64KB),用MOVC@A+DPTR指令访问单片机存储类型及与8051存储空间的对应关系2.2C语言数据与运算变量的存储类型定义举例:chardatapulse;//data存储类型,该变量被定位在8051片内数据存储区

中(地址:00H~07H)。bitbdataflag;//bdata存储类型,该变量被定位在8051片内数据存储

区中的可位寻址区(地址:20H~2FH)。floatidata

x,y,z;//idata存储类型,该变量被定位在8051片内数据存

储区,并只能用间接寻址的方法进行访问。unsignedint

pdatalength;//pdata存储类型,该变量被定位在片外数据存储区,并用操作码MOVX@Ri访问。unsignedcharxdata

parameter[8][3][5];//xdata存储类型,该变量被定位在片外数据存储区,并占据8×3×5=120字节存储空间。2.2C语言数据与运算存储模式说明SMALL该模式与采用data存储类型方式相同,参数及局部变量放入可直接寻址的片内存储器(最大128字节),访问速度快、效率高。所有对象包括堆栈,都必须嵌入片内RAM。栈长很关键,因为实际栈长依赖于不同函数的嵌套层数。COMPACT该模式默认的存储类型是PDATA,参数及局部变量放入分页片外存储区(最大256字节),通过寄存器R0和R1(@R0,@R1)间接寻址,栈空间位于8051系统内部数据存储区中。LARGE该模式默认的存储类型是XDATA,参数及局部变量直接放入片外数据存储区(最大64KB),使用数据指针DPTR来进行寻址。用此数据指针进行访问效率较低,尤其是对两个或多个字节的变量,这种数据类型的访问机制直接影响代码的长度。另一不方便之处在于这种数据指针不能对称操作。存储模式及说明2.2C语言数据与运算

运算符就是完成某种特定运算的符号。运算符按其表达式中与运算符的关系可分为:单目运算符,双目运算符和三目运算符。

表达式则是由运算及运算对象所组成的具有特定含义的式子。

C是一种表达式语言,表达式后面加";"号就构成了一个表达式语句。

四.C51运算符表达式及其规则2.2C语言数据与运算

其中只有取正值和取负值运算符是单目运算符,其它则都是双目运算符。+加或取正值运算符

-减或取负值运算符

*乘运算符

/除运算符

%取余运算符表达式1算术运算符表达式21.算术运算符及其表达式(1)算术运算符(2)算术表达式2.2C语言数据与运算(3)优先级和结合性:

算术运算符的优先级:先乘除模,后加减,括号最优先算术运算符的结合性:自左至右方向2.赋值运算符变量

=

表达式;

a

=

0xFF;

//将常数十六进制数FF赋于变量ab

=

c

=

33;

//同时赋值给变量b,cd

=

e;

//将变量e的值赋于变量df

=

a+b;

//将变量a+b的值赋于变量f2.2C语言数据与运算3.增减量运算符++

增量运算符--

减量运算符作用就是对运算对象作加1和减1运算。注意:运算对象在符号前或后,其含义都是不一样的,虽然同是加1或减1。如:I++,++I,I--,--I。I++(或I--)

是先使用I的值,再执行I+1(或I-1)++I(或--I)

是先执行I+1(或I-1),再使用I的值。增减量运算符只允许用于变量的运算中,不能用于常数或表达式。2.2C语言数据与运算4.关系运算符及其表达式

大于<

小于>=

大于等于<=

小于等于==

等于!=

等于

前四个具有相同的优先级,后两个也具有相同的优先级,但是前四个的优先级要高于后2个的。(1)关系运算符2.2C语言数据与运算表达式1

关系运算符

表达式2(2)关系表达式

用关系运算符将两个表达式(可以是算术表达式、关系表达式、赋值表达式或逻辑表达式)连接起来的式子,称为关系表达式。关系表达式的值为逻辑值“真”或“假”,以1代表“真”,以0代表“假”。

例如:

(1)关系表达式“8==4”的值为

,表达式的值为

(2)关系表达式“5>0”的值为

,表达式的值为

2.2C语言数据与运算5.逻辑运算符及其表达式逻辑与&&

:条件式1

&&

条件式2逻辑或

||

:条件式1

||

条件式2逻辑非

!:

!

条件式2逻辑与:当条件式1“与”条件式2都为真时结果为真(非0值),不然为假(0值)。逻辑或:是指只要二个运算条件中有一个为真时,运算结果就为真,只有当条件式都不为真时,逻辑运算结果才为假逻辑非则是把逻辑运算结果值取反优先级:!(逻辑非)→&&(逻辑与)→||(逻辑或),逻辑非的优先值最高。运算结果只有0和1。2.2C语言数据与运算6.位操作及其表达式变量1

位运算符

变量2优先级从高到低依次是:“~”(按位取反)→“<<”(左移)

→“>>”(右移)

→“&”(按位与)→“^”(按位异或)→“|”(按位或)&按位与|按位或^按位异或

~按位取反<<左移>>右移2.2C语言数据与运算例:若a=1100,0011B=0xc3,将a的值右循环两位main(){ unsignedchara=0xc3,b,c; intn=2; b=a<<(8-n) c=a>>n; a=c|b;}2.2C语言数据与运算7.复合赋值运算符复合赋值运算符就是在赋值运算符“=”的前面加上其他运算符。+=加法赋值>>=右移位赋值-=减法赋值&=逻辑与赋值*=乘法赋值|=逻辑或赋值/=除法赋值^=逻辑异或赋值%=

取模赋值

-=

逻辑非赋值<<=

左移位赋值变量

复合赋值运算符

表达式含义就是变量与表达式先进行运算符所要求的运算,再把运算结果赋值给参与运算的变量。i+=2等价于i=i+2a*=b+5等价于a=a*(b+5)x%=3等价于x=x%32.2C语言数据与运算1)变量赋值时发生的隐式转换,“=”号右边的表达式的数据类型转换成左边变量的数据类型。8.强制类型转换运算符voidmain(void){ unsignedchara; unsignedintb; while(1) { b=100*4; a=b; }}把INT赋值给CHAR字符型变量,得到的CHAR将会是INT的低8位。如把浮点数赋值给整型变量,小数部分将丢失。2.2C语言数据与运算2)所有char型的操作数转换成int型。3)两个具有不一样数据类型的操作数用运算符连接时,隐式转换会按以下次序进行:如有一操作数是float类型,则另一个操作数也会转换成float类型;如果一个操作数为long类型,另一个也转换成long;如果一个操作数是unsigned类型,则另一个操作会被转换成unsigned类型。单片机c语言中只有char,int,long及float这几种基本的数据类型能被隐式转换。而其它的数据类型就只能用到显示转换。强制转换运算符应遵循以下的表达形式:(类型)

表达式2.2C语言数据与运算编程1:点亮P1.0处的小灯LED。思考:点亮P1口的8盏小灯2.2C语言数据与运算编程2:使P1.0处的小灯LED以周期是2S的时间闪烁。2.2C语言数据与运算编程3:8盏小灯L1~L8依次接在P1口的8个引脚上,开始时L1→L2→L3→L4→┅→L8→L1→┅→L8亮,重复循环。2.2C语言数据与运算编程4:8盏小灯L1~L8依次接在P1口的8个引脚上,开始时L1→L2→L3→L4→┅→L8→L7→L6┅→L1→L2→┅亮,重复循环。2.3C语言的基本语句C语言程序的执行部分由语句组成。C语言提供了丰富的程序控制语句,按照结构化程序设计的基本结构:顺序结构、选择结构和循环结构,组成各种复杂程序。这些语句主要包括表达式语句、复合语句、选择语句和循环语句等。1.表达式语句和复合语句表达式语句是最基本的C语言语句。表达式语句由表达式加上分号“;”组成,其一般形式如下:

表达式;执行表达式语句就是计算表达式的值。在C语言中有一个特殊的表达式语句,称为空语句。空语句中只有一个分号“;”,程序执行空语句时需要占用一条指令的执行时间,但是什么也不做。在C51程序中常常把空语句作为循环体,用于消耗CPU时间等待事件发生的场合。2.3C语言的基本语句把多个语句用大括号{}括起来,组合在一起形成具有一定功能的模块,这种由若干条语句组合而成的语句块称为复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。复合语句在程序运行时,{}中的各行单语句是依次顺序执行的。在C语言的函数中,函数体就是一个复合语句。2.3C语言的基本语句2.选择语句基本if语句的格式如下:if(表达式){

语句组;

}if语句执行过程:当“表达式”的结果为“真”时,执行其后的“语句组”,否则跳过该语句组,继续执行下面的语句。

2.3C语言的基本语句if语句中的“表达式”通常为逻辑表达式或关系表达式,也可以是任何其他的表达式或类型数据,只要表达式的值非0即为“真”。以下语句都是合法的:

if(3){……}if(x=8){……}if(P3_0){……}在if语句中,“表达式”必须用括号括起来。在if语句中,花括号“{}”里面的语句组如果只有一条语句,可以省略花括号。如“if(P3_0==0)P1_0=0;”语句,但是为了提高程序的可读性和防止程序书写错误,建议读者在任何情况下,都加上花括号。2.3C语言的基本语句if-else语句的一般格式如下:if(表达式) {

语句组1;

} else{

语句组2;

}if-else语句执行过程:当“表达式”的结果为“真”时,执行其后的“语句组1”,否则执行“语句组2”2.3C语言的基本语句if-else-if语句是由ifelse语句组成的嵌套,用来实现多个条件分支的选择,其一般格式如下:if(表达式1) {

语句组1;

} elseif(表达式2){

语句组2;

} …elseif(表达式n){

语句组n;

}else{

语句组n+1;

}2.3C语言的基本语句2.3C语言的基本语句多分支选择的switch语句,其一般形式如下:

switch(表达式){ case常量表达式1:语句组1;break; case常量表达式2:语句组2;break; …… case常量表达式n:语句组n;break; default:语句组n+1;}该语句的执行过程是:首先计算表达式的值,并逐个与case后的常量表达式的值相比较,当表达式的值与某个常量表达式的值相等时,则执行对应该常量表达式后的语句组,再执行break语句,跳出switch语句的执行,继续执行下一条语句。如果表达式的值与所有case后的常量表达式均不相同,则执行default后的语句组。2.3C语言的基本语句while语句用来实现“当型”循环,执行过程:首先判断表达式,当表达式的值为真(非0)时,反复执行循环体。为假(0)时执行循环体外面的语句。循环体循环继续的条件表达式下一条语句非0(真)0(假)循环体语句组while执行过程格式:while(循环继续的条件表达式)

{语句组;}花括号不能丢掉!请问:下述程序实现了什么功能?main(){inti,sum=0;while(i<=10){sum=sum+i;i++;}}3.循环语句2.3C语言的基本语句do-while语句用来实现“直到型”循环执行过程:先无条件执行一次循环体,然后判断条件表达式,当表达式的值为真(非0)时,返回执行循环体直到条件表达式为假(0)为止。绝对不能少分号!循环体格式:do{

循环体语句组;

}while(循环继续条件);花括号不能丢掉!循环继续的条件表达式下一条语句非0(真)0(假)循环体语句组请问:下述程序实现了什么功能?main(){inti,sum=0;do{sum=sum+i;i++;}while(i<=100);}2.3C语言的基本语句总循环次数已确定的情况下,可采用for语句形式为:for语句的一般形式:

for(循环变量赋初值;循环继续条件;循环变量增值)

{

循环体语句组;

} 分隔符为分号请问:下述程序实现了什么功能?main(){inti,y=0;for(i=1;i<=10;i++){y=y+i;}}2.3C语言的基本语句循环继续条件for的下一条语句非0(真)0(假)循环体语句组循环变量赋初值循环变量增值for语句循环执行过程只求解一次要执行若干次,具体次数由“循环继续条件”决定for(循环变量赋初值;循环继续条件;循环变量增值)

{循环体语句组;} for语句不仅可用于循环次数已经确定的情况,也可用于循环次数虽不确定,但给出了循环继续条件的情况,它完全可以代替while语句和do-while语句。2.3C语言的基本语句2.4C语言的函数1.函数分类标准库函数用户自定义函数

while语句实现While(表达式)

{语句(内部可为空)}

特点:先判断表达式,后执行语句。

原则:若表达式非0,即为真,那么执行语句。否则跳出while语句。2.4C语言的函数2.延时函数的编写#include<reg51.h>Sbitp10=P1^0;Main(){unsignedinta;a=50000;p10=0;while(a--);a=50000;p10=1;while(a--);}1.软件仿真看延时时间2.更改a的值超过值域范围看看a的值2.4C语言的函数for语句实现For(表达式1;表达式2;表达式3)

{语句(内部可为空)}

执行过程:

1.求解一次表达式1.

2.求解表达式2,若其值为真(非0即为真),则执行for中语句。然后执行第3步。否则结束for语句,直接跳出,不再执行第3步。

3.求解表达式3.

4.跳到第2步重复执行。2.4C语言的函数delay函数Voiddelay(){for(b=500;b>0;b--){for(c=200;c>0;c--);}}1.软件仿真看时间2.子程序的位置main前main后(声明)3.充分利用stepstepover看程序运行情况看变量带参的delay子函数Voiddelay(unsignedcharx){for(b=500;b>0;b--){for(c=200;c>0;c--);}}1.子函数声明2.带参的好处看实参到形参传递2.4C语言的函数蜂鸣器响2.4C语言的函数3.简单程序的编写Sbitbeep=P2^1;Beep=0;如图所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。例1模拟开关灯2.4C语言的函数如图所示,AT89S51单片机的P1.0-P1.3接四个发光二极管L1-L4,P1.4-P1.7接了四个开关K1-K4,编程将开关的状态反映到发光二极管上。(开关闭合,对应的灯亮,开关断开,对应的灯灭)。例题2多路开关状态指示2.4C语言的函数做单一灯的左移右移,硬件电路如图所示,八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮,开始P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0亮,重复循环。例题3:广告灯的左移右移2.4C语言的函数1.第一盏灯亮第一二亮到全亮2.移位子程序编写(P75)temp=0xfe;P1=temp;delay();for(i=1;i<8;i++){a=temp<<i;

温馨提示

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

评论

0/150

提交评论