电气二-第六章定时器_第1页
电气二-第六章定时器_第2页
电气二-第六章定时器_第3页
电气二-第六章定时器_第4页
电气二-第六章定时器_第5页
免费预览已结束,剩余63页可下载查看

付费下载

下载本文档

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

文档简介

第6章

定时器/计数器内容概要

在工业检测与控制中,许多场合要用到计数或定时功能。例如,对外部脉冲进行计数或产生精确的定时时间等。片内两个可编程的定时器/计数器T1、T0,可满足这方面的需要。本章介绍AT89S51单片机片内定时器/计数器的结构与功能,两种工作模式和4种工作方式,以及与其相关的两个特殊功能寄存器TMOD和TCON各位的定义及其编程,最后介绍定时器/计数器的C51编程及应用实例。

26.1定时器/计数器的结构

AT89S51的定时器/计数器结构如图6-1所示,T0由特殊功能寄存器TH0、TL0构成,T1由特殊功能寄存器TH1、TL1构成。

T0和T1都具有定时器和计数器两种工作模式,4种工作方式(方式0~3)。属于增计数器。特殊功能寄存器TMOD用于选择T0、T1的工作模式和工作方式。特殊功能寄存器TCON用于控制T0、T1的启动和停止计数,同时包含了T0、T1的状态。T0、T1不论是工作在定时器模式还是计数器模式,实质是对脉冲信号进行计数,4图6-1AT89S51单片机的定时器/计数器结构框图只不过计数信号的来源不同。计数器模式是对加在T0(P3.4)和T1(P3.5)两个引脚上的外部脉冲进行计数(见图6-1)定时器模式是对单片机的系统时钟信号经片内12分频后的内部脉冲信号(机器周期)计数。由于时钟频率是定值,所以可根据对内部脉冲信号的计数值可计算出定时时间。计数器的起始计数是从初值开始。单片机复位时计数器初值为0,也可用指令给计数器装入一个新的初值。AT89S51的定时器/计数器属于增计数器。56.1.1工作方式控制寄存器TMOD

6AT89S51定时器的工作方式寄存器TMOD用于选择工作模式和工作方式,字节地址为89H,不能位寻址,其格式如图6-2所示。图6-2寄存器TMOD格式8位分为两组,高4位控制T1,低4位控制T0。

下面对TMOD的各位给出说明。(1)GATE—门控位。GATE=0时,仅由运行控制位TRx(x

=

0,1)来控制定时器运行。GATE=1时,用外中断引脚INT0*(或INT1*)上的电平与运行控制位TRx共同控制定时器运行。(2)M1、M0—工作方式选择位。M1、M0的4种编码,对应于4种工作方式的选择,如表6-1所示。78(3)C/T*—计数器模式和定时器模式选择位。

C/T*=0,为定时器工作模式,对单片机的晶体振荡器12分频后的脉冲进行计数。

C/T*=1,为计数器工作模式,计数器对外部输入引脚T0(P3.4)或T1(P3.5)的外部脉冲(负跳变)计数。6.1.2定时器/计数器控制寄存器TCON

9TCON字节地址为88H,可位寻址,位地址为88H~8FH,格式如图6-3所示。图6-3TCON格式第5章介绍了与外部中断有关的低4位。这里仅介绍与定时器相关的高4位功能。(1)TF1、TF0—计数溢出标志位。当计数器计数溢出时,该位置“1”。使用查询方式时,此位作为状态位供CPU查询,但应注意查询有效后,应使用软件及时将该位清“0”。使用中断方式时,此位作为中断请求标志位,进入中断服务程序后由硬件自动清“0”。(2)TR1、TR0—计数运行控制位。TR1位(或TR0位)=1,启动定时器工作的必要条件。TR1位(或TR0位)=0,停止定时器工作。该位可由软件置“1”或清“0”。106.2定时器/计数器的4种工作方式

114种工作方式分别介绍如下。6.2.1方式0当M1、M0为00时,定时器/计数器被设置为工作方式0,这时定时器/计数器的等效逻辑结构框图如图6-4所示(以定时器/计数器T1为例,TMOD.5、TMOD.4

=

00)。图6-4定时器/计数器方式0逻辑结构框图方式0时,为13位计数器,由TLx(x

=

0,1)的低5位和THx的高8位构成。TLx低5位溢出则向THx进位,THx计数溢出则把TCON中的溢出标志位TFx置“1”。图6-2中,C/T*位控制的电子开关决定了定时器/计数器的两种工作模式。(1)C/T*=0,电子开关打在上面位置,T1(或T0)为定时器工作模式,把时钟振荡器12分频后的脉冲作为计数信号。(2)C/T*=1,电子开关打在下面位置,T1(或T0)为计数器工作模式,计数脉冲为P3.4(或P3.5)引脚上的外部输入脉冲,当引脚上发生负跳变时,计数器加1。13GATE位状态决定定时器的运行控制取决于TRx一个条件,还是取决于TRx和INTX*(x

=

0,1)引脚状态这两个条件。(1)GATE=0时,A点(见图6-4)电位恒为1,B点电位仅取决于TRx状态。TRx

=

1,B点为高电平,控制端控制电子开关闭合,允许T1(或T0)对脉冲计数。TRx

=

0,B点为低电平,电子开关断开,禁止T1(或T0)计数。(2)GATE=1时,B点电位由INTX*(x

=

0,1)的输入电平和TRx的状态两个条件来定。当TRx=1,且INTX*=1时,B点才为1,控制端控制电子开关闭合,允许T1(或T0)计数。故这种情况下计数器是否计数是由TRx和INTX*两个条件来共同控制。146.2.2方式1

15当M1、M0为01时,工作于方式1,方式1的等效电路逻辑结构如图6-5所示。方式1和方式0的差别仅仅在于计数器的位数不同,方式1为16位计数器,由THx高8位和TLx低8位构成(x

=

0,1),方式0则为13位计数器,有关控制状态位的含义(GATE、C/T*、TFx、TRx)与方式0相同。

16图6-5定时器/计数器方式1逻辑结构框图6.2.3方式217

方式0和方式1的最大特点是计数溢出后,计数器为全0。因此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题。这不仅影响定时精度,也给程序设计带来麻烦。方式2就是解决此问题而设置的。

当M1、M0为10时,定时器/计数器处于工作方式2,这时定时器/计数器的等效逻辑结构如图6-6所示(以定时器T1为例,x

=

1)。

18图6-6定时器/计数器方式2逻辑结构框图定时器/计数器的方式2为自动恢复初值(初值自动装入)的8位定时器/计数器,TLx(x

=

0,1)作为常数缓冲器,当TLx计数溢出时,在溢出标志TFx置“1”的同时,还自动将THx中的初值送至TLx,使TLx从初值开始重新计数。定时器/计数器的方式2工作过程如图6-7所示。此工作方式可省去用户软件中重装初值的指令的执行时间,简化定时初值的计算方法,可相当精确地确定定时时间。196.2.4方式3

方式3是为了增加一个附加的8位定时器/计数器而设置的,从而使AT89S51单片机具有3个定时器/计数器。方式3只适用于定时器/计数器T0,定时器/计数器T1不能工作在方式3。T1处于方式3时相当于TR1

=

0,停止计数(此时T1可用来作为20图6-7方式2工作过程

串行口波特率产生器)。1.工作方式3下的T0

当TMOD的低2位为11时,T0的工作方式被选为方式3,各引脚与T0的逻辑关系如图6-8所示。T0分为两个独立的8位计数器TL0和TH0,TL0使用T0的状态控制位C/T*、GATE、TR0,而TH0被固定为一个8位定时器(不能作为外部计数模式),并使用T1的状态控制位TR1和TF1,同时占用T1的中断请求源TF1。2122图6-8定时器/计数器T0方式3的逻辑结构框图(1)T1工作在方式0T1的控制字中M1、M0

=

00时,T1工作在方式0,工作示意图如图6-9所示。

23图6-9T0工作在方式3时T1为方式0的工作示意图(2)T1工作在方式1

当T1的控制字中M1、M0

=

01时,T1工作在方式1,工作示意图如图6-10所示。24图6-10T0工作在方式3时T1为方式1的工作示意图(3)T1工作在方式2

当T1的控制字中M1、M0

=

10时,T1的工作方式为方式2,工作示意图如图6-11所示。

25图6-11T0工作在方式3时T1为方式2的工作示意图(4)T1设置在方式3。

当T0设置在方式3时,再把T1也设置成方式3,此时T1停止计数。6.3对外部输入的计数信号的要求

当定时器/计数器工作在计数器模式时,计数脉冲来自外部输入引脚T0或T1。当输入信号产生由1至0的跳变(即负跳变)时,计数器值增1。每个机器周期的S5P2期间,都对外部输入引脚T0或T1进行采样。如在第一个机器周期中采得的值为1,而在下一个机器周期中采得的值为0,则在紧跟着的再下一个机器周期S3P1期间,计数器加1。27由于确认一次负跳变花2个机器周期,即24个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的1/24。图6-12

对外部计数输入信号的要求,Tcy为机器周期例如,选用6MHz频率的晶体,允许输入的脉冲频率最高为250kHz。如果选用12MHz频率的晶体,则可输入最高频率为500kHz的外部脉冲。对于外部输入信号的占空比并没有什么限制,但为了确保某一给定电平在变化之前能被采样一次,则这一电平至少要保持一个机器周期。故对外部输入信号的要求如图6-12所示。

281.定时器/计数器的初始化步骤

定时器/计数器是一种可编程部件,在使用定时器/计数器前,一般都要对其进行初始化,以确定其以特定的功能工作。初始化的步骤如下。(1)确定定时器/计数器的工作方式,确定方式控制字,并写入TMOD。(2)预置定时初值或计数初值,根据定时时间或计数次数,计算定时初值或计数初值,并写入TH0、TL0或TH1、TL1。(3)根据需要开放定时器/计数器的中断,给IE中的相关位赋值。(4)启动定时器/计数器,给TCON中的TR1或TR0置1。

定时器/计数器的初始化2.定时初值或计数初值的计算方法

不同工作方式的定时初值或计数初值的计算方法如下表所示。表中T表示定时时间,T机表示机器周期。

工作方式计数位数最大计数值最大定时时间定时初值计算公式计数初值计算公式方式013213=8192213*T机X=213-T/T机X=213-计数值方式116216=65536216*T机X=216-T/T机X=216-计数值方式2828=25628*T机X=28-T/T机X=28-计数值6.4定时器/计数器的编程和应用在4种工作方式中,方式0与方式1基本相同,只是计数器的计数位数不同。方式0为13位计数器,方式1为16位计数器。由于方式0是为兼容MCS-48而设,且其计数初值计算复杂,所以在实际应用中,一般不用方式0,而采用方式1。6.4.1P1口外接的8只LED每0.5s闪亮一次。【例6-1】在AT89S51单片机的P1口上接有8只LED(电路见图4-7)。下面采用定时器T0的方式1的定时中断方式,使P1口外接的8只LED每0.5s闪亮一次。

(1)设置TMOD寄存器定时器T0工作在方式1,应使TMOD寄存器的M1、M0=01;应设置C/=0,为定时器工作模式;对T0的运行控制仅由TR0来控制,应使GATE0=0。定时器T1不使用,各相关位均设为0。所以,TMOD寄存器应初始化为0x01。(2)计算T0计数初值

设定时时间5ms(即5000µs),设定时器T0的计数初值为X,假设晶振的频率为11.0592MHz,则定时时间为:定时时间=(216−X)*12/晶振频率32则5000=(216

−X)*12/11.0592得:X=60928,转换成16进制后为:0xee00,其中0xee装入TH0,0x00装入TL0。(3)设置IE寄存器本例由于采用定时器T0中断,因此需将IE寄存器中的EA、ET0位置1。(4)启动和停止定时器T0将定时器控制寄存器TCON中的TR0=1,则启动定时器T0;TR0=0,则停止定时器T0定时。参考程序如下:33#include<reg51.h>Chari=100; /*给变量i赋初值*/voidmain(){TMOD=0x01; /*设置定时器T0为方式1*/TH0=0xee; /*向TH0写入初值的高8位*/TL0=0x00; /*向TL0写入初值的低8位*/P1=0x00; /*P1口8只LED点亮*/EA=1; /*总中断允许*/ET0=1; /*定时器T0中断允许*/TR0=1; /*启动定时器T0*/while(1); /*无穷循环,等待定时中断*/}34/*以下为定时器T0的中断服务程序*/voidT0_int(void)interrupt1{TH0=0xee; /*给T0装入16位初值,计4608个数后,T0溢出*/TL0=0x00;i--; /*循环次数减1*/if(i<=0){P1=~P1; /*P1口按位取反*/i=100; /*重新设置循环次数*/}}356.4.2计数器的应用

36【例6-2】

采用定时器T1的方式1的中断计数方式,如图6-13所示,计数输入引脚T1(P3.5)上外接开关K1,作为计数信号输入。按4次K1后,P1口的8只LED闪烁不停。(1)设置TMOD寄存器

T1工作在方式1,应使TMOD的M1、M0=01;设置计数器工作模式C/T*=1;对T0的运行控制仅由TR0来控制,应使GATE0=0。定时器T0不使用,各相关位均设为0。所以,TMOD寄存器应初始化为0x50。37图6-13由外部计数输入信号控制LED的闪烁(2)计算T1计数初值

由于每按4次K1,计数一次,因此计数器的初值为65536-4=65532,将其转换成16进制后为:0xfffc,因此,TH0=0xff,TL0=0xfc。(3)设置IE寄存器

本例由于采用定时器T1中断,因此需将IE寄存器中的EA、ET1位置1。(4)启动和停止定时器T1

将定时器控制寄存器TCON中的TR1=1,则启动定时器T1计数;TR1=0,则停止定时器T1计数。参考程序如下:38#include<reg51.h>voidDelay(unsignedinti)/*定义延时函数Delay(),i是形式参数,不能赋初值*/{unsignedintj; for(;i>0;i--)/*变量i由实际参数传入一个值,因此i不能赋初值*/for(j=0;j<125;j++) {;} /*空函数*/}voidmain() /*主函数*/{TMOD=0x50; /*设置定时器T1为方式1计数*/TH0=0xff; /*向TH0写入初值的高8位*/39TL0=0xfc; /*向TL0写入初值低8位*/EA=1; /*总中断允许*/ET1=1; /*T1中断允许*/TR1=1; /*启动T1*/while(1); /*无穷循环,等待定时中断*/}/*以下为定时器T1的中断服务程序*/voidT1_int(void)interrupt3{for(;;) /*无限循环*/{P1=0xff; /*8位LED全灭*/Delay(500); /*延时500ms*/P1=0; /*8位LED全亮*/Delay(500);} /*延时500ms*/}406.4.3扩展一个外部中断源41方式2可自动重新装载初值。此方式可省去用户程序中重新装初值的指令。当某个定时器/计数器不使用时,可为AT89S51扩展一个负跳沿触发的外部中断源。基本思想是把定时器溢出中断做成外部中断,然后把计数输入信号接到定时器的相应引脚上T0脚(或T1脚),并把定时器被设置为方式2(自动装入常数方式)计数工作模式,计数器TH0、TL0初值均为0FFH,并允许T0中断,总中断开放。当检测到T0脚(或T1脚)引脚电平发生负跳变时,计数器TF0(或TF1)溢出,这时将产生一个中断请求。【例6-3】扩展一个负跳沿触发的外部中断源,把定时器T0计数输入引脚作为外部中断请求信号的输入端。#include<reg51.h>voidmain(){………TMOD=0x06; /*设置定时器T0为方式2计数*/TH0=0xff; /*给T0装入初值*/TL0=0xff; /*给T0装入初值*/ET0=1; /*允许T0中断*/EA=1; /*总中断开*/TF0=0; /*T0中断溢出标志位清0*/TR0=1 /*接通T0计数*/while(1) /*无限循环等待*/}42/*以下为定时器T0的中断服务程序*/voidT0_int(void)interrupt1using0{┉┉} /*外中断处理部分*/说明:本例所述的使用定时器扩展的外中断源只能是负跳沿触发。此外,只有当定时器T0(或T1)不用的话,才可使用本方法来扩充外部中断源,此时定时器T0本身的功能将不能再使用,除非使用软件来对它进行复用控制。6.4.4P1.0上产生周期为2ms的方波【例6-4】系统时钟为12MHz,编程实现从P1.0引脚上输出一个周期为2ms的方波,如图6-14所示4344图6-14

定时器控制P1.0输出一个周期为2ms的方波基本思想:要在P1.0上产生周期为2ms的方波,定时器应产生1ms的周期性的定时,定时对P1.0求反。选择定时器T0,方式1定时,采用中断方式,GATE不起作用。计算T0的初值计算:设T0的初值为X,则

(216

X)

*

1

*

10−6

=

1/10−3=

65536−X

=1000则初值为:65536−1000=64536,因此TH0=(65536

−1000)

/256,TL0=(65536

−1000)

%256。参考程序如下:45#include<reg51.h>sbitP1_0=P1^0;voidmain(void){TMOD=0x01; /*设置定时器T0为方式2计数*/P1_0=0;TH0=(65536

−1000)

/256; /*给T0装入初值*/TL0=(65536

−1000)

%256; /*给T0装入初值*/ET0=1; /*允许T0中断*/EA=1; /*总中断开*/TR0=1 /*接通T0计数*/do{}while(1); /*无限循环等待*/}voidT0_int(void)interrupt1using1{P1_0=!P1_0;TH0=(65536

−1000)

/256;TL0=(65536

−1000)

%256;}466.4.5P1.1上产生周期为1s的方波【例6-5】假设系统时钟为12MHz,编程实现从P1.1引脚上输出一个周期为1s的方波。

基本思想:要在P1.1上产生周期为1s的方波,定时器应产生500ms的周期性定时,定时到则对P1.1求反。由于定时时间较长,用定时器不能直接实现,直接定时时间最长的就是方式1,仅为65ms(系统时钟12MHz)多一点。实现:T0定为10ms定时,每10ms对P1.0求反一次,P1.0输出的脉冲加到定时器T1的计数输入脚P3.5(T1脚),作为计数输入,定时500ms需计数25次。T1设为方式2计数,初值X为:28−X=25,则X=231,47

所以TH1=TL1=231。T0设为方式1定时,则控制字为61H。定时器T0和T1均采用中断方式工作。参考程序如下:#include<reg51.h>sbitP1_0=P1^0;sbitP1_1=P1^1;voidmain(void){TMOD=0x61; /*设置定时器T0为方式1定时,T1为方式2计数*/P1_0=0;P1_1=0;TH0=(65536

−10000)

/256; /*给T0装初值*/TL0=(65536

−10000)

%256;TH1=231; /*给T1装初值*/TL1=231;48EA=1; /*总中断开*/ET0=1; /*允许T0中断*/ET1=1; /*允许T1中断*/TR0=1;TR1=1;while(1); }voidT0_int(void)interrupt1{ TH0=(65536

−10000)

/256;TL0=(65536

−10000)

%256;P1_0=!P1_0;}voidT1_int(void)interrupt3{P1_1=!P1_1; }; /*P1.1脚产生1s的方波*/。496.4.6T1控制发出1KHz的音频信号【例6-6】

利用定时器T1的中断来控制蜂鸣器发出1KHz的音频信号,电路图见图6-15。

假设系统时钟为11.0592MHz,则每个脉冲的周期为12/11.0592=1.085µs。1KHz的音频信号周期为1ms,因此要计数的脉冲数为1000/1.085=921次。所以T1的初值:

TH1=(65536

−921)

/256;TL1=(65536

−921)

%256参考程序如下:5051图6-15控制蜂鸣器发出1KHz的音频信号#include<reg51.h> sbitP1_0=P1^0; sbitsound=P1^7; voidmain(void) {EA=1; /*总中断开*/ ET1=1; /*允许T0中断*/ TMOD=0x10; /*设置定时器T1为方式1定时*/ P1_0=0; TH1=(65536

−921)

/256; /*给T1装初值*/ TL1=(65536

−921)

%256;

TR1=1; while(1); }52voidT1_int(void)interrupt3using0{ sound=~sound; TH1=(65536

−921)

/256;

TL1=(65536

−921)

%256;}536.4.7测量脉冲宽度(门控位GATEx的应用)

54下面以定时器T1为例,介绍门控制位GATE的具体应用,即测量INT0*(或INT1*)引脚上正脉冲的宽度。【例6-7】

门控位GATE1可使T1的启动计数受的控制,当GATE1=1,TR1=1时,只有引脚INT1*输入高电平时,T1才被允许计数。利用GATE1的这一功能,可测量引脚INT1*(P3.3)上正脉冲的宽度(机器周期数),利用门控制位GATE1,测量引脚INT1*上正脉冲的宽度。方法如图6-16所示。55图6-16利用GATE位测量正脉冲的宽度参考程序如下:#include<reg51.h>sbitP3_3=P3^3; /*位变量定义*/unsignedcount_high; /*定义计数变量,用来读取TH0*/unsignedcount_low; /*定义计数变量,用来读取TL0*/voidread_count(); /*读计数器函数*/voidmain(){TMOD=0x90; /*设置定时器T1为方式1定时*/TH1=0; /*向定时器T1写入计数初值*/TL1=0;TR1=1;while(P3_3==1); /*等待变低*/56TR1=1; /*如果为低,启动T1(未真正开始计数)*/while(P3_3==0); /*等待变高,变高后T1真正开始计数*/while(P3_3==1); /*等待变低,变低后T1停止计数*/TR1=0; read_count() /*读计数寄存器内容的函数*/}voidread_count() /*读取计数寄存器的内容*/{do{count_high=TH1; /*读高字节*/count_low=TL1; /*读低字节*/……… /*可将两字节的机器周期数进行显示处理*/}while(count_high!=TH1);}

执行以上程序,使引脚上出现的正脉冲宽度以机器周期数的形式读入到count_high和count_low两个单元中,如果编写了显示程序,可将其显示在显示器上。6.4.8实时时钟的设计

本节介绍如何使用定时器/计数器来实现实时时钟。实时时钟就是以秒、分、时为单位计时。1.计时的实现

时钟最小计时单位是秒,如何获得1s定时?可将定时器T0的定时时间定为50ms,采用中断方式进行溢出次数的累计,计满20次,则秒计数变量s加1;若秒计满60,则分计数变量m加1,同时将秒计数变量s清0;若分钟计满60,则小时计数变量h加1;若小时计数变量满24,则将小时计数变量清0。2.程序设计先将定时器以及各计数变量,然后调用时间显示的子程序。计时功能由定时器T0的中断服务子程序来实现。参考程序如下:#include<reg51.h>unsignedcharint_time; /*定义中断次数计数变量*/unsignedcharsecond; /*秒计数变量*/unsignedcharminute; /*分钟计数变量*/unsignedcharhour; /*小时计数变量*/voiddelay(void); /*延时函数*/{unsignedcharj;for(j=0;j<200;j++);;}voidmain(void) { TMOD=0x01; /*设置定时器T0为方式1定时*/ EA=1; /*总中断开*/ ET0=1; /*允许T0中断*/ TH0=(65536

−46483)/256; /*给T0装初值*/ TL0=(65536

−46483)%256;

TR0=1; int_time=0; /*中断次数、秒、分、时单元清0*/ second=0;

minute=0;

hour=0;

while(1); { DisplaySecond(second); /*显示秒的子程序,此处没有编写*/ delay(); /*显示延时*/DisplayMinute(minute) ; /*显示分钟子程序,此处没有编写*/delay(); /*显示延时*/DisplayHour(hour) ; /*显示小时子程序,此处没有编写*/delay(); /*显示延时*/}}voidT0_interserve(void)interrupt1using1/*定时器T0中断服务子程序*/{ int_time++; /*中断次数加1*/ if(int_time==20); /*若中断次数计满20次*/ {int_time=0; /*中断次数变量清0*/ second++; /*秒计数变量加1*/ } if(second==60); /*若计满60s*/ {second=0; /*秒计数变量清0*/ minute++; /*分计数变量加1*/ }if(minute==60); /*若计满60分*/{minute=0; /*分计数变量清0*/ hour++; /*小时计数变量加1*/ } if(hour==24);{ hour++; /*小时计数计满24,将小时计数变量清0*/ } TH0=(65536

温馨提示

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

评论

0/150

提交评论