嵌入式系统常用外设驱动编程实例_第1页
嵌入式系统常用外设驱动编程实例_第2页
嵌入式系统常用外设驱动编程实例_第3页
嵌入式系统常用外设驱动编程实例_第4页
嵌入式系统常用外设驱动编程实例_第5页
已阅读5页,还剩151页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统常用外设驱动编程实例嵌入式系统常用外设除了存储设备以外还包括:通信总线及接口(如UART、USB、I2C、SPI等)、人机交互设备(如LCD、键盘、触摸屏等)、其他输入输出设备(如A/D、D/A、PWM等)。本章提要132546触摸屏模块设计实例UART异步串口模块实例A/D转换器应用实例LCD模块设计

LPC1768简介

7PWM控制实例GPIO与键盘实例5.1.1LPC1768概述LPC1768是NXP公司推出的基于ARMCortex-M3内核的微控制器LPC17XX系列中的一员。LPC17XX系列Cortex-M3微处理器用于处理要求高度集成和低功耗的嵌入式应用。LPC1700系列微控制器的操作频率可达100MHz(新推出的LPC1769和LPC1759可达120MHz)。ARMCortex-M3CPU具有3级流水线和哈佛结构。LPC17XX系列微控制器的外设组件包含高达512KB的flash存储器、64KB的数据存储器、以太网MAC、USB主机/从机/OTG接口、8通道DMA控制器、4个UART、2条CAN通道、2个SSP控制器、SPI接口、3个IIC接口、2输入和2输出的IIS接口、8通道的12位ADC、10位DAC、电机控制PWM、正交编码器接口、4个通用定时器、6输出的通用PWM、带有独立电池供电的超低功耗RTC和多达70个的通用IO管脚。

引脚连接模块寄存器映射引脚功能选择寄存器0(PINSEL0)PINSEL0寄存器控制端口0低半部分的位功能。仅当引脚选择使用GPIO功能时,FIO0DIR寄存器中的方向控制位才有效。引脚功能选择寄存器1(PINSEL1)PINSEL1寄存器控制端口0高半部分的位功能。仅当引脚选择使用GPIO功能时,FIO0DIR寄存器中的方向控制位才有效。LPC1768的引脚功能选择寄存器1的位功能描述如表3-7所列。引脚功能选择寄存器2(PINSEL2)PINSEL2寄存器控制端口1低半部分的位功能,包含以太网相关功能引脚。仅当引脚选择使用GPIO功能时,FIO1DIR寄存器中的方向控制位才有效。引脚功能选择寄存器3(PINSEL3)PINSEL3寄存器控制端口1高半部分的位功能。仅当引脚选择使用GPIO功能时,FIO1DIR寄存器中的方向控制位才有效。引脚连接模块寄存器映射引脚功能选择寄存器4(PINSEL4)PINSEL4寄存器控制端口2低半部分的位功能。仅当引脚选择使用GPIO功能时,FIO2DIR寄存器中的方向控制位才有效。引脚功能选择寄存器7(PINSEL7)PINSEL7寄存器控制端口3高半部分的位功能。仅当引脚选择使用GPIO功能时,FIO3DIR寄存器中的方向控制位才有效。引脚功能选择寄存器9(PINSEL9)PINSEL9寄存器控制端口4高半部分的位功能。仅当引脚选择使用GPIO功能时,FIO4DIR寄存器中的方向控制位才有效。引脚功能选择寄存器(PINSEL10)PINSEL10寄存器用于控制P2.2~P2.6的跟踪功能。本章提要132546触摸屏模块设计实例UART异步串口模块实例A/D转换器应用实例LCD模块设计

LPC1768简介

7PWM控制实例GPIO与键盘实例5.2.1LPC1768的GPIO概述LPC1768GPIO简介LPC1768其引脚数为100,其中用做GPIO功能的引脚达70个。具体分配如下:P0端口28个:P0.0~P0.11,P0.15~P0.30。P1端口24个:P1.0~P1.1,P1.4,P1.8~P1.10,P1.14~P1.31。P2端口14个:P2.0~P2.13。P3端口2个:P3.25,P3.26。P4端口2个:P4.27,P4.28。5.2.1LPC1768的GPIO概述LPC1768的GPIO特性如下:加速GPIO功能:GPIO寄存器被转移到外设AHB总线上,以实现高速的I/O时序;屏蔽寄存器允许将某些端口位作为一组进行操作,而其他位不变;所以GPIO寄存器可以以字节、半字和字的方式进行读/写操作;GPIO寄存器可由GPDMA进行访问。置位和清零寄存器允许用一条指令置位和清零操作一个端口的任意位。所有GPIO寄存器支持位带操作功能。单个端口的方向可控制。所有I/O端口在复位后默认为上拉输入端。P0和P2端口的每个引脚提供了中断功能。每个端口的中断可被编程为上升沿、下降沿或边沿产生中断。边沿检测支持异步操作。P0和P2端口的每个引脚支持掉电唤醒功能。5.2.1LPC1768的GPIO概述2.GPIO寄存器描述通用名称描述访问复位值PORTn寄存器名称和地址FIODIR高速GPIO端口方向控制寄存器。该寄存器可单独控制每个端口引脚的方向R/W0FIO0DIR:0x2009C000FIO1DIR:0x2009C020FIO2DIR:0x2009C040FIO3DIR:0x2009C060FIO4DIR:0x2009C080FIOPIN高速GPIO端口引脚状态寄存器。该寄存器真实反映数字端口引脚的当前状态R/W0FIO0PIN:0x2009C014FIO1PIN:0x2009C034FIO2PIN:0x2009C054FIO3PIN:0x2009C074FIO4PIN:0x2009C094FIOSET高速GPIO端口输出置位寄存器。写1使相应的端口引脚输出高电平;写0没有影响R/W0FIO0SET:0x2009C018FIO1SET:0x2009C038FIO2SET:0x2009C058FIO3SET:0x2009C078FIO4SET:0x2009C098FIOCLR高速GPIO端口输出清零寄存器。写1使相应的端口引脚输出低电平;写0没有影响R/W0FIO0CLR:0x2009C01CFIO1CLR:0x2009C03CFIO2CLR:0x2009C05CFIO3CLR:0x2009C07CFIO4CLR:0x2009C09CFIOMASK高速GPIO端口屏蔽寄存器R/W0FIO0MASK:0x2009C010FIO1MASK:0x2009C030FIO2MASK:0x2009C050FIO3MASK:0x2009C070FIO4MASK:0x2009C0905.2.2基于GPIO的矩阵键盘设计常用键盘工作原理(1)独立式按键接口优点:电路配置灵活,软件实现简单。缺点:每个按键需要占用一根口线,若按键数量较多.资源浪费将比较严重应用:主要用于按键较少或对操作速度要求较高的场合,软件实现时,可以采用中断方式,也可采用查询方式(2)行列式按键接口优点:相对于独立接口方式可以节省很多I/O资源,相对于专用芯片键盘可以节省成本,且更为灵活;缺点:需要用软件处理消抖、重键等应用:行列式按键接口适应于按键数量较多,又不想使用专用键盘芯片的场合。键盘扫描阵列:一个瞬时接触开关(按钮)放置在每一行与线一列的交叉点。矩阵所需的键的数目显然根据应用程序而不同。每一行由一个输出端口的一位驱动,而每一列由一个电阻器上拉且供给输入端口一位。扫描次数输出(行)输入(列)键刚按下时000110第一次扫描011111第二次扫描101111第三次扫描110110键9按下时扫描过程3.专用芯片式设计专用键盘处理芯片一般功能比较完善.芯片本身能完成对按键的编码、扫描、消抖和重键等问题的处理,甚至还集成了显示接口功能。专用键盘处理芯片的优点很明显,可靠性高,接口简单,使用方便,适合处理按键较多的情况。但在很多应用场合,考虑成本因素.可能并不是最佳选择。2.3×3矩阵键盘电路设计(1)功能要求利用LPC1768的P1.24~P1.29引脚外接3×3矩阵键盘,将键盘的值通过连接在P2.0~P2.5引脚上的LED按照键盘按键的编号顺序点亮显示。(2)硬件电路3×3矩阵键盘识别实例的硬件电路如图5-5所示。K1~K9的9个轻触式按键以3行3列的形式分别连接到P1.24~P1.29引脚上,其中P1.24~P1.26引脚用于连接矩阵键盘的行,P1.27~P1.29引脚用于连接矩阵键盘的列。8个LED发光二极管连接到LPC1768的P2.0~P2.7引脚上显示按键编号。2.3×3矩阵键盘电路设计5.2.3键盘驱动程序设计

在图5-3中,KR0~KR2连接到P1.24~P1.26作为输出,KL3~KL5连接到P1.27~P1.29作为输入。如果采用了中断,还要初始化中断寄存器。3×3矩阵键盘的识别过程是由以下几个步骤构成:判断按键是否按下。若有键按下,则延时5~10ms,消除按键抖动。再判断按键是否真的按下。若确实有键按下,则执行该按键的功能事件。判断按键是否释放,若没有释放则等待按键释放。键号二进制代码十六进制代码键号二进制代码十六进制代码K1XX1101100x36K6XX0111010x1DK2XX1011100x2EK7XX1100110x33K3XX0111100x1EK8XX1110110x3BK4XX1101010x35K9XX0110110x1BK5XX1011010x2D

3×3矩阵键盘键值代码表5.2.3键盘驱动程序设计1.寄存器宏定义将32位GPIO寄存器分成4个8位的子寄存器进行访问,其他例子则采用开发板自带寄存器定义方式来访问。#definerFIO1DIR3(*(volatileunsignedchar*)0x2009C023)//P1.24~P1.31口方向控制寄存器#definerFIO1PIN3(*(volatileunsignedchar*)0x2009C037)//P1.24~P1.31口状态寄存器#definerFIO1SET3(*(volatileunsignedchar*)0x2009C03B)//P1.24~P1.31口输出置位寄存器#definerFIO1CLR3(*(volatileunsignedchar*)0x2009C03F)//P1.24~

P1.31口输出清零寄存器#definerFIO2DIR0(*(volatileunsignedchar*)0x2009C020)//P2.0~P2.7口方向控制寄存器#definerFIO2SET0(*(volatileunsignedchar*)0x2009C058)//P2.0~P2.7口输出置位寄存器#definerFIO2CLR0(*(volatileunsignedchar*)0x2009C058)//P2.0~P2.7口输出清零寄存器5.2.3键盘驱动程序设计2.键盘初始化函数

键盘初始化函数主要针对键盘所用的端口属性进行初始化。在键盘工作之前,根据行列键盘电路设计原理将P1.24~P1.26配置为输出,P1.27~P1.29配置为输入。如果采用了中断,还要初始化中断寄存器。voidKeyInit()//该函数对键盘使用的端口进行初始化{rFIO1DIR3|=0x07;//设置P1.24~P1.26配置为输出,P1.27~P1.29//配置为输入;其中1为输出。rFIO1CLR3|=0x07;//设置P1.24~P1.26输出为0。}3.键盘扫描程序

根据扫描原理,设置的P1.24~P1.26按如表5-5所示的顺序输出,比较每次扫描P1.27~P1.29的输入值是否等于键刚被按下的输入值,如果相等,找出输出为零的行,则该行即为被按下的行。扫描次数输出(行)第一次扫描110第二次扫描101第三次扫描011是否等于第一次列输入值将行值放入临时变量低4位,返回读取结果是否获取键盘列输入值,放入临时变量高4位按表5-5依次改变行输出值读取键盘列输入值BYTEGetKey()//键盘扫描子程序{ BYTEi,keytemp; keytemp=rFIO0PIN0&0x38;//将列的值存入keytemp的3~6位 for(i=1;i<=4;i<<=1) { rFIO1CLR3|=0x3F; rFIO1SET3=~i&0x3F; if((rFIO0PIN0&0x38)==keytemp)//比较是否有低电平输入 { keytemp=(~keytemp&0x38)|i;//将行的值存入keytemp的0~2位 break; } } returnkeytemp;}4.按键判断函数该函数主要通过对输入端口是否有低电平产生来判断是否有键被按下。用于在轮询方式查询键盘时检测是否有键按下。采用中断方式时不需要该函数。BYTEIsKeyPressed()//是否处于按下状态{ if(rFIO1PIN3&0x38==0x38)//输入端口是否出现0 returnFALSE; else returnTRUE;}5.键盘去抖函数由于在键盘扫描过程中有可能出现外界因素引起的键盘抖动造成按键瞬间接触的情况,如果不进行去抖可能造成按键的误输入。通常是采用程序延时来消抖BYTEScanKey(){BYTEkey;key=GetScanKey();OSTimeDly(50);//延时50毫秒

if(key!=GetScanKey())//延时50毫秒

return0;//返回错误代码}6.键盘扫描与LED灯显示控制主程序将在键盘按键编号显示到对应的LED灯上,其他灯熄灭。LED灯显示值送到P2.0~P2.7引脚上即可驱动点亮相应LED灯。按键编号二进制代码十六进制代码0000000010110000001002200000100043000010000840001000010500100000206010000004071000000080811111111FFintmain(void){ inti; unsignedchartemp; rFIO2DIR0=0xFF; //配置P2.0~P2.7为输出方向 rFIO2CLR0=0xFF; //使P2.0~P2.7输出全为低电平 KeyInit() while(1) { if(IsKeyPressed()) //检测是否有键按下 { temp=ScanKey() for(i=0;i<sizeof(KEYTAB);i++) //查KEYTAB表 if(temp==KEYTAB[i]) { rFIO2CLR0=0xFF;//先清零 rFIO2SET0=LED[i];//若找到显示键值 } } }}本章提要132546触摸屏模块设计实例UART异步串口模块实例A/D转换器应用实例LCD模块设计

LPC1768简介

7PWM控制实例GPIO与键盘实例5.3.1异步串行通信概述UART(UniversalAsynchronousReceiverandTransmitter,通用异步收发器)接口。而RS232、RS499、RS423、RS422和RS485等,是物理接口标准规范和总线标准规范,对应各种异步串行通信口的接口标准和总线标准,它规定了通信口的电气特性、传输速率、连接特性和接口的机械特性等内容。1.异步串行通信协议

异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。1111/01/01/01/01/01/01/01/01100D0D0D0D3D4D5D6第n个字符空闲位空闲位空闲位停止位奇偶位起始位数据位微机异步串行通信中,常用的波特率为50,95,110,150,300,600,1200,2400,4800,9600,115200等。接收方按约定的格式接收数据,并进行检查,一般可以查出以下三种错误:1)奇偶错:在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。2)帧格式错:一个字符从起始位到停止位的总位数不对。3)溢出错:若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。2.异步串行通信接口定义一般UART接口定义四根引脚,分别如下:1)RxD(TransmitData)——数据接收引脚,用于串行通信数据接收;2)TxD(ReceiveData)——数据发送引脚,用于串行通信数据发送;3)RTS(RequesttoSend)——请求数据发送引脚,用于标明接收设备有没有准备好接收数据,即当终端要发送数据时,使该信号有效;4)CTS(CleartoSend)——允许数据发送引脚,用于CTS来起动和暂停来自计算机的数据流,用来表示从设备准备好接收主设备发来的数据,是对请求发送信号RTS的响应信号。UARTAUARTBTxDRxDCTSRTSTxDRxDCTSRTS3、RS-232-C

目前RS-232是PC机与通信工业中应用最广泛的种串行接口。RS-232被定义为一种在低速率串行通信中增加通信距离的单端标准。RS-232遵循RS-232-C标准,美国电子工业协会(ElectronicIndustriesAssociation,EIA)把RS-232-C定义为:“在数据终端设备和数据通俏设备之间使用串行二进制数据交换的接口”。RS-232-C标准是一种硬件协议,用于连接DIE(DataTerminalEquipment,数据终端设备)和DCE(DataCommunicationsEquipment,数据通信设备)两种设备。

RS-232-C定义包括以下几个方面:接口的机械特性;电气信号特征;交换功能特性。RS-232-C采用25针连接器,阳极(插头)接DTE,阴极(插座)接DCE。虽然本标准没有规定连接器的实际类型,但工业上对D-25类型的连接器实行了标准化。在电气方向,RS-232-C作了以下规定:驱动器上的负载电容不超过2500pF。驱动器上的负载电阻在3000欧-7000欧之间。在指定负载下,数据信号传输率(或波特率)低于2000bps。相对于信号地线,RS-232-C线的最高电压不超过15v驱动器能产生+5-+15v(逻辑0)和-5--15v(逻辑1)的电压。输入端能接收+5-+15v(逻辑0)和-5--15v(逻辑1)的信号。

在RS-232-C标准建议信号的传输速度控制在20kbps内,在高速传输时,建议电缆长度不超过50英尺。简单的计算公式为:25英尺(半负载量)时数据信号传输率增加到40kbps、12.5英尺时数据信号传输率增加到80kbps、6英尺时数据信号传输率增加到160kbps。事实上,许多通信包能使两台计算机之间的数据信号传输率达到115.2kbps。注意,RS-232-C标准并没有定义“标推”波特率。RS-232-C标准允许数据在同一时刻收发,也就是全双工通信方式。

RS-232-C标准定义的25针实际上仅用了其中9针。RS-232-C通信所保留的9针见表6-7。注意,PC机上的通信端口一般是作为DTE连接(即阳性连接器)。在实际的应用中,利用RS-232-C的通信通常只使用其中的3根线,即Rd、TxD和GND。说明编写词DTEDB-25M针脚号DTEDB-9M针脚号方向DTEDB-9F针脚号DTEDB-25F针脚号发送TxD2333接收RxD3222发送请求RTS4785清除发送CTS5874数据设置准备好DSR66420数据载波准备好DCD8118数据终端准备好DTR20466振铃检测IndicatorTL2299信号地GroundSG7554.RS-422RS-422由RS-232发展而来。为改进RS-232通信距离短、速度低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mbps,允许在一条平衡总线上连接最多10个接收器。RS-422是一种单机发送、多机接收的单向、平衡传输规范。RS-422的数据信号采用差分传输方式,也称做平衡传输。它使用一对双绞线进行数据传输。驱动器能产生+2-+6v(逻辑0)和-2--6v(逻辑1)RS-422标准全称是“平衡电压数字接口电路的电气特性”。由于接收器采用高输入阻抗并且发送驱动器具有比RS-232更强的驱动能力,故允许在相同传输线上连接多个接收节点,最多可接10个节点,即一个主设备(Master),其余为从设备(Slave),从设备之间不能通信,所以RS-422支持点对多的双向通信。RS-422四线接口由于采用单独的发送和接收通道,因此不必控制数据方向,备装置之间任何必须的信号交换均可以按软件方式(XON/XOFF握手)或硬件方式(一对单独的双绞线)实现。RS-422的最大传输距离为4000英尺(约1219米),最大传输速率为1Mbps。其平衡双绞线的长度与传输速率成反比,在100Kbps速率以下,才可能达到最大传输距离。只有在很短的距离厂才能获得最高传输速率。一般100米长的双绞线上所能获得的最大传输速率仅为1Mbps。

RS-422需要一终接电阻,要求其阻值约等于传输电缆的特性阻抗。在短距离传输时可不需终接电阻,即一般在300米以下不需终接电阻。终接电阻接在传输电缆的最远端。5.RS-485串行总线接口为扩展应用范围,EIA在RS-422的基础上制定了RS-485标准,增加了多点、双向通信能力,通常在要求通信距离为几十米至上千米时,广泛采用R5-485收发器。

RS-485收发器采用平衡发送和差分接收,即在发送端,驱动器将TTL电平信号转换成差分信号输出;在接收端,接收器将差分信号变成TTL电平,因此具有抑制共模干扰的能力,加上接收器具有高的灵敏度,能检测低达200mV的电压,故数据传输可达千米以外。RS-485许多电气规定与RS-422相仿,如都采用平衡传输方式、都需要在传输线上接终接电阻等。RS-485可以采用二线与四线方式,二线制可实现真正的多点双向通信。而采用四线连接时,与RS-422一样只能实现点对多的通信,即只能有一个主(Master)设备,其余为从设备,但它比RS-422有所改进。无论四线还是二线连接方式总线上都可连接多达32个设备。RS-485与RS-422的共模输出电压是不同的。RS-485共模输出电压在-7V至+12V之间,而RS-422在-7V至+7V之间,RS-485接收器最小输入阻抗为12千欧;RS-422是4千欧;RS-485满足所有RS-422的规范,所以RS-485的驱动器可以在RS-422网络中应用,但RS-422的驱动器并不完全适用于RS-485网络。

RS-485与RS-422一样,最大传输速率为10Mb/s。当波特率为1.2kbps时,最大传输距离理论上可达15千米。平衡双绞线的长度与传输速率成反比,在100kbps速率以下,才可能使用规定最长的电缆长度。

RS-485需要2个终接电阻,接在传输总线的两端,其阻值要求等于传输电缆的特性阻抗。在矩距离传输时可不需终接电阻,即一般在300米以下不需终接电阻。5.3.2LPC1768UART串口简介及接口电路设计LRC1768微控制器内置为4路异步串口通信收发器(UART):UART0、UART1、UART2和UART3。它们的主要特征如下:支持5、6、7和8位的数据长度;支持4种类型的奇偶校验;支持1位和2位的停止位;16字节收发FIFO;内置波特率发生器;支持MDA的发送和接受;用于精确控制波特率的小数分频器,并拥有实现软件流控制的自动波特率检测能力和机制;多处理器地址模式;UART3还包含一种支持红外通信的IRDA模式;UART1还具有Modem接口信号和RS-485/EIA-485模式。接收器接收器缓冲寄存器接收器FIFO接收器移位寄存器接收器DMA接口波特率发送器小数因子分频器主分频器(DLM,DLL)FIFO控制和状态线控制和状态IrDA和自动波特检测中断控制和状态发送器发送器保持寄存器发送器FIFO发送器移位寄存器发送器DMA接口TX_DMA_REQTX_DMA_CLRPCLKUARTninterruptRX_DMA_REQRX_DMA_CLRUn_RXDUn_OEUn_TXD····3.寄存器描述(1)UART接收器缓冲寄存器(UnRBR)

接收器缓冲寄存器(UnRBR)是UART接收FIFO的最高字节,包含了最早接收到的字符,并且可通过总线接口进行读取。LSB(位0)表示最早接收的数据位。要正确的成对读出有效的接收字节及其状态位,应先读取线状态寄存器(LSR)的内容,然后再读取接收器缓冲寄存器(RBR)中的字节。(2)UART发送保持寄存器(UnTHR)

发送保持寄存器(UnTHR)是UART发送FIFO单元的最高字节,是发送FIFO单元中的最新字符,可通过总线接口进行写入。LSB代表第一个要发送出去的位。

如果要访问发送保持寄存器(THR),线控制寄存器(LCR)中的除数锁存器访问位(DLAB)必须为0。发送保持寄存器(THR)为只写寄存器。(3)UART除数锁存器(UxDLL/UxDLM)UART除数锁存器由DLL和DLM构成,是UART波特率发生器的一部分,它与小数分频器一同使用,保持产生波特率时钟的APB时钟(PCLK)分频值,波特率时钟必须使波特率的16倍。(4)UART中断使能寄存器(UnIER)UART中断使能寄存器(UnIER)用于使能UARTN的中断源,包含的UART中断使能有接收数据有效中断使能、发送中断使能、线状态中断使能、自动波特率的结束和超时中断使能等。(5)UART中断标识寄存器(UnIIR)UART中断标识寄存器(UnIIR)提供状态代码,用于指示一个挂起处理中断的优先级别和中断源。在访问UART中断标识寄存器(UnIIR)过程中,中断被冻结。如果在访问UART中断标识寄存器(UnIIR)过程中产生了中断,该中断会被记录,下次访问UnIIR时可读出该中断。

(6)UARTFIFO控制寄存器(UnFCR)UARTFIFO控制寄存器用于配置FIFO单元的操作,主要有FIFO使能、FIFO复位、DMA模式选择和接收触发点选择。(7)UART线控制寄存器(U0LCR~U3LCR)UART线控制寄存器用于设置发送或数据字符的格式。(8)UART线状态寄存器(UnLSR)UART线状态寄存器是一个只读寄存器,提供了UARTn的发送和接收模块的状态信息。(9)UART小数分频器寄存器(UnFDR)UART的小数分频器寄存器控制产生波特率的时钟预分频器,并且用户可自由对该寄存器进行读/写操作。波特率计算公式如下:5.3.3串口硬件电路设计5.3.4串口驱动程序设计与PC机通信的软件编程涉及的内容如下:初始化程序。主要包括系统时钟配置初始化和UART0初始化。在UART0初始化中主要包括引脚的配置、FIFO缓冲器的使用、波特率的配置和数据帧格式的设置。串口的收发程序。主要包括字节接收与发送,字符串发送函数。Main()主程序。除了实现初始化函数的调用之外,在while(1)无限循环程序实现字符串的定时输出。1.常量宏声明#defineFOSC12000000/*振荡器频率*/#defineFCCLK(FOSC*8)/*主时钟频率<=100Mhz,

FOSC的整数倍*/#defineFCCO(FCCLK*3)/*PLL频率(275Mhz~550Mhz)*//*与FCCLK相同,或是其的偶数倍*/#defineFPCLK(FCCLK/4)/*外设时钟频率,FCCLK的1/2、1/4、或与FCCLK相同*/#defineUART0_BPS115200/*串口0通信波特率*/#include<LPC17xx.H>//该文件中包含寄存器的声明2.串口0的初始化

按默认值初始化串口0的引脚和通讯参数。设置为8位数据位,1位停止位,无奇偶校验。voidUART0_Init(void){unsignedintusFdiv;LPC_PINCON->PINSEL0|=(1<<20)|(1<<22);/*配置P0.2为TXD0(Com0)功能*/LPC_PINCON->PINSEL0|=(1<<22);/*配置P0.3为RXD0(Com0)功能*/LPC_SC->PCONP=LPC_SC->PCONP|(1<<24);/*打开UART2电源控制*/LPC_UART2->LCR=0x83;/*允许设置波特率*/usFdiv=(FPCLK/16)/UART2_BPS;/*设置波特率*/LPC_UART2->DLM=usFdiv/256;LPC_UART2->DLL=usFdiv%256;LPC_UART2->LCR=0x03;/*锁定波特率*/LPC_UART2->FCR=0x06;}3.接收一个字符

通过判断U0LSR寄存器对应的接收状态标志位值,确定是否存在有效的数据可以接收,如果存在则通过读取寄存器U0RBR的值返回。unsignedcharUART0_GetByte(void){ while(!(LPC_UART2->LSR&0x01));

return(LPC_UART2->RBR);}接收数据开始接收队列是否为满延时接收数据否是4.发送一个字节

通过判断U0LSR寄存器对应的发送状态标志位值,确定发送缓冲寄存器是否为空,如果为空则可以将需要发送的值写入发送数据寄存器U0THR,由串口移位发送。unsignedcharUART0_SendByte(unsignedcharucData){ while(!(LPC_UART2->LSR&0x20));return(LPC_UART2->THR=ucData);}发送数据开始发送队列是否为空延时发送数据否是5.向串口发送字符串为了快速地发送字符串数据,编写一个字符串发送函数。通过该函数重复调用UART0_SendByte将一个字符串快速发送出去。voidUART0_SendString(unsignedchar*s){while(*s!=0)//判断字符串是否结束{ UART0_SendByte(*s++);}}intmain(void){ intdata='0'; SystemInit(); UART0_Init();while(1) { UART0_SendString("http://www.PowerAVR.com\n"); UART0_SendString("http://www.PowerMCU.com\n");Delay(3000);}}本章提要132546触摸屏模块设计实例UART异步串口模块实例A/D转换器应用实例LCD模块设计

LPC1768简介

7PWM控制实例GPIO与键盘实例5.4A/D转换器

A/D转换器有以下类型:逐位比较型、积分型、计数型、并行比较型、电压-频率型,主要应根据使用场合的具体要求,按照转换速度、精度、价格、功能以及接口条件等因素来决定选择何种类型。常用的有以下两种:1)双积分型的A/D转换器双积分式也称二重积分式,其实质是测量和比较两个积分的时间,一个是对模拟输入电压积分的时间T0,此时间往往是固定的;另一个是以充电后的电压为初值,对参考电源VRef反向积分,积分电容被放电至零所需的时间T1。模拟输入电压Vi

与参考电压VRef

之比,等于上述两个时间之比。由于VRef

、T0

固定,而放电时间T1

可以测出,因而可计算出模拟输入电压的大小(VRef

与Vi

符号相反)。

由于T0、VRef

为已知的固定常数,因此反向积分时间T1

与输入模拟电压Vi

在T0

时间内的平均值成正比。输入电压Vi

愈高,VA

愈大,T1

就愈长。在T1

开始时刻,控制逻辑同时打开计数器的控制门开始计数,直到积分器恢复到零电平时,计数停止。则计数器所计出的数字即正比于输入电压Vi

在T0

时间内的平均值,于是完成了一次A/D转换。由于双积分型A/D转换是测量输入电压Vi

在T。时间内的平均值,所以对常态干扰(串模干扰)有很强的抑制作用,尤其对正负波形对称的干扰信号,抑制效果更好。2)逐次逼近型的A/D转换器逐次逼近型(也称逐位比较式)的A/D转换器,应用比积分型更为广泛,其原理框图如图所示,主要由逐次逼近寄存器SAR、D/A转换器、比较器以及时序和控制逻辑等部分组成。它的实质是逐次把设定的SAR寄存器中的数字量经D/A转换后得到电压Vc与待转换模拟电压V。进行比较。比较时,先从SAR的最高位开始,逐次确定各位的数码应是“1”还是“0”,其工作过程如下:逐次逼近式的A/D转换器的主要特点是:转换速度较快,在1—100/μs以内,分辨率可以达18位,特别适用于工业控制系统。转换时间固定,不随输入信号的变化而变化。抗干扰能力相对积分型的差。例如,对模拟输入信号采样过程中,若在采样时刻有一个干扰脉冲迭加在模拟信号上,则采样时,包括干扰信号在内,都被采样和转换为数字量,这就会造成较大的误差,所以有必要采取适当的滤波措施。2.A/D转换的重要指标1)分辨率(Resolution)

分辨率反映A/D转换器对输入微小变化响应的能力,通常用数字输出最低位(LSB)所对应的模拟输入的电平值表示。n位A/D能反应1/2n满量程的模拟输入电平。由于分辨率直接与转换器的位数有关,所以一般也可简单地用数字量的位数来表示分辨率,即n位二进制数,最低位所具有的权值,就是它的分辨率。2)精度(Accuracy)

精度有绝对精度(AbsoluteAccuracy)和相对精度(RelativeAccuracy)两种表示方法。①绝对误差在一个转换器中,对应于一个数字量的实际模拟输入电压和理想的模拟输入电压之差并非是一个常数。我们把它们之间的差的最大值,定义为“绝对误差”。通常以数字量的最小有效位(LSB)的分数值来表示绝对误差,例如:±1LSB等。绝对误差包括量化误差和其它所有误差。②相对误差

是指整个转换范围内,任一数字量所对应的模拟输入量的实际值与理论值之差,用模拟电压满量程的百分比表示。例如,满量程为10V,10位A/D芯片,若其绝对精度为±1/2LSB,则其最小有效位的量化单位:9.77mV,其绝对精度为=4.88mV,其相对精度为4.88/104=0.048%。3)转换时间(ConversionTime)

转换时间是指完成一次A/D转换所需的时间,即由发出启动转换命令信号到转换结束信号开始有效的时间间隔。转换时间的倒数称为转换速率。例如AD570的转换时间为25us,其转换速率为40KHz。4)电源灵敏度(powersupplysensitivity)

电源灵敏度是指A/D转换芯片的供电电源的电压发生变化时,产生的转换误差。一般用电源电压变化1%时相当的模拟量变化的百分数来表示。5)量程量程是指所能转换的模拟输入电压范围,分单极性、双极性两种类型。例如,单极性量程为0~+5V,0~+10V,0~+20V;双极性量程为-5~+5V,-10~+10V。6)输出逻辑电平多数A/D转换器的输出逻辑电平与TTL电平兼容。在考虑数字量输出与微处理的数据总线接口时,应注意是否要三态逻辑输出,是否要对数据进行锁存等。7)工作温度范围由于温度会对比较器、运算放大器、电阻网络等产生影响,故只在一定的温度范围内才能保证额定精度指标。一般A/D转换器的工作温度范围为(0~70℃),军用品的工作温度范围为(-55~+125℃)。3.A/D转换过程

A/D转换过程分为4个阶段:即采样、保持、量化和编码。采样是将一个时间上连续变化的信号转换成时间上离散的信号,根据奈奎斯特采样定理fs≥2fh,考虑到模数转换器件的非线性失真、量化噪声积极手机噪声等因素的影响,采样频率一般取2.5~3倍的最高频率成分。要把一个采样信号准确地数字化,就需要将采样所得的瞬时模拟信号保持一段时间,这就是保持过程。保持实将时间离散、数值连续的信号变成时间连续、数值离散信号,虽然逻辑上保持器是一个独立单元,但是,实际上保持其总是和采样器集成到一起,两者合称采样保持器。5.4.2LPC1768A/D转换器介绍LPC1768A/D转换器特点LPC1768微控制器内置一个8通道的12位A/D转换器。该12位A/D转换器采用逐次逼近式原理实现模拟量的转换。其主要特征如下:12位逐次逼近式模/数转换器;8个引脚复用为A/D输入脚;具有掉电模式;测量范围:0~VREEP(通常为3V,不超过VDDA);12位转换频率:200kHz;具有一个或多个输入的BURST转换模式;可选择由输入跳变或定时器匹配信号触发转换。5.4.2LPC1768A/D转换器介绍3.寄存器描述(1)A/D转换器控制寄存器(AD0CR)A/D转换器控制寄存器主要用于配置A/D转换器的通道选择、设置A/D时钟源以及控制A/D转换等操作。(2)A/D转换器全局数据寄存器(AD0GDR)A/D转换器全局数据寄存器(包含最近一次A/D转换的结果,还包含转换过程中出现的状态标志的复件。

有两种方法可以读取ADC的转换结果:一种是利用A/D转换器全局数据寄存器来读取ADC的全部数据;另一种是读取A/D通道数据寄存器。(3)A/D转换器状态寄存器(AD0STAT)A/D转换器状态寄存器允许同时检查所有A/D通道的状态。每个A/D通道的ADDRn寄存器的DONE和OVERRUN标志都反映在ADSTAT中,在ADSTAT中同样可以找到中断标记。5.4.2LPC1768A/D转换器介绍(4)A/D转换基本操作

一旦ADC转换开始就不能被中断。若前一个转换未结束,软件新写入就不能发起新的转换,新的边沿触发事件也会被忽略。硬件触发的转换:如果ADCR的BURST位为0且STAR字段的值包含在010~111之内,则当所选引脚或定时器匹配的信号发生跳变时,A/D转换器就启动一次转换。中断:DONE标志位为1时,中断请求会被提交到NVIC,软件通过NVIC中的A/D中断使能位来控制是否产生中断。当ADDR被读取时,DONE标志被否决。DMA控制:DMA传输请求产生于ADC中断请求线。发起DMA传输的情况与产生中断的情况相同。5.4.3LPC1768A/D程序设计ADC驱动程序设计主要包括初始化程序、获取ADC转换结果函数以及启动和停止ADC转换函数。1.常量宏声明 #defineADC_VALUE_MAX0xFFF//AD转换的最大值2.ADC初始化函数

该函数主要完成ADC相关的GPIO属性设置,实现系统时钟源的配置、设置ADC工作参数等工作。voidADC_Init(void){LPC_PINCON->PINSEL3&=~(3UL<<30);/*P1.31isGPIO*/LPC_PINCON->PINSEL3|=(3UL<<30);/*P1.31设置为AD0.5*/LPC_SC->PCONP|=(1<<12);/*给ADC模块供电*/LPC_ADC->ADCR=(1<<5)|/*选择AD0.5引脚*/(4<<8)|/*设置ADC时钟为25MHz/5*/(1<<21);/*使能ADC*/}5.4.3LPC1768A/D程序设计3.ADC启动转换函数该函数主要设置ADCR寄存器,启动ADC开始转换。voidADC_StartCnv(void){LPC_ADC->ADCR&=~(7<<24);/*先停止转换*/LPC_ADC->ADCR|=(1<<24);/*启动转换*/}4.ADC停止转换函数该函数主要设置ADCR寄存器,停止ADC转换。voidADC_StopCnv(void){LPC_ADC->ADCR&=~(7<<24);/*停止转换*/}5.4.3LPC1768A/D程序设计5.获取ADC转换结果值函数

该函数负责读取ADC转换结果值。通过比较ADC寄存器ADGDR中的状态位,判断ADC是否转换结束,如果转换结束则从对应的ADGDR寄存器中读取数据。该函数只有在启动ADC后才能调用。uint32_tADC_GetCnv(void){

uint32_tadGdr;while(!(LPC_ADC->ADSTAT&0x01));/*等待转换结束*/adGdr=LPC_ADC->ADGDR;return((adGdr>>4)&ADC_VALUE_MAX);/*读取转换结果值*/}本章提要132546触摸屏模块设计实例UART异步串口模块实例A/D转换器应用实例LCD模块设计

LPC1768简介

7PWM控制实例GPIO与键盘实例5.5.1触摸屏原理及有关技术触摸屏按其工作原理的不同分为表面声波屏、电容屏、电阻屏和红外屏几种。常见的又数电阻触摸屏。如图5-21所示,电阻触摸屏的屏体部分是一块与显示器表面非常配合的多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的导电层,上面再盖有一层外表面硬化处理、光滑防刮的塑料层,它的内表面也涂有一层透明导电层,在两层导电层之间有许多细小(小于千分之一英寸)的透明隔离点把它们隔开绝缘。触摸屏结构示意图触摸屏分压原理

如图所示,当手指或笔触摸屏幕时(图c),平常相互绝缘的两层导电层就在触摸点位置有了一个接触,因其中一面导电层(顶层)接通X轴方向的5V均匀电压场(图a),而Y方向电极对上不加电压时,在X平行电压场中,触点处的电压值可以在Y+(或Y-)电极上反映出来,使得检测层(底层)的电压由零变为非零,控制器侦测到这个接通后,进行A/D转换,并将得到的电压值与5V相比即可得触摸点的X轴坐标为(原点在靠近接地点的那端):

Xi=Lx*Vi/V(即分压原理)同理得出Y轴的坐标,这就是所有电阻触摸屏共同的最基本原理。5.6.2电阻触摸屏的有关技术透明的导电涂层材料有两种:1)ITO,氧化钢,弱导电体,特性是当厚度降到1800埃以下时会突然变得透明,透光度为80%,再薄下去透光率反而下降,到300埃厚度时又上升到80%。

2)镍金涂层,五线电阻触摸屏的外层导电层使用的是延展性极好的镍金涂层材料,外导电层由于频繁触摸,使用延展性好的镍金材料目的是为了延长使用寿命,但是成本较高,镍金导电层虽然延展性好,但是只能作透明导体,不适合作为电阻触摸屏的工作面,因为它导电性太好,不宜作精密电阻测量,而且金属不易做到厚度非常均匀。电阻式触摸屏分为四线电阻和五线电阻触摸屏电阻技术触摸屏是一种对外界完全隔离的工作环境,故不怕灰尘、水汽和油污,可以用任何物体来触摸,比较适合工业控制领域及办公室内有限人的使用。四线电阻触摸屏原理测量原理在触摸点X、Y坐标的测量过程中,测量电压与测量点的等效电路图所示,图中P为测量点XVYY电容屏电容屏结构电容屏主要有自电容屏与互电容屏两种,以现在较常见的互电容屏为例,内部由驱动电极与接收电极组成,驱动电极发出低电压高频信号投射到接收电极形成稳定的电流,当人体接触到电容屏时,由于人体接地,手指与电容屏就形成一个等效电容,而高频信号可以通过这一等效电容流入地线,这样,接收端所接收的电荷量减小,而当手指越靠近发射端时,电荷减小越明显,最后根据接收端所接收的电流强度来确定所触碰的点。电容屏要实现多点触控,靠的就是增加互电容的电极,简单地说,就是将屏幕分块,在每一个区域里设置一组互电容模块都是独立工作,所以电容屏就可以独立检测到各区域的触控情况,进行处理后,简单地实现多点触控。电容屏较电阻屏的优势在于,电容屏是人体静电驱动原理,电阻屏是作用力驱动原理,而电容屏在恶劣条件下都可以使用(高温,高湿,低温),不过电阻屏的使用就会受到气候环境的影响。

5.5.2触摸屏驱动芯片FM7843简介及接口电路设计本系统触摸屏的控制是使用的FM7843芯片,它是4线电阻触摸屏转换接口芯片。该芯片具有同步串行接口的12位取样模数转换器,在125kHz吞吐速率和2.7V电压下的功耗为750μW,而在关闭模式下的功耗仅为0.5μW。控制字功能描述:BITNAME功能描述7S启动位。一个新的控制字在12位转换时需要15个时钟周期,在8位转换模式下12个时钟周期。6-4A2-A0通道选择位。和ER/DFR位一起设置,这些位控制多路输入设置、开关和参考输入。3MODE12/8位转换选择位。这位控制转换模式选择:0为12位转换,1为8位转换。2SER/DFR单端/差分参考输入选择位。和A2-A0一起配置,该位控制多路输入设置、开关和参考输入。1-0PD1-PD0省电模式选择位。FM(ADS)7843的特点实现触摸屏的驱动选择控制(X、Y通道)对于输入电压或附加电压进行AD转换同步串行接口最大转换速率125KHz可编程控制8位或者12位转换模式工作电压2.7V-5.0V两个附加的输入端口FM7843与LPC1768的连接5.5.3触摸屏驱动程序设计触摸屏控制命令宏定义#include“LPC17xx.h”#define CHX 0x90 /*通道Y+的选择控制字*/ #define CHY 0xd0 /*通道X+的选择控制字*/

#defineSSPSR_RNE2#defineSSPSR_BSY4/*SPI传输速率bit-frequency=PCLK/CPSR*/#defineSPI_SPEED_4MHz18 /*4MHz*/#defineSPI_SPEED_2MHz36 /*2MHz*/#define SPI_SPEED_1MHz 72 /*1MHz*/#define SPI_SPEED_500kHz144 /*500kHz*/#defineSPI_SPEED_400kHz180 /*400kHz*/

#defineTP_CS(a) if(a) \ LPC_GPIO0->FIOSET=(1<<6);\ else \ LPC_GPIO0->FIOCLR=(1<<6)#defineTP_INT_IN(LPC_GPIO2->FIOPIN&(1<<13))触摸屏初始化函数2.触摸屏初始化函数

触摸屏初始化函数主要对与FM7843项连接的端口属性进行配置。包括初始化端口P0.6、P2.13,P0.7、P0.8、P0.9配置为SSP端口,GPF6配置为输出属性,P2.13配置为EXINT5。触摸屏初始化函数voidTchScr_init(){LPC_GPIO0->FIODIR|=(1<<6);/*设置P0.6为TP_CS输出*/LPC_GPIO2->FIODIR|=(0<<13);/*设置P2.13为TP_INT输入*/TP_CS(1);LPC_SC->PCONP|=(1<<10);/*打开SSPI1模块电源*//*P0.7设置为SCK1,P0.8设置为MISO1,P0.9设置为MOSI1*/LPC_PINCON->PINSEL0&=~((3UL<<14)|(3UL<<16)|(3UL<<18));//P0.7~P0.9清零LPC_PINCON->PINSEL0|=(2UL<<14)|(2UL<<16)|(2UL<<18);LPC_SC->PCLKSEL0&=~(3<<20);/*PCLKSP0=CCLK/4(18MHz)*/LPC_SC->PCLKSEL0|=(1<<20);/*PCLKSP0=CCLK(72MHz)*/LPC_SSP1->CR0=0x0007;/*8Bit,CPOL=0,CPHA=0*/LPC_SSP1->CR1=0x0002;/*SSP1使能,主设备模式*/LPC17xx_SPI_SetSpeed(SPI_SPEED_500kHz);while(LPC_SSP1->SR&(1<<SSPSR_BSY));/*等待忙结束*/while(LPC_SSP1->SR&(1<<SSPSR_RNE))/*清除SPIRXFIFO*/ dummy=LPC_SSP1->DR;}3.触摸屏坐标获取函数

读取触摸屏坐标值的程序流程图如图5-23所示。主要通过INT_TC中断来判断是否有触摸屏按下,如果有,则启动ADC转换,依次将X和Y坐标值转换完成,然后保存到相应的变量中。

从触摸屏控制器获得的X与Y值仅是对当前触摸点的电压值的A/D转换值,它不具有实用价值。这个值的大小不但与触摸屏的分辨率有关,而且也与触摸屏与LCD贴合的情况有关。而且,LCD分辨率与触摸屏的分辨率一般来说是不一样,坐标也不一样,因此,如果想得到体现LCD坐标的触摸屏位置,还需要在程序中进行转换。转换公式如下:x=(x-TchScr_Xmin)*LCDWIDTH/(TchScr_Xmax-TchScr_Xmin)y=(y-TchScr_Ymin)*LCDHEIGHT/(TchScr_Ymax-TchScr_Ymin)

其中,TchScr_Xmax、TchScr_Xmin、TchScr_Ymax和TchScr_Ymin是触摸屏返回电压值x、y轴的范围,LCDWIDTH、LCDHEIGHT是液晶屏的宽度与高度。初始化函数4.写入转换命令函数由于访问ADS7843是通过SPI总线进行访问的,需要通过SSP1向ADS7843写数据,将命令和其他相关的配置参数写入ADS7843。staticunsignedcharWR_CMD(unsignedcharcmd){unsignedcharbyte_r;

while(LPC_SSP1->SR&(1<<SSPSR_BSY)); /*等待转换完成*/LPC_SSP1->DR=cmd;while(LPC_SSP1->SR&(1<<SSPSR_BSY)); /*等待转换完成*/while(!(LPC_SSP1->SR&(1<<SSPSR_RNE))); /*等待直到RxFIFO不为空*/byte_r=LPC_SSP1->DR;returnbyte_r;/*返回接收值*/}

ADS7843送回控制器的X与Y值仅是对当前触摸点的电压值的A/D转换值,它不具有使用价值。这个值得大小不但与触摸屏的分辨率有关,而且也与触摸屏与LCD贴合的情况有关。而且,LCD分辨率与触摸屏的分辨率一般不一样,坐标也不一样,因此,如果想得到体现LCD坐标的触摸屏位置,还需要在程序中进行转换。假设LCD分辨率是320X240,坐标原点在左上角;触摸屏分辨率为900X900,坐标原点在左上角,则转换公式如下:

xLCD=[320×(x-x2)/(x1-x2)];yLCD=[320×(y-y2)/(y1-y2)];其中,(x,y)为触点位置,(x1,y1)为触摸屏最大坐标点,,(x2,y2)为触摸屏原点初始化函数5.ADS7843转换结果读取函数

该函数主要实现通过SSP1将ADS7843转换结果值读出,返回两个字节转换数据。在该函数中将读取的数据进行移位处理得到有效数据。触摸屏坐标获取函数触摸屏坐标获取是根据触摸屏被按下产生的中断或通过轮询方式检测导游触摸动作时从FM7843读出对应坐标值。ADS7843转换结果读取函数staticintRD_AD(void){unsignedshortbuf,temp;

temp=WR_CMD(0x00);buf=temp<<8;DelayUS(1);temp=WR_CMD(0x00);;buf|=temp;buf>>=3;buf&=0xfff;returnbuf;}读取ADS7843通道X+或Y+的ADC值函数intRead_XY_Position(unsignedcharxy_cmd){inti;TP_CS(0);DelayUS(1);WR_CMD(xy_cmd);DelayUS(1);i=RD_AD();TP_CS(1);returni;}读取ADS7843通道X+或Y+的ADC值函数将X坐标和Y坐标读出后映射到LCD的坐标系上,得到LCD上的坐标值。voidTP_GetAdXY(int*x,int*y){intadx,ady;adx=Read_XY_Position(CHX);DelayUS(1);ady=Read_XY_Position(CHY);*x=adx;*y=ady;*x=(*x-TchScr_Xmin)*LCDWIDTH/(TchScr_Xmax-TchScr_Xmin); *y=(*y-TchScr_Ymin)*LCDHEIGHT/(TchScr_Ymax-TchScr_Ymin);}8.触摸动作判断函数除了基本的触摸动作以外,触摸屏动作还包括双击、移动等动作。触摸屏的单击和双击动作的区分是在规定时间内同一范围坐标内的触摸次数;触摸屏的移动动作的判断是通过触摸屏按下的时间和触摸屏抬起时的不同坐标值来实现的。触摸屏动作判断流程图如图6.18所示。本章提要132546触摸屏模块设计实例UART异步串口模块实例A/D转换器应用实例LCD模块设计

温馨提示

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

评论

0/150

提交评论