版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目第1课单片机概述及内外部结构分 单片机概述及发 何谓单片 MCS51单片机 、C51、STC89C51、W78E58B等的关 单片机引脚 单片机的应用电 单片机最小系 1.3.1 单片机8051结 单片机内部RAM分 特殊功能寄存 第2课常用基本电路定理、、元器件介 常用基本电路定 欧姆定理 常用电子线路常用元器件介 常用进制的转 位和字 第3课C51语言简 C语言简 单片机C语言的发展历 C语言的主要特 单片机的汇编语言与C51语言比 单片机C语言与标准C语言异 第4课单片机C程序的基本结 单片机C语言实 程序工作原 源程 源程序 源程序 单片机C程序的基本结 头文 主函 函 C51基本数据类 基本数据类 常量与变 变 8051片内资源及位变 特殊功能寄存器的C51定 自定义变量类型 运算符与表达 赋值运 算术运 关系运 逻辑运 位运 条件运算 逗号运算 第5课C51基本结构程序设 顺序结构:0条语 if语 break语 循环结构3条语句(for,while,do- while语 do-while语 for语 循环嵌 循环语句中的break语 continue语 goto语 return语 总 第6课函 函数的与定义、调 函数的函数定 函数的调 第7课数组和指 一维数 一维数组的定 一维数组元素的一维数组的初始 二维数 二维数组的定 二维数组元素的二维数组的初始 字符数 C51中数组进行初始化有下述规 数组总 指 指针变量的定 指针变量的地址运 指针和数 7.6.6指针数 指针总结 第8课8051内部资源编程——I/O端口的应 P0口的结 P1口结 P2口的结 P3口的结 I/O口应用总 第9课8051内部资源编程——定时 计数的概 计数器的容 定时的概 任意计数及溢 控制计数器/定时器常用的寄存 计数初值的计 程序初始化步骤 作业用定时的方式让一个灯亮1秒灭1 第10课8051内部资源编程——中 有关中断的概 中断的响应过 8051的中断系 8051的中断 C51中断程序设 C51编译器支持在C源程序中直接嵌入中断服务程 C51中断服务程序的注意事 中断程序步 中断程序范 第11课8051内部资源编程——通 异步传 同步传 8051单片机的串行接口结 波特率计 串行口程序设 串口设置步 作 第12课人机界面接术-数码管和矩阵键 数码管介 动态扫描显示接 程序范 键盘接 程序范 第13课人机界面接术——字符型液晶 LCD显示器基本原 LCD主要参 明确目的即要实现什么功能:用单片机控制LCD1602显示两行英 硬件设 软件编程流 时序 程序范 第14课人机界面接术——点阵型液晶 点阵型液晶屏LCD12864简 软件设 编程流 第15课编程- 模数转换 数模转换器ADC0804介 硬件连 A/D接口设计要 数模转换 D/A转换器的性能指 DAC0832引脚功能如下 程序范 第16课IIC总线及AT24C02的应 IIC总线简 AT24C02简 IIC协议编程步 对AT24C02进行读操作:如图16.2所 对AT24C02进行写操作:如图16.3所 AT24C02应用范 目 硬件设 时序 程序范 第17课步进电机的应 步进电机简 应用范 目 硬件设 程序范 第18课红外红外编码介 红外与蓝牙的差别 编码原 例子程 第19课单总线协议—DS18B20温度传感 DS18B20与单片机的典型接口设 DS18B20例子程 第20课ModBus中CRC16循环冗余校验知 CRC概 工业总线 ModBus串行通信数据格 ModBus串行通信功能 ModBus串行通信CRC16校 第21课通信的SPI概 性能特 SPI协议举 举 性能补 SPI协议心 第22章KeilC51编译、连接、仿真调试方 安装软件:首先安装Keilc编译软件 KEILC51使用方法 KeilC51仿真调试方 第23课C51程序编写规 C51的编程规范-编程总原 规范范 编程举例 命名 常量 变量 函数 编辑风 缩 空 对 空 修 形 项目管理知 项目定 项目特 项目过 项目评估标 电子产品开发流 项目计划书编 项目实 项目评 项目结 附 附录1:ZC600开发板原理 1课单片机,是典型的嵌入式微控制器(MicrocontrollerUnit),常用英文字母的缩写MCU表示单片机。器RAM、只读器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、 、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算图1.1单片机外部结构 图1.2单片机内部组单片机典型管脚为40脚封装,当然功能多一些的单片机也有引脚比较多的,如、、 功能少的只有10多个或20多个引脚,有的甚至只有8个引脚。 、C51、STC89C51、W78E58B等的关国IN公司生产的一系列单片机的总称,这一系列单片机包括许多品种,如8031,8051,8751,8752等,合会看到8031的名称。IN公司将MCS51的技术给了很多其它公司,像ATMEL、宏晶等,其中STC89C51就是这几年在我国非常流行的单片机。以后用STC89C51来完成一系列的实验。表 C51系列单片机部分选型一览12345664K的ROM1280BYTERAM。0-80M。图 图
1.5振蒎电路:单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使按图1.5接上即可。。5msRST器器按功能可以分为只读和随机存取器两大类。只读器的英文缩写为ROM(READONLYMEMORY)其特性如字面意思一样。随机存取器,英文缩写为RAM(RANDOMACCESSMEMORY),即随时可以改写,EEROM,FLASH:可读,可写,掉电数据还存在(例如AT24C02EEPROMSFR为特殊功能寄存器(Special Register)区,是系统使用的区域DATA是用户区,用户可以自由分配使用,其速度最快 SETB09HSETB也可以 工作寄存器为R0~范围:00H~1FH,分为4组表1.2。表 特殊功能寄存B4I/OP0,P1,P2,P3第二类就是IE,IP,SBUF,SCON第2课常用基本电路定理、、元器件介直流电路中电压UIR。即R=U/I式中U-电路两端电压(伏),I-电路中的电流(安);R-电路中的电阻(欧)2.22.2 表 实际上这就是一个二进制位,因此我们就把一根线称之为一“位”,用BIT表示。或者8位就称之为一个字节(BYTE)。 #include<reg52.h> void voiddelay(unsignedinti{for(;i>0;i--)}void{{}}
3课C51入了C198580C51单片机的C语言,简称C51。单片机CC(如是对标准C语言的扩展。本课程将初步介绍C语言在单片机开发中的运用,并对C语言程序的开发软件KeilC51的使用进行详细说明。CPCDOSWORDSTARCC语言可以像汇编语言一样对位、字节和地址进行操作,C34个运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C的运算类型极其丰富表达式类型多样化,灵活使用各种运算符可以实现在其它高级语言现各种复杂的数据类型的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能,支种结构化方式可使程序层次清晰,便于使用、以及调试。C语言是以函数形式提供给用户的,这些函数一般的高级语言语法检查比较严,能够检查出几乎所有的语法错误。而C语言允许程序编写者有较大C语言程序生成代码质量高,程序执行效率高C语言程序中的主函数是汇编程序中的主程序;C语言程序中的函数是汇编程序中的子程序。程序编写C语言程序一般使用小写英文字母,C语言的关键字均为小写英文字母,也可以使用大写英文C语言严格区分字母大小写,也就是说abc、Abc、ABC3个不同的名称,而汇编语言不区分字母表 汇编和C51语言比强弱少多弱弱强弱强用C语言编写单片机程序与编写标准C程序的不同之处就在于根据单片机结构及内部资源定义相应支持MCS-51系列单片机的C语言编译器有很多种。如KEIL/Franklin、DUNFIELDSHAREWARE学习单片机C51选一本C514课C4.14.1C
图 单片机基本连线输出然后循环即可控制8个灯循环点亮。}}}{}void{ #includevoidvoiddelay({unsignedint #include<reg52.h> /*c语言头文件*/#defineucharunsignedchar #defineuintunsignedvoiddelay(uintt);voiddelay(uintt){for(;t!=0;t--)for(;t!=0;t--)}voidmain(void){uchar{{}}}这样在编写单片C程序时,就不需要考虑单片机内部的器分配等问题了,例如:#include<reg51.h>VoidVoid{}的常量与变量都要先数据类型,以便把不同的数据类型定位在51单片机的不同区中。表的数值范围的。C51的数据类型与一般C语言的数据类型大多相同,但也有其扩展的数据类型。 代表存放8位数据; 表 基本数据类 11unsigned1signed1-1unsigned2signed2-2*1~3unsigned4signed4 4C51char(单字节字符型)int(双字节整型)两种,这两种数据类型对数据下优先级别自动进行:bit→char→int→long→float;unsigned→signed。称为符号常量。例如:在指令“#definePI3. ”后,符号常量PI即代表圆周率3. msb位作为标志位,并使用二进制的补码表示数值。长整型变量(1ongint)——长整型变量占用4个字节用#define语句。例如:#defineucharunsignedchar#defineuintunsignedint表 KEILuVision2所能支持的器类 PACT或LARGE所规定的默认器类型去指定变量的区域。无论什么模式都可以变量在任何的8051区范围,然而把最常用的变量、表 对SFR的操作,只能采用直接寻址方式。为了能直接这些特殊功能寄存器,KeilC51扩充了两个关键字“sfr、列单片机C51编程。sfrsfrsfr后面是一个要定义的名字,要符合标识符 sbitP1_1=sbitP1_1=sfrP3=sfrP3=sbitP3_1=P3^sbitP3_1=sbitP3_1=0xB0^unsignedunsignedcharbdataintbdata sbit bitbit 通常 C51编译器会将位变量分配在位寻址区的某一位。1)位变量不能定义成一个指针,如不能定义:bit*POINTER。例:sbitflag=P1^0;charbdatajj例:sbitflag=P1^0;charbdatajj 言是0~15。还想用integer的话,你可以这样写:typedeftypedefintinteger;integera,b;例如:a例如:af=d- 1算术运算符表达式ucahra,b,cucahra,b,c算符。括号中的内容优先级最高。a+b*c;//乘号的优先级高于加号,故先运算b*c,所得的结果再与a相加。(a+b)*(c-d)-6,*次之,减号优先级最低.故先运算(a+b)和(c-d运算符优先级相同时,运算对象先与左面的运算符结合。a+b-c;//b两边是“+”、“-”运算符优先级相同,按左结合性优先执行a+b再减C。 unsignedunsignedcharx,y;unsignedcharz;z=(unsigned <=(小于或等于)>=(大于或等于)==(等于)!=(不等于)用关系运算符的运算结果只有0和1两种,也就是逻辑的真与假,当指定的条件满足时结果为1,不满足时结果为0。关系表达式结构如下:表达式1关系运算符表达式2。例如: 达式或逻辑量连接起来就是逻辑表达式了。C51提供三种逻辑运算:逻辑或||逻辑非&&和||高低C516&|^~"~"(按位取反)。补0,而溢出的位舍弃。移位运算并不能改变原变量本身。表 XY00000010111001111110于常量表达式。应当注意的是,“++”和“--”的结合方向是“自右向左”。--iii1i++;ii1iii以下是C51语言中的复合赋值运算符:- b/=a+5等价于51也支持语言中有一个三目运算符,它就是条件运算符“?:”,它可以把三个表达式连接构成一个条件表达式。条件表达式的一般形式如:逻辑表达式?表达式1:表达式2当逻辑表达式的值为真时(非0值)时,整个表达式的值为表达式1的值;当逻辑表达式的值为假(值为0)c=(a>b)?a:c=(a>b)?a:达式的值等于最右边表达式的值,就是“表达式n”的值。5课C51断时,堆栈不会因为程序使用了任何可以接受令而。结构化程序由若干模块组成,每个模块中包BBA在选择结构中,程序首先对一个条件语句进试。当条件为“真”(True)时,执行一个方向上的程序流程;当条件为“假”(False)时,执行另一个方向上的程序流程,如图5.2所示。 5.2.1if语 )void{inta,b,maxvoid{inta,b,max;max=a;{max=b}}void{inta,b,max;{max=a}{max=bvoid{inta,b,max;{max=a}{max=b}}假假假真真假真 真表达式表达式表达式表达式语句语句语句语句语句if(){}elseif(){}elseif(){}elseif(){}else{…elseif(表达式所有的表达式均为假,则执行语句n,然后继续执行后续程序。是其它表达式,如赋值表达式等,甚至也可以是一个变量。例如:if(a=5if(b)语句;都是允许的。只要表达一组语句用{}括起来组成一个复合语句。但要注意的是在“}”之后不能再加分号。{{}{a=0;b=10}{…case常量表达式n:语句n;default:语句n+1;}同时,则执行default后的语句。其执行流程图如图5-2(C)所示。ucharx,a=3;{ucharx,a=3;{}uchar{uchar{case1:x=4;break;case3:x=8;break;}break在使用switch语句时还应注意以下几点:循环结构3条语句(for,while,do-执行的时间并不会减少。循环程序的结构如图5.4所示。 5.4.1while语句 表达式)语句;环体语句。其执行过程可用图5.4(a)表示。使用while语句应注意以下几点:{do-while语句和while语句的区别:ucharuchara,x=1;{执行结果:如果a=0,那么x=2;a01,则xfor{循环体语句组 省去了表达式1; 省去了表达式2; 省去了表达式3; #defineucharunsignedchar#defineuintunsignedintvoiddelay(uchart);//函数/*voiddelay(uchar{} void{ucharcode{uchari;P0=0x00{{}}}ucharuchar①②{}continuereturnreturn序。由于break语句的转移方向是明确的,所以不需要语句标号与之配合。void{uchara=1,b=1intn;void{uchara=1,b=1intn;{a=a+1;break;b=b+1}}continue语句之后的语句,转入下一次循环条件的判断与执行。应voidvoid{uchara=1,b=1intn;{a=a+1;b=b+1;}}goto作用,与goto语句配合使用。在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的.6课6.16.1C51中所有函数与变量一样,在使用之前必须。所谓,是指说明函数是什么类型的函数,一般在程序的开头用#include<*.h>或#include"*.h"说明。程序才会编译通过。函数类 数据类 其中:函数类型是该函数返回值的数据类型,可以是以前介绍的整型(int),长整型(long),字符型(char(float),(double)(void可以只有数据类型而没有形式参数,也可以两者都有。intputlll(intintputlll(intx,inty,intz,intcolor,char*p)*说明一个整型函数char voidstudent(intn,char {}函数体为C51提供的库函数和语句以及其它用户自定义函数调用语句的组合,并包括在一对花括号“{}”中。需要的是一个程序必须有一个主函数,其它用户定义的子函数可以是任意多个,这些函数的位置也没有什么限制,可以在voidmain(void)函数前,也可以在其后。,形式传递过去,然后进入子函数运行,运行结束后再按子函数规定的数据类型返回一个值给调用函数。6-1intmax(inta,intb);/* intmax(inta,intb){{returna;returnb;}void{intx,y,zprintf("inputtwonumbers:\n");}当数组作为形式参数向被调用函数传递时,只传递数组的地址,而不是将整个数组元素都到函数 #include /*c#defineucharunsignedchar#defineuintunsignedint/*voiddelay(unsignedintvoiddelay(unsignedint{}void{uchari; delay(1000);/*函数调用延时子程序*/P0=0Xff;{{ //50000是实参}}}}b.一是执行到语句return时返回。中指定返回的值即可。return语句可以向调用函数返回值,但这种方法只能返回一个参数。受到限制,特别对于较大的数组更是如此。voidintm[10]; intmain(void){intiprintf("Inmainbeforecalling\n");{m[i]=i }disp();/*调用子函数*/printf("\nInmainaftercalling\n");return0}void{intjprintf("Insubfuncafter{m[j]=m[j]*10;}}}作处理时的堆栈。如要求一个n!(n的阶乘)的值可用下面递归调用:unsignedlongmul(intunsignedlongmul(intn);intmain(void){intmputs("Calculaten!n=?\n");return0}unsignedlongmul(int{unsignedlongp;p=1L}运行结果:calculate 5义的程序代码和数据,不会与另一个函数内的程序代码和数据相互影响。而被另一函数调用,也就是说一个函数对于整个程序都是可见的。个函数体的开头处说明,而且允许变量的说明(包括初始化)跟在一个复合语句的左花括号的后面,直到配对的右花括号为止。它的作用域仅在这对花括号内,当程序执行到出花括号时,它将不复存在。当然,内层中的变量即使与外层中的变量名字相同,它们之间也是没有关系的。6-4inti=10;int{inti=1;{inti=2;{externi;i+=1;}}return0;}运行结果 7课[常量表达式];例如:inta[10];intn;intintn;int例如 int例如:int例如:int值为0。不能写成:float不能写成:float用的行下标范围为0~2,列下标范围为0~3。依次赋给 行各元素;以此类推。数据类型数组名[行常量表达式][列常量表达式]={charcharcharstaticcharstaticcharc[]={'C','可写为:staticcharc[]={"C或去掉{}写为:sraticcharc[]="Cvoid{staticcharc[]="BASIC\ndBASE";}void{staticcharc[]="BASIC\ndBASE";}如果定义数组 于以前介绍过的整数,它属于一种新的数据类型,即指针类型。一整型变量,则表达式&x的类型是指向整数的指针,而它的值是变量x的地址。 intint“*”,否则它为一般的整型变量了。另外,在定义中的int表示该指针变量为指向整型数的指针类型的变量,有时也可称ip为指向整数的指,7.6.27.6.2intintintinti=200,int可以把i以后我们便可以通过指针变量ip间接变量i,例如:intinti,j,*p1,*p2;i='a';j='b'p1=&i;p2=&j这时赋值表达式:p2=p1p2p1i,*p2i,而不是j,7.2变量,这给程序员带来灵活性,也使程序代码编写得更为简洁和有效。intintx, y=++*px;/*px的内容加上1之后赋给y,++*px相当于++(*x)]*/ /*相当于y=*px;px++*/指针在一定条件下,可进行比较,这里所说的一定条件, 义,例如两个指针变量p,q指向同一数组,则<,>,>=,<=,==等关系运算符都能正常进行。若p==q为真,则表示p,q指向数组的同一元素;若p<q为真,则表示p所指向的数组元素在q所指向的数组元前(对放大因子为8。p,qp-qp指对象与q所指对象之间的元素个数。其相减的结果遵守对象类型的字节长度进行缩小的规则。 intinta[10],和前面介绍过的方法相同,可以使整型指针p指向数组中任何一个元素 假定给出赋值运素在内存中是连续存放的,因此,我们就可以通过指针变量p及其有关运算间接数组中的任何一个p+ia+ia[iia[i*(p+i)和*(a+i)都表示p+ia+ia[i指向数组元素的指针,也可以表示成数组的形式,也就是说 p[2]就相当于*(p+2pa[5],p[2]就相当于a[7]。而p[-3]就相当于*(p-3),a[2]。C列的末尾加上一个空字符‘\0’,总比它的字符个数多一个字节。C51中操作一个字符串常量的方法charchars[]="a数组s9s[8]中的内容是'\0程序直接把字符串复写到数组中,即对数组s初始化。时,根据数组的类型转换规则,它被转换成字符指针。因此,若我们定义了一字符指针cp:charchar*cp;于是可用 cp="a以后我们可通过cp来这一存贮区域,如*cp或cp[0]就是字符a,而cp[i]或*(cp+i)就相当于字符串的第i号字符,但企图通过指针来修改字符串常量的行为是没有意义的。*例如:int*a如果ucharsp,sp为字符型变量;如果uchar*sp,sp如果uchara,b,c,d;uchar*sp 且指针如上图所示sp指向30H,8课8051内部资源编程——I/O&&图 8.2P1&&图8.3P2口的一位结 图 P3口的一位结与P1口比较,P2口多了转换控制部分。P2口除了可以作普通I/O表8.1 P3口第二功能I/OI/O口之前,要先把I/O口置为高电平,然后再读。例如:读P0a=P0;I/O口时,只要把数据放入P1(或其他I/O口寄存器)P0,P1P2P3I/O9课8051计数,太长不说,要一边做一边量呢,怎么办呢?行业中有很巧妙的方法,用一个周长是1米的,将电缆绕在上面一周,由线带轮转,这样轮转一周不就是线长1限的,过一时间之后,就逐渐变满。上的计数器多只计到99…么单8031单片机中有两个计数器,分别称之为T0和T1,由两个8位的RAMTHTLx166556。那就是秒针每一次走动的时间正好是1秒。结论:只要计数脉冲的间隔相等,则计数值就代表了时间的流逝。由此,单片机中的定时器和计数器图11图12.1,12脉冲的时间间隔也很准。问:一个12M的晶振,它提供给计数器的脉冲时间间隔是多少呢?当然这很容易,就是21M图 就是产生了变化,产生了变化就会,就象定时的时间一到,闹钟就会响一样。至于会什么事件,我们下次课再介绍,现在我们来研究另一个问题:要有多少个计数脉冲才会使TFx由0变为1。溢出。这个没有问题,问题是我们现实生活中,经常会有少于65536个计数值的要求,如包装线上,一打1(T1)。8052系列单片机增加了一个定时器T2。它们都有定时器或计数的功能,可用于定时控制、延时、对外部计数和检测等场合。器自动加1直至计满溢出。所以定时的分辨率是时钟振荡频率的1/12。跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。CPU在单片机中有两个特殊功能寄存器与定时/计数有关,这就是TMODTCON1、定时器模式寄存器TMOD中各位的说明,如图9.2所示。图 计数器,低4位则用于中断(我们暂不管)。9.3TCON9.4TR0(1)1,开关才能合上,脉冲才能过来。因此,TR0(1)称之为运行控制位,可用指令SETB计数器/定时器运行,用指令CLR来关闭定时/计数器的工作,一切尽在自已的掌握中。其中,当GATE=1,位来控制定时器是否工作。注意:图9.4中是以定时器T1为例,定时器T0T1完全一样。图 定时器1结构方框地方呢?它放在T(0/1)882,预。通常这种式作方式用于波特率发生器(在串行接口中讲解),用于这种用途时,定时器就是为数,而且中间不要任何延迟,可见这个任务用工作方式2来完成是最妙不过了。由于定时器T1无操作模式30被拆成2个独立的定时/计数器来用。其中,TL0可以构成8位的定时器或计数器的工作方式,而TH0则只能作为定时器来用。我们知道作定时、计数器来用,需要控制,计满后溢出需要有溢出标记,T0被分成两个来用,那就要两套控制及溢出标记了,从T12(当波特率发生器用)T03当预置多大的值呢?对了,就是8192-12=8180。间定时器必须工作在方式01。若采用方式1,则定时器的初值为:TC=65536-2000=63536=F830H2、装预置数:计算T/CTHx继续查询TF(1/0)。sbitP1_0=P1^0;{sbitP1_0=P1^0;{TH0=0X3c {{TH0=0X3c}}}10课8051什么是中断,我们从一个生活中的例子引入。你正在家中看书,突然了,你放下书本,去,和来的人交谈,然后放下,回来继续看你的书。这就是生活中的“中断”的现象,就是正常被监视电平突变等)请求CPU迅速去处理,于是CPU暂时中断当前的工作,转去处理所发生的;中断服务处理完成后,再回到原来被中断的地方,继续原来的工作。这一过程称为中断,如图10.1所示。设想一下,我们正在看书,了,同时又有人按了门铃,你该先做那样呢?如果你正是在等一个很重要的,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。如果不是这两者(即不等,也不是等人上门),你可能会按你通常的习惯去处理。总之这里存,或你正开门与人交谈,又有响了情况。考虑一下我们会怎么办吧。 当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序 图10.1中断流程图 级中断优先级,可形成中断嵌套;28052一个中断源定时器T2。MCS-8051中断系统的结构,如图10.2所示源和它们的触发方式控制位锁存在特殊功能寄存器TCON的低4位,见下表10.1。表 70中断后,由硬件将IE0清0。断后,该位由硬件自动清0。TF1的工作原理与TF0相同。TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。表10.2 串行口控制寄存器SCON串口通信中断源的控制位分别锁存在特殊功能寄存器SCON中见表10.2。在后面一课,做详细的图 中断允许寄存IP在特殊功能寄存器中,字节地址为B8H,位地址(由低位到)分别是B8H~BFH,IP用来锁存各图10.4中断优先级寄存器个同优先级的中断源同时向CPU申请中断,哪一个申请得到服务,取决于它们在CPU内部登记排队的序号。例如:现在有如下要求,将T0、INT1设为高优先级,其它为低优先级,求IP的值。IP的首3位没用,000,后面根据要求写:IP=06H,看下面的表。表 中断优先级设╳╳╳╳╳╳00110这里有个问题:如果5个中断请求同时发生时又会出现什么情况呢?比如在上例中,五个中断同时发生,求中断响应的次序。按照我们学到的内容,响应次序应该为:定时器0→外中断1→外中断0→定时器 转向该中断矢量地址单元中,去执行相应的中断服务程序。各个中断源在程序器中的中断地址及表 8051中断中断序号0高1234{timer0(void)interrupt {timer0(void)interrupt }KeilC51PSW中RS1、RS0返回值函数名([参数])[模式][重入]interruptn[usingm];//m、n表达式。n取值范围0~31,对应该中断源的编号。中断源编号依次为0、1、2、3、4、5。m取值范围0~5。voidvoidserial_serviceinterrupt4using{}前再开放中断。//CPU有个IF寄存器可以关中断响应断,程序会陷入死循环。对于串口中断,通常要判别是RI或TI中断。设置#defineucharunsignedchar#defineuint unsignedintsbitP1_0=P1^0;voidtimer0(void)interrupt10{TL0=0xb0;P1_0=!P1_0;//P1.1取反}voidmain(void){while(1) }11课8051图 并行通 图11.2串行通一个字符又称为一帧信息。一帧信息由起始位、数据位、奇偶校验位和停止位4自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。在同步传送中,每一个数据块开头处要用同步字符SYN全双工传送:两机之间同一时刻可以互相发送和接收信息(见图11.5)11.3(只能A,B)图11.4(A时刻AB,B时刻B11.5(同一时刻A,B可互相收发数据)图11.6PC11.2单片机的串行接口结构TTL或CMOS移位寄存器来扩充I/O11.6。1、串行口控制寄存器表 SM0、SM1:控制串行口的工作方式,共4种工作方式,见表11.2。表11.2 00101111112、特殊功能寄存器PCON是为了在OS的80C51单片机上实现电源控制而附加的串口通信只用到了其中最是SMOD。表11.2 特殊功能寄存器PCON注:若SMOD=0,K=1SMOD=1,K=2。11.5表 2、计算定时器l的初值——装载THl、31——编程TCONTRl#defineucharunsignedchar#defineuint unsignedintunsignedcharm;voiddelay(unsignedint {for(;t!=0;t--)}void{{ }}区区图 串口调试助手界第12课人机界面接术-数码管和矩阵键12.1LEDhgfedcba(8)D7D6D5D4D3D2D1D08例如,对于共阴数码管,当公共阴极接地(为零电平),而阳极hgfedcba时,数码管显示“P”字符的字形代码应为(8CH)。表 数码管的编 动态扫描显示接口是单片机中应用最为广泛的一种显示方式之一。其接口电路是把所有数码管的8I/O控制的,所以我们就可以自行决定何时显示哪一位了。COM12.289C51P0口能灌入较大的电流,所以我们采用共阳的数码管,并且不用限流电阻,它们的公共端则由PNP型三极管图 12.1.2程序范 #include#include#defineucharunsignedchar#defineuint unsignedint codeshu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, delay(uint{inti;{{{ }}}{delay(uintfor(;t>0;t--}键盘是由若干按键组成的开关矩阵,它是微型计算机最常用的输入设备,用户可以通过键盘向单片机它12.4中,当按键被按下时,P1.0输入为高电平;当按键按下后,P1.0输入为低电平。由于按键是机械触点,04图 图12.4按键抖动波为使CPUP1图 矩阵键盘典型电 #include#include#define#defineunsignedunsigned X0= X1= X2= X3= Y0= Y1= Y2= Y3=voiddelay(unsignedintt); unsignedcharKey_Scan(void);//函数ucharvoiddelay(unsignedint{for(;t!=0;t--)}unsignedchar{uchara,key;{{{goto}{goto}{goto}{goto}}else}elsea=0xff;pp1:key=a;returnkey;}uchar {uchark,KEY;{ {case0x7e:KEY=0x04;break;//4case0x7d:KEY=0x08;break;//8case0x7b:KEY=0x0b;break;//case0x77:KEY=0x0f;break;37260159 KEY=0xff;break; }}return}void {ucharcode ucharuchardisy[2]={0x0b,0x0b};{{}{}}}第13课人机界面接术——字符型液晶它的光电效应不同。显示器,本身不发光。通过电压控制对环境光在显示部位的反射或透射来实现显2、:从去掉脉冲电压算起,到透光率达饱和值10%所需时间
表13.1 LCD1602液晶屏的引脚说明图13.1 图 图 写数据时#include#defineucharunsignedchar#defineuintunsignedintsbitRS=P1^7;sbitRW=P3^4;sbitEvoiddelay(uintt); mandByte(ucharch);voidSendDataByte(ucharch);voidInitLcd();voidDis yMsg1(uchar*p);void yMsg2(ucharvoiddelay(uint {for(;t!=0;t--)}{delay(1000);//delay}voidSendDataByte(uchar {delay(1000);//delay}void {mandByte(0x38);//设置工作方式,测忙信号mandByte(0x38);//设置工作方式,测忙信号mandByte(0x38);//设置工作方式,测忙信号mandByte(0x38);//设置工作方式,测忙信号mandByte(0x08);//显示关闭mandByte(0x01);//清屏 mandByte(0x06);//输入方式设}voidDisyMsg1(uchar{unsignedcharmandByte(0x80DDRAM{}}voidDisyMsg2(uchar{unsignedcharmandByte(0xc0DDRAM{}}void{charcodemsg1[16]=" charcodemsg2[16]=":075526457584";{DisyMsg1(msg1);DisyMsg2(msg2);}}第14课人机界面接术——点阵型液晶8*16个点。详细资料见12864的。图 图14.2LCD12864与单片机连接图 LCD12864写时#include<stdio.h>#include<stdio.h>#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint/*Definetheregistercommandcode*/#defineDisp_On0x3f#defineDisp_Off#defineCol_Add0x40//Y轴那一列#definePage_Add0xb8 //总计8页。#defineStart_Line0xc0 #defineLcd_BusP0 sbitRS=P1^7; //数据\指令选择sbitE //读\写使能选择sbit sbit charcodeHZ_Store[]={/*--文字:1中宋体12;此字体下对应的点阵为:宽x高=16x16 voiddelay(unsignedintt){}(unsignedchar{RS=0;} 写数据到LCD voidwrite_data(unsignedcharDispdata){RS=1;}
void{unsignedcharj,k;CS1=1;CS2=1{{}}} 指定位置显示汉字16*16 voidhz_disp16(unsignedcharpag,unsignedcharcol,unsignedintss){unsignedcharj=0,i=0;ss=ss*32;{{}}}}void{CS1=1;CS2=1;}void{unsignedchari=0CS1=1;CS2=0;{}}第15课编程-ADC0804是一种逐次近型A/D转换器。转换一开始SAR向DAC置MSB(逻辑“1”),并通过比较器,输出大于模拟输入,则MSB丢弃(逻辑“0”),然后SAR继续向DAC置入次,将它保留还是丢弃,取nnn输入量,Vref为参考电压,Bx数字输出量,2中nADCn
其中,VX为图 四位逐次近型A/D原理方框图 图 图 2AD——I/OINTR====}{a=P0;}void y()//在P1口上显示AD{}void{{ }}A/D转换器(ogtoDigitalConverter)则相反,它能把模拟量转换成相应数字量D/A转换器(DigitaltoogConverter)是一种能把数字量转换成模拟量的电子器件。因此,ADCDAC是沟通模拟电路和数字电路的桥梁,也可以说是两者之间的接口。22
2-8=39mV16DAC10V×2-16=153µV上述指标外,转换速度(ConversionRate)和温度灵敏度(TemperatureSensitivity)也是DACDAC0832 图 由,得出图15.7单极性电压输出接线方 图15.8双极性电压输出接线方图 双缓冲模式时图 单缓冲模式时图 直通模式文字说unsignedunsigned}}voidsingle_buffered(){{WR1=1;CS=1;}} {{}}voidmain(){ }16课IICAT24C02连接在相同总线上的IIC400PF16.216.2线,而且体积大大缩小,同时具有工作电源宽、能力强、功耗低、数据不易丢失和支持编程等IICICSDA(串行数据线)及SCL(串行时钟线)图 2、写地址 图 图 图 图 图 在第九个时钟的时候发送一个NOACK信号(高电平),16.216.8所示。图 IIC有应答信号的时图 #include<reg52.h> #include"IIC.h" #defineucharunsignedchar#define unsigned#define #define delay(unsignedint {} {ucharcodeshu[12]={0xc0,0xf9,0xa4,0xb0,0x99,//0,1,2,3,4, uchari;uchars[4];IIC_Init();//IIC初始化s[1]=s[0]/100;//数字百位s[2]=s[0]%100/10;//数字十位s[3]=s[0]%10;//数字个位{{}}}#include#includevoidIIC_Delay(){unsignedchart;t=10;whilet0 }voidIIC_Init(){IIC_SCL=1; IIC_SDA= }voidIIC_Start(){IIC_SDA=1;IIC_Delay();IIC_SCL=1;IIC_Delay();IIC_SDA=0;IIC_Delay();IIC_SCL=0;IIC_Delay();}voidIIC_Write(unsignedchardat){unsignedchart=8;{IIC_SDA=(bit)(dat&0x80);dat<<=1;IIC_SCL=1; IIC_SCL= }while(--t!=0}unsignedcharIIC_Read(){unsignedchardat;unsignedchart=8;IIC_SDA= {IIC_SCL= dat<<=if(IIC_SDA)dat++;IIC_SCL=0; }while(--t!=0);returndat;} bitIIC_GetAck(){bitIIC_SDA=1; IIC_SCL= ack=IIC_SCL= return} voidIIC_PutAck(bitack){IIC_SDA=ack;IIC_Delay();IIC_SCL=1;IIC_Delay();IIC_SCL=0;IIC_Delay();}voidIIC_Stop(){unsignedintt;IIC_SDA=0;IIC_SCL=IIC_SDA=t=15;while(--t!=0} bitIIC_Puts(unsignedcharSlaveAddr,unsignedcharSubAddr,unsignedcharsize,unsignedchar{SlaveAddr&=0xFE; if(IIC_GetAck(){return1;} if(IIC_GetAck()){return1;}{if(IIC_GetAck(){return1;}}while(--size!=0 return0;} bitIIC_Gets(unsignedcharSlaveAddr,unsignedcharSubAddr,unsignedcharsize,unsignedchar{IIC_Write(SlaveAddr);//发送从机地址if(IIC_GetAck(){return1;}if(IIC_GetAck()){return1;}if(IIC_GetAck(){return1;}for(;;){*dat++=ifsize0C02{{}}return0;}unsignedunsignedchar unsignedchar unsignedcharsize, unsignedchar*dat 1)头文件开始:#ifndefIIC_H IIC_H2)头文件结束:#endif//IIC_H。小EEROM,FLASH:可读,可写,掉电数据还存在(例如AT24C02EEPROM17课
加入适当的脉冲信号,就会以一定的角度(称为步角)转动。转动的速度和脉冲的频率成正比。p0.3,p0.4,p0.5,p0.6.注意:uln2003本身是一个反向器,因此在实际应用中我们要注意。 图17.2 说明:SP2用跳线帽连接后,PLE即对应CPU的P3.3。动端口为P0.3,P0.4,P0.5,P0.6。ULN2003为功率放大,相当于7个三极管的集成。每对输入输出和三极管类似。注意;ULN2003同时也为反向器,编程时要注意!17.1步进电机编码表日#include#defineucharunsignedchar#defineuintunsignedintcodeE=P3^5;bdataOUT;HF=OUT^1;BZAABBCCDDvoiddelay(unsignedint {}void {} mandByte(unsignedchar {delay(100);//delay}voidSendDataByte(unsignedchar {delay(100);//delay}void {mandByte(0x01);//清屏}voidDisyMsg1(uchar{unsignedcharmandByte(0x80);DDRAM地址{}}voidDisyMsg2(uchar{unsignedcharmandByte(0xc0);DDRAM地址{}}voidDisyshu(ucharaddrr,uchar{mandByte(addrrDDRAM地址}voidmotoruint {uinti;{DD=0;AA=1;HC373();delay(5000);AA=1;BB=1;HC373();delay(5000);AA=0;BB=1;HC373();delay(5000);BB=1;CC=1;HC373();delay(5000);BB=0;CC=1;HC373();CC=1;DD=1;HC373();CC=0;DD=1;HC373();delay(5000);DD=1;AA=1;HC373();}}unsignedchar{uchara,{{if(!(Y0&&Y1&&Y2&&Y3)){a=P2;a=(a&0xf0+0x0e);gotopp1;}if(!(Y0&&Y1&&Y2&&Y3)){a=P2;a=(a&0xf0+0x0d);gotopp1;}if(!(Y0&&Y1&&Y2&&Y3)){a=P2;a=(a&0xf0+0x0b);gotopp1;}}else}elsea=0xff;pp1:key=a;return}uchar uchark,KEY;{ {case0x7e: 837260159 }}return}{ucharcharcodemsg1[16]=" charcodemsg2[16]="--V1.0";OUT=0X00;HC373(); }}}18课红外外线鼠标,红外线,红外线键盘等等。红外的特征:红外传输是一种点对点的传输方式,无线,不已经是一套标准,IR收/发的组件也是标准化产品。接最大数目可达7个,同时区分硬件。57600K/bps~19200K/bps1.1Mb/s~2.1Mb/s甚至更高(红外:无区 蓝牙:加 的组合表示二进制的“1”,其波形如图2所示。外发射二极管产生红外线向空间发射,如图3所示。01H168位操作码(功能码)及其反码。UPD6121G最多额128种不同组合的编码。个起始码(9ms),一个结果码(4.5ms),8位地址码(9ms~18ms),8位地址码(9ms~18ms),8位对于红外线很多电子者都感觉到非常神奇,都感觉到非常神奇,看不到,摸不着,但能实现无线,其实控制的关键就是我们要用单片机来识别红外线发出红外光信号,即我们通常所说的,单片机得知发过来的是什么信号,然后再做出相应的判断与控制,如我们按电视机的频道按钮,则单片机会控制更换电道,如按的是音量键,则单片机会控制增减音量。而的关度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,.#include<reg52.h>#include"IR32.h"#define#include<reg52.h>#include"IR32.h"#defineLED_PORTP1voidmain(void){{{ }}}2.//描述:2.使用定时计数3.17字节data4.624字节code*****功能:红外接收*****创建者:#include<reg52.h>#include #define #defineTIME_1_00MS0x0399//0x039a//#defineTIME_1_13MS0x0469//0x0480//#defineTIME_2_00MS0x07cf//0x0733//#defineTIME_2_50MS0x09c3//0x0900//#defineTIME_13_2MS0x338f//0x2ecd//#defineTIME_20_0MS0x4e1f//0x4E20//#define // #define #defineTIME_14_0MS #define #define#define#defineIR_NOSIGNAL#defineIR_HEADCHK(0xffff-#define #define#define#define unsignedcharIrok;unsignedcharIrdat;unsignedcharIR_check=0;unsignedchar unsignedlongIrbuf=0;***************参数 *****创建者:voidIrInit(void) {IP|=0X01;IE|=0X83;TCON|=0X11;TMOD|=TH0=TIME1_LOAD>>8;TL0=TIME1_LOAD&0XFF;}**********功能:检测红外码*****参数 *****创建者:unsignedchar unsignedcharOK=Irok=0;//接收完成标志}***************参数 *****创建者:#ifGET_CODE32unsignedlong {}*****函数名:IrGetD*****功能:获取位红外数据码*****参数 *****创建者:unsignedcharIrGetDode(void) {}**********功能:红外程序,(外中断服务程序*****参数:无**********创建者:voidint0_isr(void)interrupt {unsignedint if(IR_check==IR_NOSIGNAL)//引导脉冲第一次引起中 {TR0=0; TH0=TIME1_LOAD>>8; TL0=TIME1_LOAD&0xff;//重赋定时初值TR0=1; }{timer=((TH0<<8)|TL0)-TIME1_LOAD;TH0=TIME1_LOAD>>8;TL0=TIME1_LOAD&} {if(timer>TIME_12_3MS&&timer<{IR_check=IR_DHK;//引导脉冲 }}elseif(IR_check==IR_DHK){if(timer>TIME_1_00MS&&timer< //data{IrbufIrbuf //把数据移入Irbuf中 {IR_check=IR_NOSIGNAL}}else (timer>TIME_2_00MS&&timer< //data{Irbuf=(Irbuf<<1)|{}}}**********参数 voidtime0_isr(void)interrupt{TH0=TIME1_LOAD>>8;{Irok=1 }TR0=0 }19课单总线协议—DS18B20DS18B20是DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读93.75ms750ms912位的数字量,并且从DS18B20读出的信息或写挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温范围:-55~+1250.5支持多点组网功能,多个DS18B20DS18B203PR358脚SOIC164bROM8位是产品类型的编号,接着是每个器件的惟一的序号,共有48856位的CRC,这也是多个DS18B20可以采用一线进行通信的原因。非易失性温度触发器TH和TL,可通过软件写入用户上下限DS18B20温度传感器的内部器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM。后者用于TH,TL值。数据先写入RAM,经校验后再传给E2RAM。而配置寄存器为高速暂存器中的第5个字节,他的内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换51,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20所示(DS18B20出厂时被设置为12位)。个字节的CRC码,可用来保证通信正确。DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二00625℃/LSB形式表示。温度值格式如下:2是对应的一部分温度值。警标志置位,并对主机发出的告警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行告警CRC在64bROM的最高有效字节中有循环冗余(CRC)。主机根据ROM的前56位来计算CRC值,并和存入DS18B20中的CRC值做比较,以判断主机收到的ROM数据是否正确。意义的一系列高低电平信号),它的指令可分为ROM指令和RAM指令;ROM指令主要对其内部的ROM进行操作,如查所使用DS18B20的序列号等,如果只使用一个DS18B20,ROM操作一般就可以直接跳过了;RAM指令主要是完成对其内RAM中的数据进行操作,如让其开始进行、读数据等。表 ROM指令读DS1820ROM中的编码(64位地址匹配ROM命令,后跟64ROM序列,让总线控制器在多点总线上定位一只特定的DS1820。只有和64位ROM序列完全匹配的DS1820才能响应随后的器操作命令。所64ROM64位ROM编码,单总线上与该编码相对应的DS1820使之作出响应,为下一步对该搜索DS182064ROM地址。为操作各器件作好跳过64ROMDS1820这条命令的流程图和SearchROM相同。然而,只有在最近一次测温后遇到符合条件的不掉电,状态将一直保持,直到再一次测得的温度值达不到条件。执行后只有温表 RAM指令将RAM中第3、4字节的内容到EEPROM中首先须对DS18B20进行复位,复位就是由控制器(单片机)给DS18B20,单总线至少480uS的低电平信号。当18B20接到此复位信号后则会在15~60uS后回发一个的存在脉冲。存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高,以便于在15~60uS后接收存在脉60~240uS的低电平信号。至此,通信双方已经达成了基本的协议,接下来将会是控位之间最少相隔1μs,写一个数据位时间周期不能小于60μs。1uS的15uSDS18B20会发送内部数据位,这时控制如果发现总线为高电平表示读出“1”,如果总线为低电平则表示读出数据“0”。每一位的之前都由控制器加一个起始信号。注意:如下图所示,必须在读时序间隙开始的15uS内数据位才可以保证通信根据DS18B20的通讯协议,主机(单片机)控制DS18B20这样才能对DS18B20进行预定的操作。复位要求主CPU500微秒,然后释放,当DS18B20(请参照上面的复位时序图执行ROM操作的5条指令之一:1)读ROM,2)匹配ROM,3)搜索ROM,4)跳过ROM,5)以MCS51单片机为例,图3中采用寄生电源供电方式,P1.1口接单线总线为保证在有效的DS18B20处于写器操作和温度A/D变换操作时,总线上必须有强的上拉,上拉开启时间最大为10μs。采用寄生电源供电方式是VDD和GND端均接地。由于单线制只有一根线,因此发送接收口必须是三态的。主机控12MHzDS18B203个子程序:INIT为初始化子程序,WRITE为写(命令或数据)子程序,READ为读数据子程序,所有的数据读写均由最低由同一条线完成。因此,对读写的操作时序要求严格。为保证DS18B20的严格I/O时序,需要做较精确的延时。有了比较精确的延时保证,就可以对DS18B20进行读写操作、温度转换及显示等操作。#include<reg52.h>sbit#include<reg52.h>sbitio_DS18B20_DQ=P1^4;//定义总线接口#defineuint8 unsignedchar#defineuchar #defineuint unsignedint#defineuint16 unsignedint#defineDS18B20_DQ_HIGHio_DS18B20_DQ=#defineDS18B20_DQ_LOW io_DS18B20_DQ=0#defineDS18B20_DQ_READio_DS18B20_DQucharcode*infor="Thecurrenttimetempratureis";voidUart_Send(uchar*p,ucharnum);voiddelay(uint/*保存温度值的数组.依次存放正负标志,温度值十位,个位,和小数位*/uint8Temperature[7]=" .\r\n";voidv_Delay10Us_f(uint16{while(--Count{}} uint8v_Ds18b20Init_f(void 初始化DS18B20//复位 uint8v_Ds18b20Init_f(void){uint8FlagDS18B20_DQ_LOWio_DS18B20_DQ=0v_Delay10Us_f(80);//延时大于usDS18B20_DQ_HIGHv_Delay10Us_f(15);//最少隔us后60-240us发送存在脉冲信号。Flag=DS18B20_DQ_READ;//如果Flag为,则复位成功,否则复位失败returnFlag;}*voidv_Ds18b20Write_f(uint8Cmd*** **voidv_Ds18b20Write_f(uint8Cmd){uint8ifor(i=8;i>0;i--{ //拉低总线,开始写时序DS18B20_DQ_READ=Cmd&0x01; v_Delay10Us_f(5); DS18B20_DQ_HIGH; Cmd>>=1;}}*uint8v_Ds18b20Read_f(void*****uint8v_Ds18b20Read_f(void){uint8ReadValue,ifor(i=8;i>0;i--{ ReadValue>>=1;if(DS18B20_DQ_READ==1ReadValue|=0x80}returnReadValue}*uint16v_Ds18b20ReadTemp_f(void*****uint16v_Ds18b20ReadTemp_f(void){uint8TempH,TempL;uint16ReturnTemp/*if(v_Ds18b20Init_())return;//复位失败,在这里添加错误处理的代码 v_Ds18b20Init_f(); //复位DS18B20初始化v_Ds18b20Write_f0xcc v_Ds18b20Write_f0x44 v_Ds18b20Init_f();v_Ds18b20Write_f0xcc v_Ds18b20Write_f(0xbe); TempL=v_Ds18b20Read_f(); TempH=v_Ds18b20Read_f() //v_Ds18b20Init_f ReturnTemp=TempH;ReturnTemp<<=8;ReturnTemp|=TempL returnReturnTemp} voidv_TemperatureUpdate_f(void voidv_TemperatureUpdate_f(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖南省衡阳市衡阳县第四中学2026-2027学年高二上学期开学测试数学试卷(含答案)
- 2026年安徽省阜阳市公务员人员招聘考试备考题库及答案详解
- 2026北京大学智能学院招聘劳动合同制工作人员1人笔试参考题库及答案解析
- 2026年江苏省连云港市事业单位人员招聘笔试参考题库及答案详解
- 2026年南充市嘉陵区公务员人员招聘笔试模拟试题及答案详解
- 2026年吉安市吉州区公务员人员招聘笔试模拟试题及答案详解
- 2025年安顺市西秀区事业单位人员招聘笔试试题及答案详解
- 2025年四川省内江市事业单位人员招聘考试试题及答案详解
- 2025-2026学年《大树和小草》说课稿
- 2026上海交通大学医学院附属仁济医院招聘神经外科医师及核医学科技术员2人考试备考题库及答案解析
- 2026年道路客运汽车驾驶员职业技能等级认定(三级)操作技能试题
- 2026年安徽省中考英语真题试卷及答案
- 内支撑设计计算书(Excel自动计算版)
- 2026年安徽省基层法律工作试题(附答案)
- 2026年福建厦门大学附属第一医院海沧院区(厦门市肿瘤医院)辅助岗位招聘8人笔试备考试题及答案详解
- 2025-2026学年江苏省苏州市高新区苏州实验中学高二上学期10月月考数学试卷(含答案)
- 煤矿井下无轨胶轮车安全管理培训
- 慢性肾脏病基层诊疗管理指南(2025版)
- (正式版)DB11∕T 354-2023 《生活垃圾收集运输管理规范》
- DB4403T 508-2024《生产经营单位锂离子电池存储使用安全规范》
- T/IESB 002-2020景观照明设施运行维护费用估算
评论
0/150
提交评论