《单片机项目化教程(C语言版)(第2版)》全套教学课件_第1页
《单片机项目化教程(C语言版)(第2版)》全套教学课件_第2页
《单片机项目化教程(C语言版)(第2版)》全套教学课件_第3页
《单片机项目化教程(C语言版)(第2版)》全套教学课件_第4页
《单片机项目化教程(C语言版)(第2版)》全套教学课件_第5页
已阅读5页,还剩528页未读 继续免费阅读

下载本文档

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

文档简介

单片机项目化教程(C语言版)1-1

初识单片机一、什么是单片机单板机将CPU芯片、存储器芯片、I/O接口芯片和简单的输入/输出设备(小键盘、LED显示器)等装配在一块印刷电路板上,再配上监控程序(固化在ROM中),就构成了一台单板微型计算机(简称单板机)。单板机一、什么是单片机单板机单板机的输入/输出设备简单,软件资源少,使用不方便。早期主要用于微型计算机原理的教学及简单的测控系统,现在已很少使用。一、什么是单片机单片机是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU、存储器、基本输入/输出(I/O)接口电路、定时/计数器和中断系统等,都制作在一块集成芯片上,构成一个完整的微型计算机。由于它的结构与指令功能都是按照工业控制要求设计,因此单片机又被称为微控制器(Micro-ControllerUnit,简称MCU)。一、什么是单片机单片机应用系统单片机+接口电路及外设等+软件硬件单片机应用系统由硬件和软件组成硬件是应用系统的基础软件是在硬件的基础上对其资源进行合理调配和使用,从而完成应用系统所要求的任务,二者相互依赖,缺一不可。一、什么是单片机CPUROM/EPROMRAM定时/计数器并行接口串行接口中断系统P0P1P2P3TXDRXDINT0INT1T0T1XTAL1XTAL2时钟电路内中断外中断外部事件计数64KB总线扩展控制器51单片机内部结构二、单片机的特点(1)体积小、结构简单、可靠性高

单片机把各功能部件集成在一个芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力。另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合在恶劣环境下工作。二、单片机的特点

(2)控制能力强单片机虽然结构简单,但是它“五脏俱全”,已经具备了足够的控制功能。单片机具有较多的I/O口,CPU可以直接对I/O进行操作、算术操作、逻辑操作和位操作,指令简单而丰富。所以单片机也是“面向控制”的计算机。二、单片机的特点(3)优异的性能/价格比

由于单片机构成的硬件结构简单、开发周期短、控制功能强、可靠性高,因此,在达到同样功能的条件下,用单片机开发的控制系统比用其它类型的微型计算机开发的控制系统价格更便宜。二、单片机的特点(4)简单易学由于单片机所需的外部器件很少,因此对于初学者只需要花费极少时间学习硬件电路的设计,而把大部分的时间放在程序设计上,这样大大提高了学习效率。简单易学感谢您的观看Thanks

for

your

attention.

单片机项目化教程(C语言版)

1-2初识单片机一、进制十进制十进制数是我们最常用的,它的基数为“十”,所使用的数码为0~9共10个数字。“逢十进一,借一当十”是十进制数的特点。一、进制数字电路中只有两种电平特性,即高电平和低电平,这也就决定了数字电路中使用二进制。二进制二进制是使用0和1两个数码来表示的数,它的基数是2,二进制的特点是“逢二进一,借一当二”。一、进制二进制十进制数1二进制数是1B这里B是表示二进制数的后缀十进制数2二进制数是10B1+1=10B一、进制十进制的0~15表示成十六进制数分别为0~9,A,B,C,D,E,F,即十进制的10对应十六进制的A,11对应B,12对应C,13对应D,14对应E,15对应F。十六进制特点是“逢十六进一,借一当十六”。是二进制的简短表示形式。十六进制一、进制一般在十六进制数后面加上后缀H,表示该数为十六进制数,如90H,ACH。十六进制表示方法在C语言编程时要写成“0x90,0xac”,在数的最前面加上“0x”表示该数为十六进制数。一、进制二进制与十六进制的转换当二进制数与十六进制数转换时,因为四位二进制数正好可以表示0`F这16个数字,所以转换时可以从最低位开始,每四位二进制数字分为一组,不足四位的用0补齐4位,对应进行相互转换即可。例如,二进制数11110100101转换成十六进制数:(11110100101)2=(011110100101)2=(7A5)16一、进制二进制与十六进制的转换十进制二进制十六进制十进制二进制十六进制000000810008100011910019200102101010A300113111011B401004121100C501015131101D601106141110E701117151111F一、进制我们在进行单片机编程时常常会用到其他较大的数,这时我们用Windows系统自带的计算器,可以很方便地进行二进制、八进制、十进制、十六进制数直接的任意转换。感谢您的观看Thanks

for

your

attention.

单片机项目化教程(C语言版)

1-2初识单片机二进制的逻辑运算与“与”运算是实现“必须都有,否则就没有”这种逻辑关系的一种运算。C语言中运算符为“&”,其运算规则如下:0&0=0,0&1=1&0=0,1&1=1。其运算符号如图所示。二进制的逻辑运算与0101010110101010&00000000二进制的逻辑运算或“或”运算是实现“只要其中之一有就有”这种逻辑关系的一种运算。C语言中运算符为“︱”其运算规则如下:0︱0=0,0︱1=1︱0=1,1︱1=1。其运算符号如图所示。二进制的逻辑运算或0101010110101010|11111111二进制的逻辑运算非“非”运算是实现“求反”这种逻辑关系的一种运算。C语言中运算符为“!”,其运算规则如下:!0=1,!1=0。其运算符号如图所示。二进制的逻辑运算非C语言中“~”表示“按位取反”运算。例如~01010101=(10101010)而上面讲到的“!”运算只是对单一位进行运算。感谢您的观看Thanks

for

your

attention.

单片机项目化教程(C语言版)

1-2初识单片机一、单片机的电平特性数字电路中只有两种电平低电平高电平单片机的输入和输出为TTL电平一、单片机的电平特性低电平高电平单片机的输入和输出为TTL电平+5V

0V等价于逻辑1等价于逻辑0一、单片机的电平特性低电平高电平计算机的串口为RS-232C电平-12V

+12VRS-232C电平为负逻辑电平一、单片机的电平特性计算机单片机一、单片机的电平特性计算机与单片机之间通讯时需要加电平转换芯片max232感谢您的观看Thanks

for

your

attention.

单片机项目化教程(C语言版)1-3keil软件使用Keil软件使用打开keil软件,版本μVision2,μvision3,μvision4都一样,在这里用μvision4版本,如图所示。Keil软件使用Keil软件使用我们要建立新的工程,选择Project→newμvisionproject…Keil软件使用选择工程要保存的路径,输入工程文件名,如图Keil软件使用点击保存后会弹出一个对话框,要求用户选择单片机型号,可以根据用户使用的单片机来选择,我们使用的STC89单片机是兼容51内核的,KeilC51几乎支持所有的51内核单片机,51内核具有通用型,如果程序用的资源不是太复杂,我们可以选择任意一款51单片机内核就行。Keil软件使用如果出现下面的界面:单击是就可以,意思是将单片机的启动代码添加到工程,我们不用修改。Keil软件使用单击菜单file→new选项,或者单击界面上的快捷图标Keil软件使用

界面显示的Text1就是我们刚刚加入的文件,但是这个文件与我们的工程还没有直接联系起来,单击图标,保存我们当前的text1文件,输入要保存的文件名,同时要输文件扩展名,扩展名很关键,用C语言编写的程序,则必须为**.c,汇编语言必须为**.asm(**为文件名),文件名是用户自己取的。填好文件名后单击保存。Keil软件使用回到编辑界面,单击Target1前面的“+”号,然后在SourceGroup1上右键单击,选择AddFilestoGroupSourceGroup1,选中我们刚才建立的.c文件,这里是ledtest.c,单击add,只需单击一次。之后单击Close就可以。

回到主界面后,单击SourceGroup1前的“+”号,刚刚添加的文件显示在里面。建立工程文件Keil软件使用产生执行文件感谢您的观看Thanks

for

your

attention.

单片机应用技术项目二学习单片机硬件系统目录contens任务一点亮第一个LED灯任务二LED灯闪烁任务三单片机控制蜂鸣器发声教学目标单片机外部引脚及功能单片机最小系统单片机存储器结构单片机并行I/O端口重点、难点重点:单片机外部引脚及功能难点:单片机并行I/O端口教学目标及重点难点任务一

点亮第一个LED灯一、LED灯点亮二、89C51的信号引脚三、单片机最小系统电路四、51单片机的存储器结构一、LED灯点亮LED灯介绍半导体二极管的一种可以把电能转化成光能;常简写为LED。发光二极管与普通二极管一样是由一个PN结组成,也具有单向导电性。由镓(Ga)与砷(AS)、磷(P)的化合物制成的二极管能发出不同的光。一、LED灯点亮

红色贴片LED灯靠电流驱动,电压1.8V~2.2V,电流1到20mA,在1到5mA亮度有所变化,5mA以上亮度基本无变化。一、LED灯点亮发光二极管规律:单向导电性,通过5mA左右电流即可发光,电流越大,亮度越强,但若电流过大会烧毁二极管,一般控制在3~20mA。工作电压:

红色发光二极管1.7-2.5V

绿色发光二极管2.0-2.4V

黄色发光二极管1.9-2.4V

蓝/白色发光二极管3.0-3.8V一、LED灯点亮1.任务要求设计一个电路,STC89C51单片机的P0.0引脚连接一个LED灯,控制LED闪烁。以单片机为核心的电子设计硬件设计软件设计单片机最小系统加上最简单的输出电路来驱动LED编程控制P0.0引脚的电平状态,使其持续一段时间的高电平,再持续一段时间的低电平2.任务分析一、LED灯点亮LED灯的工作原理阳极阴极1+2.2V0V0一、LED灯点亮10单片机限流LED灯的工作原理一、LED灯点亮LED灯的工作原理STC89C51

P0.00V单片机的I/O端口

单片机驱动一只发光二极管的原理电路图一、LED灯点亮限流电阻二极管串联电阻的目的是为了防止发光二极管和P0.0引脚流过的电流过大,烧毁二极管或单片机,所以该电阻也称为“限流电阻”。限流电阻的选择:假设电源电压为VCC,发光二极管的导通压降为VDD,导通时流过二极管的电流为I,则限流电阻R为:R=(VCC-VDD)/I例如,若二极管的导通压降为2.2V,导通时流过的电流为5mA,则限流电阻为560Ω。一、LED灯点亮LED灯点亮程序voidmain(){

while(1) {

LED=1;

//点亮LED

}}#include<reg52.h>

//此文件中定义了单片机的一些特殊功能寄存器sbitLED=P0^0;

//将单片机的P0.0端口定义为led如何点亮LED灯?LED=1;如何熄灭LED灯?LED=0;sbit用法:sbit变量名=地址值;一、LED灯点亮LED灯电路连接图二、89C51的信号引脚1.89C51单片机信号引脚简介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读选通信号RXD/

TXD/

INT0/INT1/

T0/

T1/

WR/

RD/1

2

3

4

5

6

7

8

9

10111213141516171819

2040

39

38

37

36

35

34

33

32

313029282726252424222180318051875189C51二、89C51的信号引脚89C51系列单片机芯片引脚及其功能89C51是标准的40引脚双列直插封装(DIP)集成电路芯片1.主电源和时钟振荡电路引脚VCC(40脚) 运行和程序校验时接+5V电源VSS

(20脚) 地线XTAL1(19脚)用作晶体振荡电路的反相器输入端,内部接至振荡器的反相放大器。当采用外部时钟时,对于HMOS单片机,该引脚接地;对于CHMOS单片机,该引脚作为外部振荡信号的输入端。

XTAL2(18脚)用作晶体振荡电路的反相器输出端,内部接至时钟发生器。当采用外部时钟时,对于HMOS单片机,该引脚接收振荡器信号;对于CHMOS单片机,该引脚悬浮。二、89C51的信号引脚2.输入/输出(I/O)引脚P0.0~P0.7(39脚~32脚):8位漏极开路的双向I/O口

当使用片外ROM和RAM时,用作低8位地址和数据分时复用。P1.0~P1.7(1脚~8脚):8位带上拉电阻的准双向I/O口

在编程/校验期间,用作输入低8位地址。对于8052,P1.0是定时器T2的计数输入端;P1.1是定时器T2的外部输入端。

P2.0~P2.7(21脚~28脚):8位带上拉电阻的准双向I/O口

当使用片外ROM和RAM时,输出高8位地址。

P3.0~P3.7(10脚~17脚):8位带上拉电阻的准双向I/O口

P3口具有第二功能在单片机中,“口”是一个集数据输入缓冲、输出驱动及锁存等多项功能于一体的I/O电路。二、89C51的信号引脚3.控制信号引脚RST/VPD(9引脚):RST为复位信号输入端。当RST端保持2个机器周期以上高电平时,单片机完成复位操作。第二功能VPD为内部RAM的备用电源输入端。当主电源VCC发生断电,降到一定电压值时,可通过VPD为单片机内部RAM提供电源,以保护片内RAM中的信息不丢失,上电后能继续正常运行。ALE /PROG(30引脚):ALE为地址锁存允许信号在系统扩展时,ALE用于控制把P0口输出的低8位地址送入锁存器锁存起来,以实现低8位地址和数据的分时传送。由于ALE是以1/6晶振频率的固定频率输出的正脉冲,故可作为外部时钟或外部定时脉冲使用。ALE可驱动8个LSTTL门。第二功能PROG是对8751内部EPROM编程时的编程脉冲输入端。二、89C51的信号引脚PSEN(29引脚):外部程序存储器(ROM)读选通信号访问外部ROM时,PSEN产生负脉冲作为外部ROM选通信号。访问外部RAM或内部ROM时,不会产生有效的PSEN信号。

PSEN可驱动8个LSTTL门。EA/VPP(31引脚):EA为访问程序存储器(ROM)控制信号对8051和8751,它们的片内有4KB的ROM,当EA为高电平时,若访问的地址空间在0~4KB范围内,CPU访问片内ROM;若访问的地址范围超过4KB时,CPU将自动访问外部ROM。EA保持低电平,则访问外部ROM。对于8031,EA必须接地,只能访问外部ROM。二、89C51的信号引脚P3口的第二功能口线第二功能功能含义P3.0RXD串行数据接收P3.1TXD串行数据发送P3.2INT0外部中断0申请P3.3INT1外部中断1申请P3.4T0定时器/计数器0计数输入P3.5T1定时器/计数器1计数输入P3.6WR外部RAM写选通P3.7RD外部RAM读选通三、单片机最小系统电路三、单片机最小系统电路三、单片机最小系统电路1.单片机时钟电路单片机本身是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序协调工作。时钟电路用于产生单片机工作所需要的时钟信号。三、单片机最小系统电路1.单片机时钟电路时钟信号的产生(内部方式时钟)89C51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2。外接作为反馈元件的晶体后成为自激振荡器,晶体呈感性,与微调电容C1、C2构成并联谐振回路。

振荡器的频率主要取决于晶体,电容有微调作用。晶体的振荡频率范围通常是1.2~12MHz,电容C1、C2一般取30pF。晶体振荡频率越高,系统的时钟频率越高,单片机运行速度越快。三、单片机最小系统电路1.单片机时钟电路

关于89C51系列单片机的时序概念有4个,可用定时单位来说明,从小到大依次是:节拍、状态、机器周期和指令周期,下面分别加以说明。1)节拍把振荡脉冲的周期定义为节拍,用P表示,也就是晶振的振荡频率fosc。2)状态振荡脉冲fosc经过二分频后,就是单片机时钟信号的周期,定义为状态,用S表示。一个状态包含两个节拍,其前半周期对应的节拍叫P1,后半周期对应的节拍叫P2。3)机器周期

89C51系列单片机采用定时控制方式,有固定的机器周期。规定一个机器周期的宽度为6个状态,即12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。小提示当振荡脉冲频率为12MHz时,一个机器周期为1µs;当振荡脉冲频率为6MHz时,一个机器周期为2µs。三、单片机最小系统电路1.单片机时钟电路牢牢记住振荡周期=晶振频率fosc的倒数;1个机器周期=12个振荡周期;1个指令周期=1、2、4个机器周期三、单片机最小系统电路2.单片机复位电路

复位方式和复位电路复位是单片机的初始化操作,其主要功能是把PC初始化为0000H,使单片机从0000H单元开始执行程序。复位后,单片机才能开始正常工作。RST引脚是复位信号的输入端,在单片机的RST端加上高电平(持续2个机器周期以上),单片机即进入复位工作方式。复位不影响MCS-51单片机内部RAM的状态,只要RST输入端保持高电平,将循环复位。RST返回低电平后,CPU从0000H地址开始执行程序。单片机系统在运行出错或进入死循环时,可按复位键重新启动。三、单片机最小系统电路2.单片机复位电路复位后单片机有关寄存器的状态寄存器复位状态PC0000HACC00HPSW00HSP07HDPTR0000HIP×××00000BIE0××00000BP0~P3FFHTCON00H寄存器复位状态TMOD00HTL000HTH000HTL100HTH100HSCON00HSBUF未定PCON(HMOS)0×××××××BPCON(CHMOS)0×××0000B三、单片机最小系统电路2.单片机复位电路(PC)=0000H表示复位后程序的入口地址为0000H;(PSW)=00H,其中RS1(PSW.4)=0,RS0(PSW.3)=0,表示复位后单片机选择工作寄存器第0组;(SP)=07H表示复位后堆栈在片内RAM的08H单元处建立;P0口~P3口锁存器为全1状态,说明复位后这些并行接口可以直接作输入口,无须向端口写1;定时器/计数器、串行口、中断系统等特殊功能寄存器复位后的状态对各功能部件工作状态的影响,将在后续有关章节介绍。三、单片机最小系统电路2.单片机复位电路89C51基本复位电路有3种:上电复位、按键电平复位和按键脉冲复位。上电自动复位:通过电容充电来实现。接通电源即可完成系统的复位。按键手动复位:按下复位按钮即可复位。分为电平方式和脉冲方式两种。四、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(字节)4K64K64K四、51单片机的存储器结构(1)程序存储器(ROM)程序存储器内部外部0000H0FFFH(4K)0000HFFFFH(64K)0000H0FFFH(4K)0000H0001H0002H(PC)0000H是程序执行的起始单元,

在这三个单元存放一条

无条件转移指令中断5中断4中断3中断2中断10003H000BH0013H001BH0023H002BH外部中断0定时器0中断外部中断1定时器1中断串行口中断8位...0FFFH0FFEHEA=1EA=0程序存储器资源分布中断入口地址四、51单片机的存储器结构(1)程序存储器(ROM)当芯片引脚EA为高电平时,89C51的程序计数器PC在0000H~0FFFH(4KB)地址时从内部ROM取指令,超过4KB时,CPU自动转向外部ROM执行程序。如果EA为低电平(接地),则所有取指令操作均在外部ROM中进行,这时外部扩展的ROM从0000H开始编址。四、51单片机的存储器结构0000HFFFFH(64K)内部外部(2)数据存储器(RAM)数据存储器00HFFH7FH80H(高128B)(低128B)RAM专用

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

11第3区18H~1FH

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

00第0区00H~07H

10第2区10H~17H工作寄存器区选择位RS0、RS1PSW位地址

CYACF0RS1RS0OVF1P四、51单片机的存储器结构RAM用于存放运算中间结果,用作缓冲和数据暂存,以及设置特征标志等。8051片内有256B的RAM空间,片外有64KB的RAM空间,两个存储空间独立寻址。内部RAM低128字节地址空间(00H~7FH)为内部RAM区,是供用户使用的数据存储器单元,作为处理问题的数据缓冲器。高128字节地址空间(80H~FFH)为特殊功能寄存器区(SFR区),共21个特殊功能寄存器,也就是128个字节单元中只有21个字节单元能够被用户使用。内部RAM存储空间小,仅用8位地址寻址,但存取速度比外部RAM快。(2)数据存储器(RAM)四、51单片机的存储器结构RAM用于存放运算中间结果,用作缓冲和数据暂存,以及设置特征标志等。8051片内有256B的RAM空间,片外有64KB的RAM空间,两个存储空间独立寻址。内部RAM低128字节地址空间(00H~7FH)为内部RAM区,是供用户使用的数据存储器单元,作为处理问题的数据缓冲器。高128字节地址空间(80H~FFH)为特殊功能寄存器区(SFR区),共21个特殊功能寄存器,也就是128个字节单元中只有21个字节单元能够被用户使用。内部RAM存储空间小,仅用8位地址寻址,但存取速度比外部RAM快。(2)数据存储器(RAM)任务二

单片机控制LED灯闪烁一、LED灯闪烁设计二、LED闪烁的延时方法一、LED灯闪烁设计如何点亮LED灯?如何熄灭LED灯?单向导通性阳极阴极1+3V00VSTC89C51

P0.00V单片机的I/O端口

单片机驱动一只发光二极管的原理电路一、LED灯闪烁设计LED灯点亮程序如何点亮LED灯?如何熄灭LED灯?voidmain(){

while(1) {

}}#include<reg52.h>LED=1;//点亮LEDLED=0;//熄灭LEDsbitLED=P0^0;LED=1;LED=0;点亮和熄灭的间隔时间怎么调控?二、LED闪烁的延时方法常用的延时方法1.非精确延时方法

1.for(i=0;i<100;i++); 2.i=100;while(i--);2.精确延时方法

1.利用库函数_nop_();(需要include<intrins.h>) 2.利用定时器进行定时 (后边的课程进行介绍)二、LED闪烁的延时方法1.非精确控制方法-延时函数总循环次数已确定的情况下,可采用for语句形式为:for语句的一般形式:

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

{

循环体语句组;

} 分隔符为分号请问:下述程序实现了什么功能?main(){inti,y=0;for(i=1;i<=10;i++){y=y+i;}}二、LED闪烁的延时方法1.非精确控制方法-延时函数while语句用来实现“当型”循环,执行过程:首先判断表达式,当表达式的值为真(非0)时,反复执行循环体。为假(0)时执行循环体外面的语句。循环体循环继续的条件表达式下一条语句非0(真)0(假)循环体语句组while执行过程格式:while(循环继续的条件表达式)

{

语句组;}花括号不能丢掉!二、LED闪烁的延时方法请问:下述程序实现了什么功能?main(){inti,sum=0;while(i<=10) { sum=sum+i; i++; }}1.非精确控制方法-延时函数二、LED闪烁的延时方法延时子函数按照规定的格式,将一个子任务编写成一个函数。函数的定义函数的划分函数从形式上划分,分为无参数函数和有参数函数及空函数。二、LED闪烁的延时方法延时子函数(1)无参函数:仅完成某个功能,不需回送到执行的具体结果。例如:无参数传递的延时子程序:循环的次数决定了你延时的时间长短。形式1:voiddelay(){unsignedinti;for(i=0;i<10000;i++);}形式2:voiddelay(){unsignedinti,j;for(i=0;i<100;i++)for(j=0;j<200;j++);}二、LED闪烁的延时方法延时子函数(2)有参函数:通过执行函数得到一个明确的执行结果,该结果需要回送到调用函数中。例如:有参数传递的延时子程序:可以随时改变k的传递值以达到不同的延时。voiddelay(unsignedintk){ unsignedinti,j; for(i=0;i<k;i++)for(j=0;j<200;j++);}二、LED闪烁的延时方法函数定义的格式延时子函数函数类型函数名(类型形参1,类型形参2,…)

{

说明部分语句部分

}二、LED闪烁的延时方法函数定义的格式延时子函数

1.类型符表示函数的返回值类型:

若无返回值:类型符void;若有返回值:函数名前有类型符,且利用return语句将函数值返回调用函数。2.return语句:格式return表达式;return(表达式);编写函数时,若求函数值,就要用return,若函数类型为void,则不用return语句。二、LED闪烁的延时方法延时子函数功能:return语句先计算表达式的值,再将该值作为函数运算的结果回送给调用者。如果函数类型与return语句中表达式类型不一致,系统以函数类型为准,返回时自动进行类型转换。二、LED闪烁的延时方法延时子函数注意:在这里我使用的变量定义为unsignedint代表的是无符号整型,其取值范围是0~65535,循环变量的值不要超过这个数值,否则就会出现死循环,就走不出延时子程序了。这也是大家经常犯的一个错误。例:下面就是一个错误的实例。voiddelay(){unsignedintk;for(k=0;k<70000;k++);}该程序错误的原因是K永远加不到70000,所以无法跳出死循环。二、LED闪烁的延时方法基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsignedint0~65535320~4294967295unsignedlongintunsignedshortint160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~255二、LED闪烁的延时方法LED灯点亮程序如何点亮LED灯?如何熄灭LED灯?voidmain(){

while(1) {

}}#include<reg52.h>LED=1;//点亮LEDLED=0;//熄灭LEDsbitLED=P0^0;LED=1;LED=0;点亮和熄灭的间隔时间怎么调控?好了,现在有了延时函数了,那么整个程序应该如何去修改呢?二、LED闪烁的延时方法LED灯点亮程序#include<reg52.h>sbitLED=P0^0;voiddelay(unsignedinti){ while(i--); }voidmain(){

while(1)

{ LED=1;

//点亮LED delay(10000);LED=0;

//熄灭LEDdelay(10000);

}}任务三

单片机控制蜂鸣器发声一、蜂鸣器结构认识二、蜂鸣器模块电路三、单片机控制蜂鸣器设计一、蜂鸣器结构认识蜂鸣器结构认识蜂鸣器从结构上分为有源和无源,有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。一、蜂鸣器结构认识蜂鸣器结构认识电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。一、蜂鸣器结构认识蜂鸣器结构认识在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等。自激蜂鸣器是直流电压驱动的,不需要利用交流信号进行驱动,只需对驱动口输出驱动电平并通过放大电路放大驱动电流就能使蜂鸣器发出声音,非常简单。一、蜂鸣器结构认识蜂鸣器结构认识改变单片机引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。改变输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小。二、蜂鸣器模块电路蜂鸣器模块电路三、单片机控制蜂鸣器设计程序设计/************************************************************************

蜂鸣器实验 ************************************************************************/#include"reg52.h" //此文件中定义了单片机的一些特殊功能寄存器typedefunsignedintu16; //对数据类型进行声明定义typedefunsignedcharu8;sbitbeep=P1^5; 三、单片机控制蜂鸣器设计程序设计voiddelay(u16i){ while(i--); }voidmain(){ while(1) { beep=~beep;

delay(100);//延时大约100us通过修改此延时时间达到不同的发声

}}三、单片机控制蜂鸣器设计硬件设计蜂鸣器硬件连接1.单片机的程序计数器PC用来_________________。A.存放指令B.存放正在执行的指令地址C.存放下一条指令地址D.存放上一条指令地址练习题2.PSW中RS1和RS0用来______________。A.选择工作寄存器组B.指示复位C.选择定时器D.选择工作方式3.单片机上电复位后,PC的内容为___________。A.0x0000B.0x0003C.0x000BD.0x08004.使用单片机开发系统测试C语言程序时,首先应新建文件,该文件的扩展名是___。A..cB..hexC..binD..asm练习题5.单片机能够直接运行的程序是_________。A.汇编源程序B.C语言源程序C.高级语言程序D.机器语言源程序1.51系列单片机的存储器主要由4个物理存储空间,即_______、_______、________、________。2.51系列单片机的应用程序一般存放在____________中。感谢您的观看单片机项目化教程(C语言版)

3-1控制8个LED发光二极管闪烁任务说明本任务通过51系列单片机控制8个发光二极管闪烁,熟悉单片机I/O端口控制及其编程方法。任务分析用单片机的P1端口控制8个发光二极管,下载编写好的C程序到单片机中,实现LED二极管闪烁。电路设计采用单片机P1端口控制8个发光二极管闪烁的硬件电路如图所示电路设计单片机P1口经过限流电阻R直接控制发光二极管,电阻起到限流作用。8个发光二极管的阳极并接在一起与电源相联接。当P1端口的引脚输出为低电平“0”时,相应的发光二极管被点亮。程序设计1#include<reg51.h> //包含头文件2voiddelay(unsignedinti); //延时函数声明3voidmain() //主函数4{5while(1){6P1=0xff; //将P1口的八位引脚置1,熄灭八个LED7delay(1000); //延时8P1=0x00; //将P1口的八位引脚清0,点亮八个LED9delay(500); //延时10}11}12voiddelay(unsignedchari) //延时函数,无符号字符型变量i为形式参数13{14unsignedcharj,k; //定义无符号字符型变量j和k15for(k=0;k<i;k++) //双重for循环语句实现软件延时16for(j=0;j<200;j++);17}1.并行I/O端口MCS-51系列单片机共有四个8位并行I/O口,分别用P0、P1、P2、P3表示,以实现数据的输入输出功能。每个I/O口既可以使用单个引脚按位操作,也可以按字节操作使用8个引脚。1.并行I/O端口MCS-51是标准的40引脚双列直插式集成电路芯片,引脚分布如图3.2所示。P0.0-P0.7P0口8位双向口线(在引脚的39-32号端子)。P1.0-P1.7P1口8位双向口线(在引脚的1-8号端子)。P2.0-P2.7P2口8位双向口线(在引脚的21-28号端子)。P3.0-P3.7P3口8位双向口线(在引脚的10-17号端子)。1.并行I/O端口P0口的口线逻辑电路如图3.3所示。由图可见,P0端口由锁存器、输入缓冲器、切换开关、一个与非门、一个与门及场效应管驱动电路构成。标号为P0.X引脚的图标,表示P0.X引脚可以是P0.0到P0.7的任何一位。(1)P0口①P0口的结构1.并行I/O端口在电路中包含一个数据输出D锁存器、两个三态数据输入缓冲器、一个输出控制电路和一个数据输出的驱动电路。输出控制电路有一个与门、一个非门和一个多路开关MUX构成;输出驱动电路由场效应晶体管T1和T2组成,受输出控制电路控制,当栅极输入低电平时,T1、T2截止;当栅极输入高电平时,T1、T2导通。(1)P0口①P0口的结构1.并行I/O端口当P0口作为输出口使用时,内部总线将数据送入锁存器,内部的写脉冲加在锁存器时钟端CP上,锁存数据到Q端。经过MUX,T2反相后正好是内部总线的数据,送到P0口引脚输出。当P0口作为输入口使用时,应区分读引脚和读端口两种情况。所谓读引脚,就是读芯片引脚的状态,这时使用下方的数据缓冲器,“读引脚”信号把缓冲器打开,把端口引脚上的数据从缓冲器通过内部总线读进来。读端口是指通过上面的缓冲器读锁存器Q端的状态。读端口是为了适应对I/O口进行“读-修改-写”操作语句的需要。(1)P0口②P0作为通用I/O端口使用1.并行I/O端口P1口的结构最简单,用途也单一,仅作为数据输入/输出端口使用。输出的信息有锁存,输入有读引脚和读锁存器之分。P1的口线逻辑电路如图3.4所示。(2)P1口①P1口的结构1.并行I/O端口由图3.4可见,P1端口与P0端口的主要差别在于,P1端口用内部上拉电阻R代替了P0端口的场效应管T1,并且输出的信息仅来自内部总线。由内部总线输出的数据经锁存器反相和场效应管反相后,锁存在端口线上,因此,P1端口是具有输出锁存的静态口。注意:P1口是准双向口,只能作为通用I/O口使用。P1口作为输出口使用时,无需再外接上拉电阻。P1口作为输入口使用时,应区分读引脚和读端口。读引脚时,必须先向电路中的锁存器写入“1”,使输出级的FET截止。(2)P1口①P1口的结构1.并行I/O端口由图可见,P2端口在片内既有上拉电阻,又有切换开关MUX,所以P2端口在功能上兼有P0端口和P1端口的特点。这主要表现在输出功能上,当切换开关向下接通时,从内部总线输出的一位数据经反相器和场效应管反相后,输出在端口引脚线上;当多路开关向上时,输出的一位地址信号也经反相器和场效应管反相后,输出在端口引脚线上。因此,P2端口的多路开关总是在进行切换,分时地输出从内部总线来的数据和从地址信号线上来的地址。因此P2端口是动态的I/O端口,输出数据虽被锁存,但不是稳定地出现在端口线上。在输入功能方面,P2端口与P0端口相同,有读引脚和读锁存器之分,并且P2端口也是准双向口。(3)P2口①P2口的结构1.并行I/O端口注意:P2口是准双向口,在实际应用中,可以用于为系统提供高8位地址,也能作为通用I/O口使用。P2口作为通用I/O口的输出口使用时,与P1口一样无需再外接上拉电阻。P2口作为通用I/O口的输入口使用时,应区分读引脚和读端口。读引脚时,必须先向锁存器写入“1”。(3)P2口①P2口的结构1.并行I/O端口P3端口和Pl端口的结构相似,区别仅在于P3端口的各端口线有两种功能选择。当处于第一功能时,第二输出功能线为1,此时,内部总线信号经锁存器和场效应管输入/输出,其作用与P1端口作用相同,也是静态准双向I/O端口。当处于第二功能时,锁存器输出1,通过第二输出功能线输出特定的内含信号,在输入方面,即可以通过缓冲器读入引脚信号,还可以通过替代输入功能读入片内的第二功能信号。由于输出信号锁存并且有双重功能,故P3端口为静态双功能端口。(4)P3口①P3口的结构1.并行I/O端口P3端口处于第二功能的条件是:①串行I/O处于运行状态(RXD,TXD)②打开了处部中断(INT0,INT1)③定时器/计数器处于外部计数状态(T0,T1)④执行读写外部RAM的指令(RD,WR)在应用中,如不设定P3端口各位的第二功能(WR,RD信号的产生不用设置),则P3端口线自动处于第一功能状态,也就是静态I/O端口的工作状态。在更多的场合是根据应用的需要,把几条端口线设置为第二功能,而另外几条端口线处于第一功能运行状态。在这种情况下,不宜对P3端口作字节操作,需采用位操作的形式。(4)P3口口线

第二功能信号名称

P3.0RXD串行数据接收P3.1

TXD串行数据发送P3.2INT0外部中断0申请P3.3INT1外部中断1申请P3.4T0定时器/计数器0计数输入P3.5

T1定时器/计数器1计数输入P3.6WR外部RAM写选通P3.7RD外部RAM读选通2.简单C语言1//功能:控制八个信号灯闪烁程序2#include<reg51.h> //包含头文件3voiddelay(unsignedchari); //延时函数声明4voidmain() //主函数5{6while(1){7P1=0xf0; //将P1口的高四位引脚置1,低四位置08delay(250); //延时9P1=0x0f; //将P1口的高四位引脚置0,低四位置110delay(250); //延时11}12}13voiddelay(unsignedchari) //延时函数,无符号字符型变量i为形式参数14{15unsignedcharj,k; //定义无符号字符型变量j和k16for(k=0;k<i;k++) //双重for循环语句实现软件延时17for(j=0;j<200;j++);18}(1)第一个C语言程序2.简单C语言上述程序中,第1行:对程序进行说明,包括程序名称和功能。“//”是单行注释符号,用来说明相应语句的意义,方便程序的编写、调试及维护工作,提高程序的可读性。第二行:#include<reg51.h>是文件包含语句,表示将语句中指定文件的全部内容复制到程序中,reg51.h是KeilC51编译器提供的头文件,该文件包含了MCS-51系列单片机特殊功能寄存器SFR和位名称的定义。reg51.h是为了通知C51编译器,程序中用到的符号P1是MCS-51单片机的P1口。第三行:延时函数声明。在C语言中,函数遵循先声明、后调用的原则。第4-12行:定义主函数main()。main函数是C语言中的主函数,也是程序开始执行的函数。第13-18行:定义延时函数delay(),控制发光二极管的闪烁速度。(1)第一个C语言程序2.简单C语言一个C语言源程序是由一个或若干个函数组成,每一个函数完成相对独立的功能。每个C程序都必须有(且仅有)一个主函数main(),程序的执行总是从主函数开始,调用其他函数后返回主函数main(),不管函数的排列顺序如何,最后在主函数中结束整个程序。一个函数有两部分组成:函数定义和函数体。函数定义部分包括函数名、函数类型、函数属性、函数参数名、参数类型等。main()函数后面大括号内的部分称为函数体,函数体由定义数据类型的说明部分和实现函数功能的执行部分组成。C语言程序中可以有预处理命令,预处理命令通常放在源程序的最前面。C语言程序使用“;”作为语句的结束符,一条语句可以多行书写,也可以一行书写多条语句。(2)C语言基本结构2.简单C语言①简洁紧凑、灵活方便,运算符丰富②数据结构丰富③C是结构式语言④C语法限制不太严格、程序设计自由度大⑤C语言适用范围大,可移植性好。(3)C语句特点2.简单C语言C语言程序的执行部分由语句组成。C语言提供了丰富的程序控制语句,按照结构化程序设计的基本结构:顺序结构、选择结构和循环结构,组成各种复杂程序。这些语句主要包括表达式语句、复合语句、选择语句和循环语句等。表达式语句是最基本的C语言语句。表达式语句由表达式加上分号“;”组成,其一般形式如下:表达式;执行表达式语句就是计算表达式的值。在C语言中有一个特殊的表达式语句,称为空语句。空语句中只有一个分号“;”,程序执行空语句时需要占用一条指令的执行时间,但是什么也不做。在C51程序中常常把空语句作为循环体,用于消耗CPU时间等待事件发生。把多个语句用大括号{}括起来,组合在一起形成具有一定功能的模块,这种由若干条语句组合而成的语句块称为复合语句。在程序中应把复合语句看成是单条语句,而不是多条语句。复合语句在程序运行时,{}中的各行单语句是依次顺序执行的。在C语言的函数中,函数体就是一个复合语句。(4)C语言表达式语句和复合语句3.C语言数据单片机程序中处理的数据有常量和变量两种形式:常量的值在执行期间是不能发生变化的,而变量的值在程序执行期间可以发生变化。(1)C语言标识符、常量和变量①标识符C语言用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列称为标识符。标识符的长度可以是一个或多个字符。C语言规定标识符只能由字母(A~Z,a~z)、数字(0~9)和下划线(_)3种字符组成,而且第一个字符必须为字母或下划线。例如,a1、s_1、_3、ggde2f_1、PI都是合法的标识符,而123、d@si、s*b、+d、b>3都是不合法的标识符。3.C语言数据(1)C语言标识符、常量和变量①标识符下面列出的是C语言常用的关键字:break case char classconst continue delete dodouble else for friendfloat int if longnew private protected publicreturn short sizeof staticswitch void whlie 3.C语言数据(1)C语言标识符、常量和变量②常量与符号常量常量的数据类型有整型、浮点型、字符型、字符串型和位类型。a.整型常量可以表示为十进制,如123,0,-89等。十六进制则以0x开头如0x34,-0x3B等。长整型就在数字后面加字母L,如104L,034L,0xF340等。b.浮点型常量可分为十进制和指数表示形式。十进制由数字和小数点组成,如0.888,3345.345,0.0等,整数或小数部分为0,可以省略但必须有小数点。指数表示形式为[±]数字[.数字]e[±]数字,[]中的内容为可选项,其中内容根据具体情况可有可无,但其余部分必须有,如125e3,7e9,-3.0e-3。c.字符型常量是单引号内的字符,如‘a',‘d'等,不可以显示的控制字符,可以在该字符前面加一个反斜杠"\"组成专用转义字符。3.C语言数据(1)C语言标识符、常量和变量②常量与符号常量d.字符串型常量由双引号内的字符组成,如"test","OK"等。当引号内没有字符时为空字符串。在使用特殊字符时同样要使用转义字符如双引号。在C中字符串常量是做为字符类型数组来处理的,在存储字符串时系统会在字符串尾部加上’\o’转义字符以作为该字符串的结束符。字符串常量"A"和字符常量‘A'是不同的,前者在存储时多占用一个字节。e.位标量,它的值是一个二进制,如1或0。常量可以是数值型常量,也可以是符号常量。数值型常量就是常说的常数,如10、1.5、0x16、‘A’等,数值型常量不用说明就可以直接使用。符号常量是指程序中用标识符代表常量,符号常量使用前必须用编译预处理命令“#define”先进行定义。例如:#defineFalse0x0//用预定义语句可以定义常量constunsignedintc=100;//用const定义c为无符号int常量并赋值3.C语言数据(1)C语言标识符、常量和变量③变量一个变量实质上是代表了内存中的一个存储单元。在程序中,定义了一个变量a,实际上是给用a命名的变量分配了一个存储单元,用户对变量a进行的操作就是对该存储单元进行的操作;给变量a赋值,实质上就是把数据存入该变量所代表的存储单元中。C语言规定,程序中所有变量必须先定义后使用。变量也有整型变量、实型变量、字符变量等不同的类型。在定义变量的同时要说明其类型,系统在编译时就能根据其类型为其分配相应的存储单元。定义一个变量的格式如下:

[存储种类]数据类型[存储器类型]变量名表在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。3.C语言数据(2)C语言的数据类型C语言数据类型基本类型数值型字符型char整型实型短整型short整型int长整型long单精度型float

长实型longdouble双精度型double构造类型

指针类型结构体stru共用体union枚举型enum空类型数组3.C语言数据(3)C语言运算符和表达式运算符可按其操作数的个数分为三类,它们是单目运算符(一个操作数)、双目运算符(两个操作数)、三目运算符(三个操作数)。运算符按其优先级的高低分为15类。优先级最高的为1级,其次为2级等,具体见附录B。运算符按其功能分为算术运算符、关系运算符、逻辑运算符、赋值运算符、逗号运算符、条件运算符等。3.C语言数据(3)C语言运算符和表达式①算术运算符和算术表达式常见的算术运算符有双目运算符(+、-、*、/、%)和单目运算符正负号。运算规则与代数运算基本相同,但有以下不同之处:a.除法运算(/)两个整数相除,则商为整数,小数部分舍弃。例如:5/2=2而5.0/2=2.5b.求余数运算(%)参加运算的两个操作数均应为整数,否则出错。运算结果是整除以后的余数。在VC++6.0中运算结果的符号与被除数相同。3.C语言数据(3)C语言运算符和表达式例如:9%5=4-7%3=-17%-3=1用算术运算符和圆括号将运算对象(也称操作数)连接起来的、符合C语言语法的式子,称为算术表达式。运算对象可以是常量、变量、函数等。算术运算符和圆括号的优先级高低次序如下:以上所列的运算符中,只有正负号运算是自右向左的结合性,其余运算符都是自左向右的结合性。3.C语言数据(3)C语言运算符和表达式C语言中,符号“=”是一个运算符,称为赋值运算符,由赋值运算符构成的表达式称为赋值表达式,其基本格式如下;变量名=表达式;赋值运算的功能是先计算右边表达式的值,然后将此值赋给左边的变量,即存入以该变量为标识的存储单元中。例如:i=0xff;/*将十六进制数FFH赋予变量K*/d=m;/*将变量m的值赋予变量d*/②赋值运算符和赋值表达式3.C语言数据(3)C语言运算符和表达式自增自减运算属于单目运算,自增运算符是++,使单个变量的值增1。自减运算符是--,使单个变量的值减1。其表达式有两种格式:a.++i、--i(前置运算):先自增、减,再参与运算;b.i++、i--(后置运算):先参与运算,再自增、减。自增、自减运算符只用于变量,而不能用于常量或表达式。自增、自减运算的结合方向是“自右向左”(与一般算术运算符不同)。运算优先级仅次于圆括号。③自增自减运算符和表达式3.C语言数据(3)C语言运算符和表达式C语言还允许编程者按照自己的需要,把指定的数据转换成指定的类型,这样的转换称为“显式转换”或“强制类型转换”。强制类型转换的一般格式为:(类型标识符)(表达式)例如:(int)a;(int)(x+y);(float)(a+b);说明:a.无论是隐式转换还是强制转换都是临时转换,不改变数据本身的类型和值。b.强制类型转换的结合方向是“自右向左”。运算优先级高于双目运算符,但低于正、负号运算符。④强制类型转换运算符3.C语言数据(3)C语言运算符和表达式a.关系运算符C语言提供了6种关系运算符,它们分别是:<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)关系运算符是双目运算符,具有自左向右的结合性。关系运算符的优先级低于算术运算符,但高于赋值运算符。其中,<、<=、>、>=的优先级相同,==、!=的优先级相同,且前四种的优先级高于后两种。⑤关系运算符和关系运算表达式3.C语言数据(3)C语言运算符和表达式b.关系表达式关系表达式就是用关系运算符将合法的表达式用关系运算符连接起来的式子。例如:c>a+b 等价于 c>(a+b)a>b==c 等价于 (a>b)==ca=b>c 等价于 a=(b>c)关系表达式的值是一个逻辑值,即“真”或“假”。C语言没有逻辑型数据,以1代表“真”,以0代表“假”⑤关系运算符和关系运算表达式3.C语言数据(3)C语言运算符和表达式a.逻辑运算符C语言提供三种逻辑运算符,分别是:!逻辑非(相当于“否定”,条件为真,运算后为“假”,条件为假,运算后为“真”)。&&逻辑与(相当于“并且”,只在两条件同时成立时为“真”,否则为“假”)。||逻辑或(相当于“或者”,两个条件只要有一个成立时即为“真”,否则为“假”)。其中,“&&”和“||

温馨提示

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

评论

0/150

提交评论